mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-27 16:57:49 +08:00
reference_contributor.md: Use PsiPolyVariantReferenceBase
This commit is contained in:
parent
14fef32a69
commit
980a24e955
@ -6,27 +6,30 @@ import com.intellij.codeInsight.lookup.LookupElement;
|
|||||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.util.TextRange;
|
import com.intellij.openapi.util.TextRange;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiElementResolveResult;
|
||||||
|
import com.intellij.psi.PsiPolyVariantReferenceBase;
|
||||||
|
import com.intellij.psi.ResolveResult;
|
||||||
import org.intellij.sdk.language.psi.SimpleProperty;
|
import org.intellij.sdk.language.psi.SimpleProperty;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
final class SimpleReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference {
|
final class SimpleReference extends PsiPolyVariantReferenceBase<PsiElement> {
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
||||||
SimpleReference(@NotNull PsiElement element, TextRange textRange) {
|
SimpleReference(@NotNull PsiElement element, TextRange textRange) {
|
||||||
super(element, textRange);
|
super(element, textRange);
|
||||||
key = element.getText().substring(textRange.getStartOffset(), textRange.getEndOffset());
|
key = element.getText()
|
||||||
|
.substring(textRange.getStartOffset(), textRange.getEndOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) {
|
public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) {
|
||||||
Project project = myElement.getProject();
|
Project project = myElement.getProject();
|
||||||
final List<SimpleProperty> properties = SimpleUtil.findProperties(project, key);
|
List<SimpleProperty> properties = SimpleUtil.findProperties(project, key);
|
||||||
List<ResolveResult> results = new ArrayList<>();
|
List<ResolveResult> results = new ArrayList<>();
|
||||||
for (SimpleProperty property : properties) {
|
for (SimpleProperty property : properties) {
|
||||||
results.add(new PsiElementResolveResult(property));
|
results.add(new PsiElementResolveResult(property));
|
||||||
@ -34,19 +37,12 @@ final class SimpleReference extends PsiReferenceBase<PsiElement> implements PsiP
|
|||||||
return results.toArray(new ResolveResult[0]);
|
return results.toArray(new ResolveResult[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public PsiElement resolve() {
|
|
||||||
ResolveResult[] resolveResults = multiResolve(false);
|
|
||||||
return resolveResults.length == 1 ? resolveResults[0].getElement() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object @NotNull [] getVariants() {
|
public Object @NotNull [] getVariants() {
|
||||||
Project project = myElement.getProject();
|
Project project = myElement.getProject();
|
||||||
List<SimpleProperty> properties = SimpleUtil.findProperties(project);
|
List<SimpleProperty> properties = SimpleUtil.findProperties(project);
|
||||||
List<LookupElement> variants = new ArrayList<>();
|
List<LookupElement> variants = new ArrayList<>();
|
||||||
for (final SimpleProperty property : properties) {
|
for (SimpleProperty property : properties) {
|
||||||
if (property.getKey() != null && !property.getKey().isEmpty()) {
|
if (property.getKey() != null && !property.getKey().isEmpty()) {
|
||||||
variants.add(LookupElementBuilder
|
variants.add(LookupElementBuilder
|
||||||
.create(property).withIcon(SimpleIcons.FILE)
|
.create(property).withIcon(SimpleIcons.FILE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user