diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetExactPackagesIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetExactPackagesIndex.java new file mode 100644 index 00000000000..e56cff18b2e --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetExactPackagesIndex.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.stubindex; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.stubs.StringStubIndexExtension; +import com.intellij.psi.stubs.StubIndexKey; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetFile; + +import java.util.Collection; + +public class JetExactPackagesIndex extends StringStubIndexExtension { + private static final StubIndexKey KEY = KotlinIndexUtil.createIndexKey(JetExactPackagesIndex.class); + + private static final JetExactPackagesIndex ourInstance = new JetExactPackagesIndex(); + + @NotNull + public static JetExactPackagesIndex getInstance() { + return ourInstance; + } + + private JetExactPackagesIndex() {} + + @NotNull + @Override + public StubIndexKey getKey() { + return KEY; + } + + @NotNull + @Override + public Collection get(@NotNull String fqName, @NotNull Project project, @NotNull GlobalSearchScope scope) { + return super.get(fqName, project, JetSourceFilterScope.kotlinSourcesAndLibraries(scope, project)); + } +} diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java index e9c2c1b7b18..38fb2d2c8cd 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java @@ -18,12 +18,10 @@ package org.jetbrains.jet.plugin.stubindex; import com.google.common.collect.Sets; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Ref; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.stubs.StubIndex; import com.intellij.util.Processor; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -60,17 +58,11 @@ public final class PackageIndexUtil { @NotNull public static Collection findFilesWithExactPackage( - @NotNull final FqName packageFqName, + @NotNull FqName packageFqName, @NotNull GlobalSearchScope searchScope, @NotNull Project project ) { - Collection files = JetAllPackagesIndex.getInstance().get(packageFqName.asString(), project, searchScope); - return ContainerUtil.filter(files, new Condition() { - @Override - public boolean value(JetFile file) { - return packageFqName.equals(file.getPackageFqName()); - } - }); + return JetExactPackagesIndex.getInstance().get(packageFqName.asString(), project, searchScope); } public static boolean packageExists( diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java index b8dbed61f19..d1a777b4a90 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java @@ -31,6 +31,8 @@ public class StubIndexServiceImpl implements StubIndexService { public void indexFile(PsiJetFileStub stub, IndexSink sink) { FqName packageFqName = stub.getPackageFqName(); + sink.occurrence(JetExactPackagesIndex.getInstance().getKey(), packageFqName.asString()); + while (true) { sink.occurrence(JetAllPackagesIndex.getInstance().getKey(), packageFqName.asString()); if (packageFqName.isRoot()) { diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 705eeda096c..e3f3d3c98bf 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -359,6 +359,7 @@ +