Fixed package directive completion
This commit is contained in:
+9
-7
@@ -24,8 +24,10 @@ 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.codeInsight.ReferenceVariantsHelper
|
||||||
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
||||||
|
import org.jetbrains.kotlin.idea.references.mainReference
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.jetbrains.kotlin.psi.JetPackageDirective
|
import org.jetbrains.kotlin.psi.JetPackageDirective
|
||||||
|
import org.jetbrains.kotlin.psi.JetSimpleNameExpression
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
@@ -41,19 +43,19 @@ object PackageDirectiveCompletion {
|
|||||||
|
|
||||||
val file = position.getContainingFile() as JetFile
|
val file = position.getContainingFile() as JetFile
|
||||||
|
|
||||||
val ref = file.findReferenceAt(parameters.getOffset()) as? JetSimpleNameReference ?: return false
|
val expression = file.findElementAt(parameters.getOffset())?.getParent() as? JetSimpleNameExpression ?: return false
|
||||||
val name = ref.expression.getText()!!
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val prefixLength = parameters.getOffset() - ref.expression.getTextOffset()
|
val prefixLength = parameters.getOffset() - expression.getTextOffset()
|
||||||
val prefixMatcher = PlainPrefixMatcher(name.substring(0, prefixLength))
|
val prefix = expression.getText()!!
|
||||||
|
val prefixMatcher = PlainPrefixMatcher(prefix.substring(0, prefixLength))
|
||||||
val result = result.withPrefixMatcher(prefixMatcher)
|
val result = result.withPrefixMatcher(prefixMatcher)
|
||||||
|
|
||||||
val resolutionFacade = ref.expression.getResolutionFacade()
|
val resolutionFacade = expression.getResolutionFacade()
|
||||||
val bindingContext = resolutionFacade.analyze(ref.expression)
|
val bindingContext = resolutionFacade.analyze(expression)
|
||||||
val moduleDescriptor = resolutionFacade.findModuleDescriptor(file)
|
val moduleDescriptor = resolutionFacade.findModuleDescriptor(file)
|
||||||
|
|
||||||
val variants = ReferenceVariantsHelper(bindingContext, moduleDescriptor, file.getProject(), { true }).getPackageReferenceVariants(ref.expression, prefixMatcher.asNameFilter())
|
val variants = ReferenceVariantsHelper(bindingContext, moduleDescriptor, file.getProject(), { true }).getPackageReferenceVariants(expression, prefixMatcher.asNameFilter())
|
||||||
for (variant in variants) {
|
for (variant in variants) {
|
||||||
val lookupElement = LookupElementFactory(resolutionFacade, listOf()).createLookupElement(variant, false)
|
val lookupElement = LookupElementFactory(resolutionFacade, listOf()).createLookupElement(variant, false)
|
||||||
if (!lookupElement.getLookupString().contains(DUMMY_IDENTIFIER)) {
|
if (!lookupElement.getLookupString().contains(DUMMY_IDENTIFIER)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user