summaryrefslogtreecommitdiff
path: root/compose-ide-plugin
diff options
context:
space:
mode:
authorkovalp <kovalp@google.com>2022-04-06 19:45:51 +0100
committerkovalp <kovalp@google.com>2022-04-06 21:18:27 +0100
commit47fedb469fb3b2670f8432286f9788ebe9601537 (patch)
treed5ca621a9a7091264ab17e296653b4c8b9e06ace /compose-ide-plugin
parent8bbda6d38a2ec35b2e86c42bf8f843c4d8858b51 (diff)
downloadidea-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.kt20
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
}