From 88bf7f883efef7c03cd82b7a36a8e0b25ce98ce9 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sat, 14 May 2016 01:21:46 +0300 Subject: [PATCH] No need to specially handle extensions from current file anymore (since searchScope for KotlinIndicesHelper includes current file) --- .../idea/completion/BasicCompletionSession.kt | 2 +- .../kotlin/idea/completion/CompletionSession.kt | 17 ++++++----------- .../completion/smart/SmartCompletionSession.kt | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index 0c8e55eb932..e2dc3404171 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -149,7 +149,7 @@ class BasicCompletionSession( } if (callTypeAndReceiver.shouldCompleteCallableExtensions()) { - filter = filter.exclude(topLevelExtensionsExclude) // completed via indices + filter = filter.exclude(TopLevelExtensionsExclude) // completed via indices } filter diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 29ce4c4e9ad..c1ab3f2e2e2 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -27,7 +27,10 @@ import com.intellij.patterns.StandardPatterns import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.ProcessingContext import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.idea.caches.resolve.* +import org.jetbrains.kotlin.idea.caches.resolve.ModuleOrigin +import org.jetbrains.kotlin.idea.caches.resolve.OriginCapability +import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.getResolveScope import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.imports.importableFqName @@ -36,7 +39,6 @@ import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -160,18 +162,11 @@ abstract class CompletionSession( declarationTranslator = { toFromOriginalFileMapper.toSyntheticFile(it) }) } - // excludes top-level extensions except for ones declared in the current file - those that are fetched from indices - protected val topLevelExtensionsExclude = object : DescriptorKindExclude() { - val extensionsFromThisFile = file.declarations - .filter { it.isExtensionDeclaration() } - .map { it.resolveToDescriptor() } - .toSet() - + protected object TopLevelExtensionsExclude : DescriptorKindExclude() { override fun excludes(descriptor: DeclarationDescriptor): Boolean { if (descriptor !is CallableMemberDescriptor) return false if (descriptor.extensionReceiverParameter == null) return false - if (descriptor in extensionsFromThisFile) return false - if (descriptor.kind != CallableMemberDescriptor.Kind.DECLARATION) return false /* do not filter out synthetic extensions from packages */ + if (descriptor.kind != CallableMemberDescriptor.Kind.DECLARATION) return false /* do not filter out synthetic extensions */ val containingPackage = descriptor.containingDeclaration as? PackageFragmentDescriptor ?: return false if (containingPackage.fqName.asString().startsWith("kotlinx.android.synthetic.")) return false // TODO: temporary solution for Android synthetic extensions return true diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt index b871c0ef245..04640bc1257 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt @@ -47,7 +47,7 @@ class SmartCompletionSession( // we do not include SAM-constructors because they are handled separately and adding them requires iterating of java classes var filter = DescriptorKindFilter.VALUES exclude SamConstructorDescriptorKindExclude - filter = filter exclude topLevelExtensionsExclude // handled via indices + filter = filter exclude TopLevelExtensionsExclude // handled via indices if (smartCompletion?.expectedInfos?.filterFunctionExpected()?.isNotEmpty() ?: false) { // if function type is expected we need classes to obtain their constructors