More simple and effective top-level declarations by name search
This commit is contained in:
@@ -36,7 +36,6 @@ import org.jetbrains.jet.lang.resolve.calls.smartcasts.DataFlowInfo
|
|||||||
import com.intellij.psi.stubs.StringStubIndexExtension
|
import com.intellij.psi.stubs.StringStubIndexExtension
|
||||||
import org.jetbrains.jet.plugin.caches.resolve.ResolutionFacade
|
import org.jetbrains.jet.plugin.caches.resolve.ResolutionFacade
|
||||||
import org.jetbrains.jet.plugin.util.extensionsUtils.isExtensionCallable
|
import org.jetbrains.jet.plugin.util.extensionsUtils.isExtensionCallable
|
||||||
import org.jetbrains.jet.plugin.caches.resolve.getResolutionFacade
|
|
||||||
|
|
||||||
public class KotlinIndicesHelper(
|
public class KotlinIndicesHelper(
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
@@ -59,44 +58,15 @@ public class KotlinIndicesHelper(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result.addSourceTopLevelFunctions(name)
|
JetTopLevelNonExtensionFunctionShortNameIndex.getInstance().get(name, project, scope)
|
||||||
result.addSourceTopLevelProperties(name)
|
.mapTo(result) { resolutionFacade.resolveToDescriptor(it) as CallableDescriptor }
|
||||||
|
|
||||||
|
JetTopLevelNonExtensionPropertyShortNameIndex.getInstance().get(name, project, scope)
|
||||||
|
.mapTo(result) { resolutionFacade.resolveToDescriptor(it) as CallableDescriptor }
|
||||||
|
|
||||||
return result.filter(visibilityFilter)
|
return result.filter(visibilityFilter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MutableCollection<in FunctionDescriptor>.addSourceTopLevelFunctions(name: String) {
|
|
||||||
val identifier = Name.identifier(name)
|
|
||||||
val affectedPackages = JetTopLevelNonExtensionFunctionShortNameIndex.getInstance().get(name, project, scope)
|
|
||||||
.stream()
|
|
||||||
.map { it.getContainingFile() }
|
|
||||||
.filterIsInstance(javaClass<JetFile>())
|
|
||||||
.map { it.getPackageFqName() }
|
|
||||||
.toSet()
|
|
||||||
|
|
||||||
for (affectedPackage in affectedPackages) {
|
|
||||||
val packageDescriptor = moduleDescriptor.getPackage(affectedPackage)
|
|
||||||
?: error("There's a function in stub index with invalid package: $affectedPackage")
|
|
||||||
addAll(packageDescriptor.getMemberScope().getFunctions(identifier))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun MutableCollection<in PropertyDescriptor>.addSourceTopLevelProperties(name: String) {
|
|
||||||
val identifier = Name.identifier(name)
|
|
||||||
val affectedPackages = JetTopLevelNonExtensionPropertyShortNameIndex.getInstance().get(name, project, scope)
|
|
||||||
.stream()
|
|
||||||
.map { it.getContainingFile() }
|
|
||||||
.filterIsInstance(javaClass<JetFile>())
|
|
||||||
.map { it.getPackageFqName() }
|
|
||||||
.toSet()
|
|
||||||
|
|
||||||
for (affectedPackage in affectedPackages) {
|
|
||||||
val packageDescriptor = moduleDescriptor.getPackage(affectedPackage)
|
|
||||||
?: error("There's a property in stub index with invalid package: $affectedPackage")
|
|
||||||
addAll(packageDescriptor.getMemberScope().getProperties(identifier))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public fun getTopLevelCallables(nameFilter: (String) -> Boolean, context: JetExpression /*TODO: to be dropped*/): Collection<CallableDescriptor> {
|
public fun getTopLevelCallables(nameFilter: (String) -> Boolean, context: JetExpression /*TODO: to be dropped*/): Collection<CallableDescriptor> {
|
||||||
val sourceNames = JetTopLevelFunctionFqnNameIndex.getInstance().getAllKeys(project).stream() + JetTopLevelPropertyFqnNameIndex.getInstance().getAllKeys(project).stream()
|
val sourceNames = JetTopLevelFunctionFqnNameIndex.getInstance().getAllKeys(project).stream() + JetTopLevelPropertyFqnNameIndex.getInstance().getAllKeys(project).stream()
|
||||||
val allFqNames = sourceNames.map { FqName(it) } + JetFromJavaDescriptorHelper.getTopLevelCallableFqNames(project, scope, false).stream()
|
val allFqNames = sourceNames.map { FqName(it) } + JetFromJavaDescriptorHelper.getTopLevelCallableFqNames(project, scope, false).stream()
|
||||||
|
|||||||
Reference in New Issue
Block a user