IDEA-214819 Support "Goto EP declaration in plugin.xml" for EPN<KeyedLazyInstance<T>>

GitOrigin-RevId: fe0f63be7f4ab30b55f0159c5ecf9965222982c4
This commit is contained in:
Yann Cébron
2020-04-24 18:45:44 +00:00
committed by intellij-monorepo-bot
parent ed4688ed0f
commit f0b7dba01a
3 changed files with 31 additions and 4 deletions
@@ -7,6 +7,7 @@ import com.intellij.openapi.extensions.ProjectExtensionPointName;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.KeyedLazyInstance;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -51,10 +52,23 @@ public class ExtensionPointDeclarationRelatedItemLineMarkerProvider extends Devk
@Nullable
private static PsiClass resolveExtensionPointClass(PsiField psiField,
ExtensionPointType epType) {
final PsiType typeParameter = PsiUtil.substituteTypeParameter(psiField.getType(),
epType.qualifiedClassName,
0, false);
return PsiUtil.resolveClassInClassTypeOnly(typeParameter);
final PsiType epNameType = PsiUtil.substituteTypeParameter(psiField.getType(),
epType.qualifiedClassName,
0, false);
if (!(epNameType instanceof PsiClassType)) {
return null;
}
PsiClassType classType = (PsiClassType)epNameType;
final PsiClass typePsiClass = PsiTypesUtil.getPsiClass(classType);
if (classType.getParameterCount() != 1) {
return typePsiClass;
}
// ExtensionPointName<KeyedLazyInstance<T>>
if (typePsiClass == null || !KeyedLazyInstance.class.getName().equals(typePsiClass.getQualifiedName())) return null;
PsiType keyedLazyInstanceType = PsiUtil.substituteTypeParameter(epNameType, typePsiClass, 0, false);
return PsiTypesUtil.getPsiClass(keyedLazyInstanceType);
}
private static String resolveEpName(PsiField psiField) {
@@ -0,0 +1,9 @@
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.util.KeyedLazyInstance;
public class MyStringEP {
public static final ExtensionPointName<KeyedLazyInstance<String>> EP_<caret>NAME =
ExtensionPointName.create("com.intellij.myStringEP");
}
@@ -62,6 +62,10 @@ public class ExtensionPointDeclarationRelatedItemLineMarkerProviderTest extends
assertSingleEPDeclaration("MyStringProjectEP.java");
}
public void testMyStringKeyedLazyInstanceEP() {
assertSingleEPDeclaration("MyStringKeyedLazyInstanceEP.java");
}
private void assertSingleEPDeclaration(String filePath) {
PsiFile file = myFixture.configureByFile("plugin.xml");
String path = file.getVirtualFile().getPath();