Removed hack for package directive completion
This commit is contained in:
@@ -327,12 +327,4 @@ public class ReferenceVariantsHelper(
|
|||||||
}
|
}
|
||||||
return type
|
return type
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun getPackageReferenceVariants(
|
|
||||||
expression: KtSimpleNameExpression,
|
|
||||||
nameFilter: (Name) -> Boolean
|
|
||||||
): Collection<DeclarationDescriptor> {
|
|
||||||
val resolutionScope = expression.getResolutionScope(context, resolutionFacade)
|
|
||||||
return resolutionScope.collectDescriptorsFiltered(DescriptorKindFilter.PACKAGES, nameFilter).filter(visibilityFilter)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.*
|
import org.jetbrains.kotlin.resolve.lazy.*
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.check
|
import org.jetbrains.kotlin.utils.addToStdlib.check
|
||||||
|
|
||||||
public class ResolveElementCache(
|
public class ResolveElementCache(
|
||||||
@@ -309,12 +308,6 @@ public class ResolveElementCache(
|
|||||||
if (ktElement is KtSimpleNameExpression) {
|
if (ktElement is KtSimpleNameExpression) {
|
||||||
val header = ktElement.getParentOfType<KtPackageDirective>(true)!!
|
val header = ktElement.getParentOfType<KtPackageDirective>(true)!!
|
||||||
|
|
||||||
//TODO: temporary code until we don't have top-level scope in file
|
|
||||||
if (trace.getBindingContext()[BindingContext.LEXICAL_SCOPE, ktElement] == null) {
|
|
||||||
val scope = resolveSession.getModuleDescriptor().getPackage(header.getFqName(ktElement).parent()).memberScope.memberScopeAsImportingScope()
|
|
||||||
trace.record(BindingContext.LEXICAL_SCOPE, ktElement, scope)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Name.isValidIdentifier(ktElement.getReferencedName())) {
|
if (Name.isValidIdentifier(ktElement.getReferencedName())) {
|
||||||
if (trace.getBindingContext()[BindingContext.REFERENCE_TARGET, ktElement] == null) {
|
if (trace.getBindingContext()[BindingContext.REFERENCE_TARGET, ktElement] == null) {
|
||||||
val fqName = header.getFqName(ktElement)
|
val fqName = header.getFqName(ktElement)
|
||||||
|
|||||||
+4
-3
@@ -22,11 +22,11 @@ import com.intellij.codeInsight.completion.PlainPrefixMatcher
|
|||||||
import com.intellij.openapi.progress.ProcessCanceledException
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
import com.intellij.patterns.PlatformPatterns
|
import com.intellij.patterns.PlatformPatterns
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
|
||||||
import org.jetbrains.kotlin.idea.util.CallType
|
import org.jetbrains.kotlin.idea.util.CallType
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtPackageDirective
|
import org.jetbrains.kotlin.psi.KtPackageDirective
|
||||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs completion in package directive. Should suggest only packages and avoid showing fake package produced by
|
* Performs completion in package directive. Should suggest only packages and avoid showing fake package produced by
|
||||||
@@ -51,9 +51,10 @@ object PackageDirectiveCompletion {
|
|||||||
val result = result.withPrefixMatcher(prefixMatcher)
|
val result = result.withPrefixMatcher(prefixMatcher)
|
||||||
|
|
||||||
val resolutionFacade = expression.getResolutionFacade()
|
val resolutionFacade = expression.getResolutionFacade()
|
||||||
val bindingContext = resolutionFacade.analyze(expression)
|
|
||||||
|
|
||||||
val variants = ReferenceVariantsHelper(bindingContext, resolutionFacade, { true }).getPackageReferenceVariants(expression, prefixMatcher.asNameFilter())
|
val packageMemberScope = resolutionFacade.moduleDescriptor.getPackage(file.packageFqName.parent()).memberScope
|
||||||
|
|
||||||
|
val variants = packageMemberScope.getDescriptors(DescriptorKindFilter.PACKAGES, prefixMatcher.asNameFilter())
|
||||||
val lookupElementFactory = BasicLookupElementFactory(resolutionFacade.project, InsertHandlerProvider(callType = CallType.PACKAGE_DIRECTIVE, expectedInfosCalculator = { emptyList() }))
|
val lookupElementFactory = BasicLookupElementFactory(resolutionFacade.project, InsertHandlerProvider(callType = CallType.PACKAGE_DIRECTIVE, expectedInfosCalculator = { emptyList() }))
|
||||||
for (variant in variants) {
|
for (variant in variants) {
|
||||||
val lookupElement = lookupElementFactory.createLookupElement(variant)
|
val lookupElement = lookupElementFactory.createLookupElement(variant)
|
||||||
|
|||||||
Reference in New Issue
Block a user