mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 09:47:50 +08:00
58 lines
2.1 KiB
Java
58 lines
2.1 KiB
Java
package com.simpleplugin;
|
|
|
|
import com.intellij.codeInsight.lookup.LookupElement;
|
|
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
|
import com.intellij.openapi.project.Project;
|
|
import com.intellij.openapi.util.TextRange;
|
|
import com.intellij.psi.*;
|
|
import com.simpleplugin.psi.SimpleProperty;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class SimpleReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference {
|
|
private String key;
|
|
|
|
public SimpleReference(@NotNull PsiElement element, TextRange textRange) {
|
|
super(element, textRange);
|
|
key = element.getText().substring(textRange.getStartOffset(), textRange.getEndOffset());
|
|
}
|
|
|
|
@NotNull
|
|
@Override
|
|
public ResolveResult[] multiResolve(boolean incompleteCode) {
|
|
Project project = myElement.getProject();
|
|
final List<SimpleProperty> properties = SimpleUtil.findProperties(project, key);
|
|
List<ResolveResult> results = new ArrayList<ResolveResult>();
|
|
for (SimpleProperty property : properties) {
|
|
results.add(new PsiElementResolveResult(property));
|
|
}
|
|
return results.toArray(new ResolveResult[results.size()]);
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public PsiElement resolve() {
|
|
ResolveResult[] resolveResults = multiResolve(false);
|
|
return resolveResults.length == 1 ? resolveResults[0].getElement() : null;
|
|
}
|
|
|
|
@NotNull
|
|
@Override
|
|
public Object[] getVariants() {
|
|
Project project = myElement.getProject();
|
|
List<SimpleProperty> properties = SimpleUtil.findProperties(project);
|
|
List<LookupElement> variants = new ArrayList<LookupElement>();
|
|
for (final SimpleProperty property : properties) {
|
|
if (property.getKey() != null && property.getKey().length() > 0) {
|
|
variants.add(LookupElementBuilder.create(property).
|
|
withIcon(SimpleIcons.FILE).
|
|
withTypeText(property.getContainingFile().getName())
|
|
);
|
|
}
|
|
}
|
|
return variants.toArray();
|
|
}
|
|
} |