Minor code refactorings

This commit is contained in:
Valentin Kipyatkov
2014-08-12 19:25:00 +04:00
parent bb343c2853
commit 1b99ffb6b1
4 changed files with 25 additions and 33 deletions
@@ -169,18 +169,12 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
} }
} }
result.addJetSourceTopLevelFunctions(name, resolveSession, scope) result.addSourceTopLevelFunctions(name, resolveSession, scope)
return result return result
} }
private fun findTopLevelCallables(fqName: FqName, context: JetExpression, jetScope: JetScope, resolveSession: ResolveSessionForBodies): Collection<DeclarationDescriptor> { private fun MutableCollection<in FunctionDescriptor>.addSourceTopLevelFunctions(name: String, resolveSession: ResolveSessionForBodies, scope: GlobalSearchScope) {
val importDirective = JetPsiFactory(context.getProject()).createImportDirective(ImportPath(fqName, false))
val allDescriptors = QualifiedExpressionResolver().analyseImportReference(importDirective, jetScope, BindingTraceContext(), resolveSession.getModuleDescriptor())
return allDescriptors.filterIsInstance(javaClass<CallableDescriptor>()).filter { it.getReceiverParameter() == null }
}
private fun MutableCollection<in FunctionDescriptor>.addJetSourceTopLevelFunctions(name: String, resolveSession: ResolveSessionForBodies, scope: GlobalSearchScope) {
val identifier = Name.identifier(name) val identifier = Name.identifier(name)
val affectedPackages = JetTopLevelNonExtensionFunctionShortNameIndex.getInstance().get(name, project, scope) val affectedPackages = JetTopLevelNonExtensionFunctionShortNameIndex.getInstance().get(name, project, scope)
.map { it.getContainingFile() } .map { it.getContainingFile() }
@@ -195,10 +189,7 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
} }
} }
private fun getJetExtensionFunctionsByName(name: String, scope: GlobalSearchScope): Collection<PsiElement> public fun getTopLevelCallables(nameFilter: (String) -> Boolean, context: JetExpression /*TODO: to be dropped*/, resolveSession: ResolveSessionForBodies, scope: GlobalSearchScope): Collection<DeclarationDescriptor> {
= JetTopLevelExtensionFunctionShortNameIndex.getInstance().get(name, project, scope)
public fun getJetTopLevelCallables(nameFilter: (String) -> Boolean, context: JetExpression /*TODO: to be dropped*/, resolveSession: ResolveSessionForBodies, scope: GlobalSearchScope): Collection<DeclarationDescriptor> {
val result = ArrayList<DeclarationDescriptor>() val result = ArrayList<DeclarationDescriptor>()
val sourceNames = JetTopLevelFunctionsFqnNameIndex.getInstance().getAllKeys(project).stream() + JetTopLevelPropertiesFqnNameIndex.getInstance().getAllKeys(project).stream() val sourceNames = JetTopLevelFunctionsFqnNameIndex.getInstance().getAllKeys(project).stream() + JetTopLevelPropertiesFqnNameIndex.getInstance().getAllKeys(project).stream()
@@ -212,10 +203,10 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
return result return result
} }
public fun getJetCallableExtensions(nameFilter: (String) -> Boolean, public fun getCallableExtensions(nameFilter: (String) -> Boolean,
expression: JetSimpleNameExpression, expression: JetSimpleNameExpression,
resolveSession: ResolveSessionForBodies, resolveSession: ResolveSessionForBodies,
scope: GlobalSearchScope): Collection<DeclarationDescriptor> { scope: GlobalSearchScope): Collection<DeclarationDescriptor> {
val context = resolveSession.resolveToElement(expression) val context = resolveSession.resolveToElement(expression)
val receiverExpression = expression.getReceiverExpression() ?: return listOf() val receiverExpression = expression.getReceiverExpression() ?: return listOf()
val expressionType = context.get<JetExpression, JetType>(BindingContext.EXPRESSION_TYPE, receiverExpression) val expressionType = context.get<JetExpression, JetType>(BindingContext.EXPRESSION_TYPE, receiverExpression)
@@ -235,20 +226,15 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
.flatMap { ExpressionTypingUtils.canFindSuitableCall(it, receiverExpression, expressionType, jetScope, resolveSession.getModuleDescriptor()) } .flatMap { ExpressionTypingUtils.canFindSuitableCall(it, receiverExpression, expressionType, jetScope, resolveSession.getModuleDescriptor()) }
} }
public fun getJetClassesDescriptors(acceptedShortNameCondition: (String) -> Boolean, analyzer: KotlinCodeAnalyzer, scope: GlobalSearchScope): Collection<ClassDescriptor> { public fun getClassDescriptors(nameFilter: (String) -> Boolean, analyzer: KotlinCodeAnalyzer, scope: GlobalSearchScope): Collection<ClassDescriptor> {
val classDescriptors = ArrayList<ClassDescriptor>() return JetFullClassNameIndex.getInstance().getAllKeys(project).stream()
.map { FqName(it) }
for (fqName in JetFullClassNameIndex.getInstance().getAllKeys(project)) { .filter { nameFilter(it.shortName().asString()) }
val classFQName = FqName(fqName) .toList()
if (acceptedShortNameCondition(classFQName.shortName().asString())) { .flatMap { getClassDescriptorsByFQName(analyzer, it, scope) }
classDescriptors.addAll(getJetClassesDescriptorsByFQName(analyzer, classFQName, scope))
}
}
return classDescriptors
} }
private fun getJetClassesDescriptorsByFQName(analyzer: KotlinCodeAnalyzer, classFQName: FqName, scope: GlobalSearchScope): Collection<ClassDescriptor> { private fun getClassDescriptorsByFQName(analyzer: KotlinCodeAnalyzer, classFQName: FqName, scope: GlobalSearchScope): Collection<ClassDescriptor> {
val jetClassOrObjects = JetFullClassNameIndex.getInstance().get(classFQName.asString(), project, scope) val jetClassOrObjects = JetFullClassNameIndex.getInstance().get(classFQName.asString(), project, scope)
if (jetClassOrObjects.isEmpty()) { if (jetClassOrObjects.isEmpty()) {
@@ -260,6 +246,12 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
return ResolveSessionUtils.getClassDescriptorsByFqName(analyzer, classFQName) return ResolveSessionUtils.getClassDescriptorsByFqName(analyzer, classFQName)
} }
private fun findTopLevelCallables(fqName: FqName, context: JetExpression, jetScope: JetScope, resolveSession: ResolveSessionForBodies): Collection<DeclarationDescriptor> {
val importDirective = JetPsiFactory(context.getProject()).createImportDirective(ImportPath(fqName, false))
val allDescriptors = QualifiedExpressionResolver().analyseImportReference(importDirective, jetScope, BindingTraceContext(), resolveSession.getModuleDescriptor())
return allDescriptors.filterIsInstance(javaClass<CallableDescriptor>()).filter { it.getReceiverParameter() == null }
}
override fun getMethodsByName(NonNls name: String, scope: GlobalSearchScope): Array<PsiMethod> override fun getMethodsByName(NonNls name: String, scope: GlobalSearchScope): Array<PsiMethod>
= array() = array()
@@ -155,7 +155,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
} }
private fun addKotlinTopLevelDeclarations() { private fun addKotlinTopLevelDeclarations() {
collector.addDescriptorElements(shortNamesCache.getJetTopLevelCallables({ prefixMatcher.prefixMatches(it) }, jetReference!!.expression, resolveSession, searchScope)) collector.addDescriptorElements(shortNamesCache.getTopLevelCallables({ prefixMatcher.prefixMatches(it) }, jetReference!!.expression, resolveSession, searchScope))
for (name in shortNamesCache.getAllTopLevelObjectNames()) { for (name in shortNamesCache.getAllTopLevelObjectNames()) {
if (prefixMatcher.prefixMatches(name)) { if (prefixMatcher.prefixMatches(name)) {
@@ -165,7 +165,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
} }
private fun addKotlinExtensions() { private fun addKotlinExtensions() {
collector.addDescriptorElements(shortNamesCache.getJetCallableExtensions({ prefixMatcher.prefixMatches(it) }, jetReference!!.expression, resolveSession, searchScope)) collector.addDescriptorElements(shortNamesCache.getCallableExtensions({ prefixMatcher.prefixMatches(it) }, jetReference!!.expression, resolveSession, searchScope))
} }
private fun shouldRunOnlyTypeCompletion(): Boolean { private fun shouldRunOnlyTypeCompletion(): Boolean {
@@ -44,7 +44,7 @@ class TypesCompletion(val parameters: CompletionParameters, val resolveSession:
val namesCache = JetShortNamesCache.getKotlinInstance(project) val namesCache = JetShortNamesCache.getKotlinInstance(project)
val module = ModuleUtilCore.findModuleForPsiElement(parameters.getOriginalFile()) ?: return val module = ModuleUtilCore.findModuleForPsiElement(parameters.getOriginalFile()) ?: return
val searchScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module) val searchScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module)
result.addDescriptorElements(namesCache.getJetClassesDescriptors({ prefixMatcher.prefixMatches(it) }, resolveSession, searchScope)) result.addDescriptorElements(namesCache.getClassDescriptors({ prefixMatcher.prefixMatches(it) }, resolveSession, searchScope))
if (!ProjectStructureUtil.isJsKotlinModule(parameters.getOriginalFile() as JetFile)) { if (!ProjectStructureUtil.isJsKotlinModule(parameters.getOriginalFile() as JetFile)) {
addAdaptedJavaCompletion(result) addAdaptedJavaCompletion(result)
@@ -152,7 +152,7 @@ public class AutoImportFix extends JetHintAction<JetSimpleNameExpression> implem
@NotNull Project project @NotNull Project project
) { ) {
JetShortNamesCache namesCache = JetShortNamesCache.OBJECT$.getKotlinInstance(project); JetShortNamesCache namesCache = JetShortNamesCache.OBJECT$.getKotlinInstance(project);
Collection<DeclarationDescriptor> jetCallableExtensions = namesCache.getJetCallableExtensions( Collection<DeclarationDescriptor> jetCallableExtensions = namesCache.getCallableExtensions(
new Function1<String, Boolean>() { new Function1<String, Boolean>() {
@Override @Override
public Boolean invoke(String callableExtensionName) { public Boolean invoke(String callableExtensionName) {
@@ -224,7 +224,7 @@ public class AutoImportFix extends JetHintAction<JetSimpleNameExpression> implem
private static Collection<FqName> getJetClasses(@NotNull final String typeName, @NotNull GlobalSearchScope searchScope, @NotNull Project project, @NotNull KotlinCodeAnalyzer resolveSession) { private static Collection<FqName> getJetClasses(@NotNull final String typeName, @NotNull GlobalSearchScope searchScope, @NotNull Project project, @NotNull KotlinCodeAnalyzer resolveSession) {
JetShortNamesCache cache = JetShortNamesCache.OBJECT$.getKotlinInstance(project); JetShortNamesCache cache = JetShortNamesCache.OBJECT$.getKotlinInstance(project);
Collection<ClassDescriptor> descriptors = cache.getJetClassesDescriptors(new Function1<String, Boolean>() { Collection<ClassDescriptor> descriptors = cache.getClassDescriptors(new Function1<String, Boolean>() {
@Override @Override
public Boolean invoke(String s) { public Boolean invoke(String s) {
return typeName.equals(s); return typeName.equals(s);