Retrieve JavaElementFinder from Project's extensions

This commit is contained in:
Andrey Breslav
2012-12-18 12:34:21 +04:00
parent 7c4d1e6b09
commit 2c3a955074
4 changed files with 22 additions and 6 deletions
@@ -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,
@@ -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<GlobalSearchScope, Collection<JetFile>> jetFiles = new WeakHashMap<GlobalSearchScope, Collection<JetFile>>();
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);
@@ -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() {
@@ -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);
}