From 8fe751291e3261f82abcf7a02413a4829b98ef6c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 7 Jun 2013 15:37:18 +0400 Subject: [PATCH] SPI: initial completion variants --- .../intellij/spi/psi/SPIProviderElement.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/java/java-impl/src/com/intellij/spi/psi/SPIProviderElement.java b/java/java-impl/src/com/intellij/spi/psi/SPIProviderElement.java index 17c47b0ffbcc..6ad7e590015c 100644 --- a/java/java-impl/src/com/intellij/spi/psi/SPIProviderElement.java +++ b/java/java-impl/src/com/intellij/spi/psi/SPIProviderElement.java @@ -15,19 +15,26 @@ */ package com.intellij.spi.psi; +import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.infos.ClassCandidateInfo; import com.intellij.psi.scope.PsiScopeProcessor; +import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.psi.util.ClassUtil; import com.intellij.spi.SPIFileType; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + /** * User: anna */ @@ -112,6 +119,22 @@ public class SPIProviderElement extends ASTWrapperPsiElement implements PsiJavaR @NotNull @Override public Object[] getVariants() { + final String name = getContainingFile().getName(); + final PsiClass superProvider = JavaPsiFacade.getInstance(getProject()).findClass(name, getResolveScope()); + if (superProvider != null) { + final List result = new ArrayList(); + ClassInheritorsSearch.search(superProvider).forEach(new Processor() { + @Override + public boolean process(PsiClass psiClass) { + final String jvmClassName = ClassUtil.getJVMClassName(psiClass); + if (jvmClassName != null) { + result.add(LookupElementBuilder.create(psiClass, jvmClassName)); + } + return false; + } + }); + return result.toArray(new Object[result.size()]); + } return ArrayUtil.EMPTY_OBJECT_ARRAY; }