From aa3041a69f44902ae4a508c3f868104383b66f84 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 15 Oct 2020 00:09:41 +0300 Subject: [PATCH] PY-44026 Make PyQualifiedNameCompletionMatcher accept a qualifed name directly GitOrigin-RevId: 3a3a6915b277e327ece11af25bbd10fb47804cf8 --- .../PyUnresolvedModuleAttributeCompletionContributor.kt | 8 ++++---- .../psi/stubs/PyQualifiedNameCompletionMatcher.java | 8 +++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyUnresolvedModuleAttributeCompletionContributor.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyUnresolvedModuleAttributeCompletionContributor.kt index 87ef6b99ad9a..58d080227fa7 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyUnresolvedModuleAttributeCompletionContributor.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyUnresolvedModuleAttributeCompletionContributor.kt @@ -100,11 +100,11 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor() val project = parameters.position.project val attribute = result.prefixMatcher.prefix val qualifier = context.get(REFERENCE_QUALIFIER) - val qualifierString = qualifier.toString() val suggestedQualifiedNames = HashSet() ProgressManager.checkCanceled() - val resultMatchingCompleteReference = result.withPrefixMatcher(QualifiedNameMatcher(qualifier.append(attribute))) + val qualifiedName = qualifier.append(attribute) + val resultMatchingCompleteReference = result.withPrefixMatcher(QualifiedNameMatcher(qualifiedName)) PyModuleNameIndex.find(qualifier.lastComponent!!, project, true).asSequence() .filter { QualifiedNameFinder.findShortestImportableQName(it) == qualifier } .flatMap { it.iterateNames().asSequence() } @@ -112,7 +112,7 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor() .filterNot { it.name == null || it.name!!.startsWith('_') } .filter { attribute.isEmpty() || result.prefixMatcher.prefixMatches(it.name!!) } .mapNotNull { - val qualifiedNameToSuggest = "$qualifierString.${it.name}" + val qualifiedNameToSuggest = "$qualifier.${it.name}" if (suggestedQualifiedNames.add(qualifiedNameToSuggest)) { LookupElementBuilder.create(it, qualifiedNameToSuggest) .withIcon(it.getIcon(0)) @@ -128,7 +128,7 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor() } val scope = PySearchUtilBase.excludeSdkTestsScope(project) PyQualifiedNameCompletionMatcher.processMatchingExportedNames( - qualifier, attribute, parameters.originalFile, scope, + qualifiedName, parameters.originalFile, scope, Processor { ProgressManager.checkCanceled() if (suggestedQualifiedNames.add(it.qualifiedName.toString())) { diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/stubs/PyQualifiedNameCompletionMatcher.java b/python/python-psi-impl/src/com/jetbrains/python/psi/stubs/PyQualifiedNameCompletionMatcher.java index 78b570723837..ebf581a73e55 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/stubs/PyQualifiedNameCompletionMatcher.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/stubs/PyQualifiedNameCompletionMatcher.java @@ -36,13 +36,12 @@ public class PyQualifiedNameCompletionMatcher { private PyQualifiedNameCompletionMatcher() { } - public static void processMatchingExportedNames(@NotNull QualifiedName qualifierPattern, - @NotNull String attributePattern, + public static void processMatchingExportedNames(@NotNull QualifiedName qualifiedNamePattern, @NotNull PsiFile currentFile, @NotNull GlobalSearchScope scope, @NotNull Processor processor) { - if (attributePattern.isEmpty() || qualifierPattern.getComponentCount() == 0) return; - QualifiedNameMatcher matcher = new QualifiedNameMatcher(qualifierPattern.append(attributePattern)); + if (qualifiedNamePattern.getComponentCount() < 2) return; + QualifiedNameMatcher matcher = new QualifiedNameMatcher(qualifiedNamePattern); StubIndex stubIndex = StubIndex.getInstance(); Project project = Objects.requireNonNull(scope.getProject()); @@ -86,7 +85,6 @@ public class PyQualifiedNameCompletionMatcher { } finally { if (LOG.isDebugEnabled()) { - String qualifiedNamePattern = qualifierPattern + "." + attributePattern; LOG.debug("Index lookup stats for '" + qualifiedNamePattern + "':\n" + "Scanned keys: " + stats.scannedKeys + "\n" + "Matched keys: " + stats.matchingKeys + "\n" +