diff options
author | kovalp <kovalp@google.com> | 2022-04-06 19:45:51 +0100 |
---|---|---|
committer | kovalp <kovalp@google.com> | 2022-04-06 21:18:27 +0100 |
commit | 47fedb469fb3b2670f8432286f9788ebe9601537 (patch) | |
tree | d5ca621a9a7091264ab17e296653b4c8b9e06ace /compose-ide-plugin | |
parent | 8bbda6d38a2ec35b2e86c42bf8f843c4d8858b51 (diff) | |
download | idea-47fedb469fb3b2670f8432286f9788ebe9601537.tar.gz |
[Compose] Use name filter for ComposeModifierCompletionContributor
+ make isModifierProperty stricter.
+ change BodyResolveMode from PARTIAL_WITH_DIAGNOSTICS to PARTIAL_FOR_COMPLETION
Fixes: 218543832
Test: manually tested case in the bug + passing existing tests
Change-Id: Ibebfb17e6c3a5e4e4bf99f048652d461a0e8a351
Diffstat (limited to 'compose-ide-plugin')
-rw-r--r-- | compose-ide-plugin/src/com/android/tools/compose/code/completion/ComposeModifierCompletionContributor.kt | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/compose-ide-plugin/src/com/android/tools/compose/code/completion/ComposeModifierCompletionContributor.kt b/compose-ide-plugin/src/com/android/tools/compose/code/completion/ComposeModifierCompletionContributor.kt index 2b5bfe6324e..feabb0847e5 100644 --- a/compose-ide-plugin/src/com/android/tools/compose/code/completion/ComposeModifierCompletionContributor.kt +++ b/compose-ide-plugin/src/com/android/tools/compose/code/completion/ComposeModifierCompletionContributor.kt @@ -23,6 +23,7 @@ import com.intellij.codeInsight.completion.CompletionInitializationContext import com.intellij.codeInsight.completion.CompletionParameters import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.InsertionContext +import com.intellij.codeInsight.completion.PrefixMatcher import com.intellij.codeInsight.completion.PrioritizedLookupElement import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElementDecorator @@ -105,7 +106,7 @@ class ComposeModifierCompletionContributor : CompletionContributor() { val nameExpression = createNameExpression(element) - val extensionFunctions = getExtensionFunctionsForModifier(nameExpression, element) + val extensionFunctions = getExtensionFunctionsForModifier(nameExpression, element, resultSet.prefixMatcher) ProgressManager.checkCanceled() val (returnsModifier, others) = extensionFunctions.partition { it.returnType?.fqName?.asString() == COMPOSE_MODIFIER_FQN } @@ -182,13 +183,15 @@ class ComposeModifierCompletionContributor : CompletionContributor() { return file.getChildOfType<KtProperty>()!!.getChildOfType<KtDotQualifiedExpression>()!!.lastChild as KtSimpleNameExpression } - private fun getExtensionFunctionsForModifier(nameExpression: KtSimpleNameExpression, - originalPosition: PsiElement): Collection<CallableDescriptor> { + private fun getExtensionFunctionsForModifier( + nameExpression: KtSimpleNameExpression, + originalPosition: PsiElement, + prefixMatcher: PrefixMatcher + ): Collection<CallableDescriptor> { val file = nameExpression.containingFile as KtFile val searchScope = getResolveScope(file) val resolutionFacade = file.getResolutionFacade() - - val bindingContext = nameExpression.analyze(BodyResolveMode.PARTIAL_WITH_DIAGNOSTICS) + val bindingContext = nameExpression.analyze(BodyResolveMode.PARTIAL_FOR_COMPLETION) val callTypeAndReceiver = CallTypeAndReceiver.detect(nameExpression) fun isVisible(descriptor: DeclarationDescriptor): Boolean { @@ -200,12 +203,15 @@ class ComposeModifierCompletionContributor : CompletionContributor() { } val indicesHelper = KotlinIndicesHelper(resolutionFacade, searchScope, ::isVisible, file = file) - return indicesHelper.getCallableTopLevelExtensions(callTypeAndReceiver, nameExpression, bindingContext, null) { true } + + val nameFilter = { name: String -> prefixMatcher.prefixMatches(name) } + return indicesHelper.getCallableTopLevelExtensions(callTypeAndReceiver, nameExpression, bindingContext, null, nameFilter) } private val PsiElement.isModifierProperty: Boolean get() { - val property = contextOfType<KtProperty>() ?: return false + // Case val myModifier:Modifier = <caret> + val property = parent?.parent?.safeAs<KtProperty>() ?: return false return property.type()?.fqName?.asString() == COMPOSE_MODIFIER_FQN } |