mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
a fix for completion from non-primary caret (IDEA-123396)
This commit is contained in:
+4
@@ -0,0 +1,4 @@
|
||||
class Foo {{
|
||||
<caret>blah
|
||||
// <caret>blah
|
||||
}}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
class Foo {{
|
||||
return<caret>
|
||||
// return<caret>
|
||||
}}
|
||||
+4
@@ -1428,6 +1428,10 @@ class XInternalError {}
|
||||
myFixture.assertPreferredCompletionItems(0, "arraycopy")
|
||||
}
|
||||
|
||||
public void testMulticaretCompletionFromNonPrimaryCaretWithTab() {
|
||||
doTest '\t'
|
||||
}
|
||||
|
||||
public void "test complete lowercase class name"() {
|
||||
myFixture.addClass("package foo; public class myClass {}")
|
||||
myFixture.configureByText "a.java", """
|
||||
|
||||
+9
-1
@@ -39,14 +39,17 @@ public class CompletionInitializationContext {
|
||||
public static @NonNls final String DUMMY_IDENTIFIER = CompletionUtilCore.DUMMY_IDENTIFIER;
|
||||
public static @NonNls final String DUMMY_IDENTIFIER_TRIMMED = CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED;
|
||||
private final Editor myEditor;
|
||||
@NotNull
|
||||
private final Caret myCaret;
|
||||
private final PsiFile myFile;
|
||||
private final CompletionType myCompletionType;
|
||||
private final int myInvocationCount;
|
||||
private final OffsetMap myOffsetMap;
|
||||
private String myDummyIdentifier = DUMMY_IDENTIFIER;
|
||||
|
||||
public CompletionInitializationContext(final Editor editor, final Caret caret, final PsiFile file, final CompletionType completionType, int invocationCount) {
|
||||
public CompletionInitializationContext(final Editor editor, final @NotNull Caret caret, final PsiFile file, final CompletionType completionType, int invocationCount) {
|
||||
myEditor = editor;
|
||||
myCaret = caret;
|
||||
myFile = file;
|
||||
myCompletionType = completionType;
|
||||
myInvocationCount = invocationCount;
|
||||
@@ -92,6 +95,11 @@ public class CompletionInitializationContext {
|
||||
return myEditor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Caret getCaret() {
|
||||
return myCaret;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public CompletionType getCompletionType() {
|
||||
return myCompletionType;
|
||||
|
||||
+4
-3
@@ -193,7 +193,7 @@ public class CodeCompletionHandlerBase {
|
||||
insertDummyIdentifier(initializationContext[0], hasModifiers, invocationCount);
|
||||
}
|
||||
|
||||
private CompletionInitializationContext runContributorsBeforeCompletion(Editor editor, PsiFile psiFile, int invocationCount, Caret caret) {
|
||||
private CompletionInitializationContext runContributorsBeforeCompletion(Editor editor, PsiFile psiFile, int invocationCount, @NotNull Caret caret) {
|
||||
final Ref<CompletionContributor> current = Ref.create(null);
|
||||
CompletionInitializationContext context = new CompletionInitializationContext(editor, caret, psiFile, myCompletionType, invocationCount) {
|
||||
CompletionContributor dummyIdentifierChanger;
|
||||
@@ -296,7 +296,8 @@ public class CodeCompletionHandlerBase {
|
||||
|
||||
final Semaphore freezeSemaphore = new Semaphore();
|
||||
freezeSemaphore.down();
|
||||
final CompletionProgressIndicator indicator = new CompletionProgressIndicator(editor, parameters, this, freezeSemaphore,
|
||||
final CompletionProgressIndicator indicator = new CompletionProgressIndicator(editor, initContext.getCaret(),
|
||||
parameters, this, freezeSemaphore,
|
||||
initContext.getOffsetMap(), hasModifiers, lookup);
|
||||
Disposer.register(indicator, hostMap);
|
||||
Disposer.register(indicator, context.getOffsetMap());
|
||||
@@ -602,7 +603,7 @@ public class CodeCompletionHandlerBase {
|
||||
final CompletionLookupArranger.StatisticsUpdate update) {
|
||||
final Editor editor = indicator.getEditor();
|
||||
|
||||
final int caretOffset = editor.getCaretModel().getOffset();
|
||||
final int caretOffset = indicator.getCaret().getOffset();
|
||||
int idEndOffset = indicator.getIdentifierEndOffset();
|
||||
if (idEndOffset < 0) {
|
||||
idEndOffset = CompletionInitializationContext.calcDefaultIdentifierEnd(editor, caretOffset);
|
||||
|
||||
+10
@@ -39,6 +39,7 @@ import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Caret;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
@@ -88,6 +89,8 @@ import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
public class CompletionProgressIndicator extends ProgressIndicatorBase implements CompletionProcess, Disposable {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.CompletionProgressIndicator");
|
||||
private final Editor myEditor;
|
||||
@NotNull
|
||||
private final Caret myCaret;
|
||||
private final CompletionParameters myParameters;
|
||||
private final CodeCompletionHandlerBase myHandler;
|
||||
private final LookupImpl myLookup;
|
||||
@@ -132,6 +135,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
|
||||
private final int myStartCaret;
|
||||
|
||||
public CompletionProgressIndicator(final Editor editor,
|
||||
@NotNull Caret caret,
|
||||
CompletionParameters parameters,
|
||||
CodeCompletionHandlerBase handler,
|
||||
Semaphore freezeSemaphore,
|
||||
@@ -139,6 +143,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
|
||||
boolean hasModifiers,
|
||||
LookupImpl lookup) {
|
||||
myEditor = editor;
|
||||
myCaret = caret;
|
||||
myParameters = parameters;
|
||||
myHandler = handler;
|
||||
myFreezeSemaphore = freezeSemaphore;
|
||||
@@ -575,6 +580,11 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
|
||||
return myEditor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Caret getCaret() {
|
||||
return myCaret;
|
||||
}
|
||||
|
||||
public boolean isRepeatedInvocation(CompletionType completionType, Editor editor) {
|
||||
if (completionType != myParameters.getCompletionType() || editor != myEditor) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user