mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-214819 Support "Goto EP declaration in plugin.xml" for EPN<KeyedLazyInstance<T>>
GitOrigin-RevId: fe0f63be7f4ab30b55f0159c5ecf9965222982c4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
ed4688ed0f
commit
f0b7dba01a
+18
-4
@@ -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) {
|
||||
|
||||
+9
@@ -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");
|
||||
|
||||
}
|
||||
+4
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user