diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetGotoClassContributor.java b/idea/src/org/jetbrains/jet/plugin/caches/JetGotoClassContributor.java index ac98c103b4a..0efcf63a3b2 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetGotoClassContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetGotoClassContributor.java @@ -21,9 +21,13 @@ import com.intellij.navigation.NavigationItem; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.JetClass; +import org.jetbrains.jet.lang.psi.JetClassOrObject; +import org.jetbrains.jet.lang.psi.JetNamedDeclaration; +import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.plugin.stubindex.JetShortClassNameIndex; @@ -54,17 +58,21 @@ public class JetGotoClassContributor implements GotoClassContributor { @NotNull @Override public String[] getNames(Project project, boolean includeNonProjectItems) { - return JetShortNamesCache.getKotlinInstance(project).getAllClassNames(); + return ArrayUtil.toObjectArray(JetShortClassNameIndex.getInstance().getAllKeys(project), String.class); } @NotNull @Override public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { - GlobalSearchScope scope = GlobalSearchScope.allScope(project); - PsiClass[] classes = JetShortNamesCache.getKotlinInstance(project).getClassesByName(name, scope); + GlobalSearchScope scope = includeNonProjectItems ? GlobalSearchScope.allScope(project) : GlobalSearchScope.projectScope(project); + Collection classesOrObjects = JetShortClassNameIndex.getInstance().get(name, project, scope); + if (classesOrObjects.isEmpty()) { + return NavigationItem.EMPTY_NAVIGATION_ITEM_ARRAY; + } + + PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(name, scope); Collection javaQualifiedNames = new HashSet(); - for (PsiClass aClass : classes) { String qualifiedName = aClass.getQualifiedName(); if (qualifiedName != null) { @@ -73,23 +81,16 @@ public class JetGotoClassContributor implements GotoClassContributor { } List items = new ArrayList(); - Collection classesOrObjects = JetShortClassNameIndex.getInstance().get(name, project, scope); - for (JetClassOrObject classOrObject : classesOrObjects) { FqName fqName = JetPsiUtil.getFQName(classOrObject); if (fqName == null || javaQualifiedNames.contains(fqName.toString())) { + // Elements will be added by Java class contributor continue; } - if (classOrObject instanceof JetObjectDeclaration) { - // items.add((JetObjectDeclaration) classOrObject); - } - else if (classOrObject instanceof JetClass) { + if (classOrObject instanceof JetClass) { items.add(classOrObject); } - else { - assert false; - } } return ArrayUtil.toObjectArray(items, NavigationItem.class); diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java index 38abadfafcf..2d6005d82b8 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java @@ -86,7 +86,7 @@ public class JetShortNamesCache extends PsiShortNamesCache { // .namespace classes can not be indexed, since they have no explicit declarations IDELightClassGenerationSupport lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project); - Set packageClassShortNames = lightClassGenerationSupport.getAllPackageClasses(GlobalSearchScope.allScope(project)).keySet(); + Set packageClassShortNames = lightClassGenerationSupport.getAllPossiblePackageClasses(GlobalSearchScope.allScope(project)).keySet(); classNames.addAll(packageClassShortNames); return ArrayUtil.toStringArray(classNames); @@ -101,7 +101,7 @@ public class JetShortNamesCache extends PsiShortNamesCache { List result = new ArrayList(); IDELightClassGenerationSupport lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project); - MultiMap packageClasses = lightClassGenerationSupport.getAllPackageClasses(scope); + MultiMap packageClasses = lightClassGenerationSupport.getAllPossiblePackageClasses(scope); // .namespace classes can not be indexed, since they have no explicit declarations Collection fqNames = packageClasses.get(name); diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java b/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java index 75365972681..5d6342d5ec3 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java @@ -37,7 +37,9 @@ import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.plugin.libraries.JetSourceNavigationHelper; -import org.jetbrains.jet.plugin.stubindex.*; +import org.jetbrains.jet.plugin.stubindex.JetAllPackagesIndex; +import org.jetbrains.jet.plugin.stubindex.JetClassByPackageIndex; +import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex; import org.jetbrains.jet.util.QualifiedNamesUtil; import java.util.Collection; @@ -131,18 +133,15 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport } @NotNull - public MultiMap getAllPackageClasses(@NotNull GlobalSearchScope scope) { + public MultiMap getAllPossiblePackageClasses(@NotNull GlobalSearchScope scope) { Collection packageFqNames = JetAllPackagesIndex.getInstance().getAllKeys(project); MultiMap result = new MultiMap(); for (String packageFqName : packageFqNames) { - Collection files = findFilesForPackage(new FqName(packageFqName), scope); - if (!files.isEmpty()) { - FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(new FqName(packageFqName)); - result.putValue(packageClassFqName.shortName().asString(), packageClassFqName); - } - + FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(new FqName(packageFqName)); + result.putValue(packageClassFqName.shortName().asString(), packageClassFqName); } + return result; } }