diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 7be13575f6c..106124eece7 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -21,6 +21,7 @@ import com.intellij.codeInsight.completion.impl.CamelHumpMatcher import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import com.intellij.patterns.ElementPattern +import com.intellij.patterns.PatternCondition import com.intellij.patterns.StandardPatterns import com.intellij.psi.PsiCompiledElement import com.intellij.psi.PsiElement @@ -28,6 +29,7 @@ import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiTreeUtil +import com.intellij.util.ProcessingContext import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade @@ -350,6 +352,15 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, override fun doComplete() { assert(parameters.getCompletionType() == CompletionType.BASIC) + // if we are typing parameter name, restart completion each time we type an upper case letter because new suggestions will appear (previous words can be used as user prefix) + if (parameterNameAndTypeCompletion != null) { + val prefixPattern = StandardPatterns.string().with(object : PatternCondition("Prefix ends with uppercase letter") { + override fun accepts(prefix: String, context: ProcessingContext?) = prefix.isNotEmpty() && prefix.last().isUpperCase() + }) + (CompletionService.getCompletionService().getCurrentCompletion() as CompletionProgressIndicator) + .addWatchedPrefix(parameters.getOffset(), prefixPattern) + } + if (completionKind == CompletionKind.PARAMETER_NAME || completionKind == CompletionKind.ANNOTATION_TYPES_OR_PARAMETER_NAME) { collector.suppressItemSelectionByCharsOnTyping = true }