mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-completion] IDEA-359174 first draft of command completion
- fix corner cases GitOrigin-RevId: 27b68684d1c9671e01aa88dd50b7050d8b53c932
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0f9badce9a
commit
691b94da97
+3
-4
@@ -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<CompletionParamete
|
||||
context: ProcessingContext,
|
||||
resultSet: CompletionResultSet,
|
||||
) {
|
||||
if(!Registry.`is`("java.completion.command.enabled")) return
|
||||
if (!Registry.`is`("java.completion.command.enabled")) return
|
||||
resultSet.runRemainingContributors(parameters) {
|
||||
resultSet.passResult(it)
|
||||
}
|
||||
@@ -230,7 +229,7 @@ internal sealed interface InvocationCommandType {
|
||||
internal fun findActualIndex(suffix: String, text: CharSequence, offset: Int): Int {
|
||||
var indexOf = suffix.length
|
||||
if (offset > 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
|
||||
|
||||
+6
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user