From 2c3a955074a5847f8a9ebf6c4b5a329560d12d5b Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 18 Dec 2012 12:34:21 +0400 Subject: [PATCH] Retrieve JavaElementFinder from Project's extensions --- .../cli/jvm/compiler/JetCoreEnvironment.java | 2 +- .../jet/asJava/JavaElementFinder.java | 19 ++++++++++++++++++- .../jet/asJava/JavaElementFinderTest.java | 3 ++- .../jet/plugin/caches/JetShortNamesCache.java | 4 +--- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java index 2975abb4c35..880a288f188 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java @@ -94,7 +94,7 @@ public class JetCoreEnvironment { Extensions.getArea(project) .getExtensionPoint(PsiElementFinder.EP_NAME) - .registerExtension(new JavaElementFinder(project)); + .registerExtension(new JavaElementFinder(project, cliLightClassGenerationSupport)); // This extension point should be registered in JavaCoreApplicationEnvironment CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ClsCustomNavigationPolicy.EP_NAME, diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java index b63f38f5b8b..ed02b8db0a1 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.asJava; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.*; import com.intellij.psi.PsiClass; @@ -40,12 +41,28 @@ import java.util.*; import static org.jetbrains.jet.codegen.CodegenUtil.getLocalNameForObject; public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacadeKotlinHacks.KotlinFinderMarker { + + @NotNull + public static JavaElementFinder getInstance(@NotNull Project project) { + PsiElementFinder[] extensions = Extensions.getArea(project).getExtensionPoint(PsiElementFinder.EP_NAME).getExtensions(); + for (PsiElementFinder extension : extensions) { + if (extension instanceof JavaElementFinder) { + return (JavaElementFinder) extension; + } + } + throw new IllegalStateException(JavaElementFinder.class.getSimpleName() + " is not found for project " + project); + } + private final Project project; private final PsiManager psiManager; private final WeakHashMap> jetFiles = new WeakHashMap>(); - public JavaElementFinder(Project project) { + public JavaElementFinder( + @NotNull Project project, + @SuppressWarnings("UnusedParameters") // This parameter simply ensures that there is some LightClassGenerationSupport for the project + @NotNull LightClassGenerationSupport lightClassGenerationSupport + ) { this.project = project; psiManager = PsiManager.getInstance(project); diff --git a/compiler/tests/org/jetbrains/jet/asJava/JavaElementFinderTest.java b/compiler/tests/org/jetbrains/jet/asJava/JavaElementFinderTest.java index deb50c3ff82..d9f8690fe7d 100644 --- a/compiler/tests/org/jetbrains/jet/asJava/JavaElementFinderTest.java +++ b/compiler/tests/org/jetbrains/jet/asJava/JavaElementFinderTest.java @@ -42,7 +42,8 @@ public class JavaElementFinderTest extends JetLiteFixture { @Override public void setUp() throws Exception { super.setUp(); - finder = new JavaElementFinder(getProject()); + + finder = new JavaElementFinder(getProject(), null); } public void testFromEnumEntry() { diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java index e5c4a930053..670ae8a481a 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java @@ -57,11 +57,9 @@ public class JetShortNamesCache extends PsiShortNamesCache { private static final PsiMethod[] NO_METHODS = new PsiMethod[0]; private static final PsiField[] NO_FIELDS = new PsiField[0]; private final Project project; - private final JavaElementFinder javaElementFinder; public JetShortNamesCache(Project project) { this.project = project; - this.javaElementFinder = new JavaElementFinder(project); } /** @@ -91,7 +89,7 @@ public class JetShortNamesCache extends PsiShortNamesCache { if (classOrObject instanceof JetNamedDeclaration) { FqName fqName = JetPsiUtil.getFQName((JetNamedDeclaration) classOrObject); if (fqName != null && fqName.shortName().getName().equals(name)) { - PsiClass psiClass = javaElementFinder.findClass(fqName.getFqName(), scope); + PsiClass psiClass = JavaElementFinder.getInstance(project).findClass(fqName.getFqName(), scope); if (psiClass != null) { result.add(psiClass); }