diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionProvider.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionProvider.kt index ab53792153a4..63801355b3a2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionProvider.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionProvider.kt @@ -2,8 +2,8 @@ package com.intellij.codeInsight.completion.commands.core import com.intellij.codeInsight.completion.* -import com.intellij.codeInsight.completion.commands.api.CompletionCommand import com.intellij.codeInsight.completion.commands.api.CommandCompletionFactory +import com.intellij.codeInsight.completion.commands.api.CompletionCommand import com.intellij.codeInsight.completion.impl.CamelHumpMatcher import com.intellij.codeInsight.completion.ml.MLWeigherUtil import com.intellij.codeInsight.lookup.LookupElement @@ -23,7 +23,6 @@ import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.util.text.StringUtil import com.intellij.patterns.PatternCondition import com.intellij.patterns.StandardPatterns -import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile import com.intellij.psi.PsiFileFactory import com.intellij.testFramework.LightVirtualFile @@ -43,7 +42,7 @@ internal class CommandCompletionProvider : CompletionProvider text.length || offset == 0) return 0 - while (indexOf > 0 && text.substring(offset - indexOf, offset) != suffix.substring(0, indexOf)) { + while (indexOf > 0 && offset - indexOf >= 0 && text.substring(offset - indexOf, offset) != suffix.substring(0, indexOf)) { indexOf-- } //try to find outside diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionService.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionService.kt index 94151532224c..212d3cc7d36f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionService.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/core/CommandCompletionService.kt @@ -78,9 +78,13 @@ class CommandCompletionService( val language = lookup.psiFile?.language ?: return val completionFactory = getFactory(language) val filterSuffix = completionFactory?.filterSuffix() ?: return - val index = findActualIndex(completionFactory.suffix() + filterSuffix.toString(), lookup.editor.document.immutableCharSequence, lookup.lookupOriginalStart) + val fullSuffix = completionFactory.suffix() + filterSuffix.toString() + val index = findActualIndex(fullSuffix, lookup.editor.document.immutableCharSequence, lookup.lookupOriginalStart) if (index == 0) return - if (lookup.lookupOriginalStart - index + 1 < lookup.editor.document.textLength && lookup.editor.document.immutableCharSequence[lookup.lookupOriginalStart - index + 1] != filterSuffix) return + val offsetOfFullIndex = lookup.lookupOriginalStart - index + if (offsetOfFullIndex < 0 || + offsetOfFullIndex >= lookup.editor.document.textLength || + lookup.editor.document.immutableCharSequence.substring(offsetOfFullIndex) != fullSuffix) return lookup.putUserData(INSTALLED_ADDITIONAL_MATCHER_KEY, true) lookup.arranger.registerAdditionalMatcher(CommandCompletionLookupItemFilter) lookup.arranger.prefixChanged(lookup);