mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-167746 Carry completion list over to the next line on Shift+Enter
This commit is contained in:
@@ -1840,4 +1840,16 @@ ita<caret>
|
||||
assert lookup
|
||||
}
|
||||
|
||||
void "test don't close lookup when starting a new line"() {
|
||||
myFixture.configureByText 'a.java', 'class Foo {{ "abc"<caret> }}'
|
||||
type '.'
|
||||
assert lookup
|
||||
edt {
|
||||
myFixture.performEditorAction(IdeActions.ACTION_EDITOR_START_NEW_LINE)
|
||||
assert lookup
|
||||
assert lookup.lookupStart == myFixture.editor.caretModel.offset
|
||||
assert myFixture.editor.document.text.contains('\n')
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -376,6 +376,11 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable
|
||||
return true;
|
||||
}
|
||||
|
||||
void moveToCaretPosition() {
|
||||
myOffsets.destabilizeLookupStart();
|
||||
refreshUi(false, true);
|
||||
}
|
||||
|
||||
private boolean updateList(boolean onExplicitAction, boolean reused) {
|
||||
if (!ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
|
||||
@@ -86,6 +86,10 @@ public class LookupOffsets implements DocumentListener {
|
||||
return true;
|
||||
}
|
||||
|
||||
void destabilizeLookupStart() {
|
||||
myStableStart = false;
|
||||
}
|
||||
|
||||
void checkMinPrefixLengthChanges(Collection<LookupElement> items, LookupImpl lookup) {
|
||||
if (myStableStart) return;
|
||||
if (!lookup.isCalculating() && !items.isEmpty()) {
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.lookup.impl;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupManager;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.editor.Caret;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class StartNewLineHandler extends EditorActionHandler {
|
||||
private final EditorActionHandler myOriginalHandler;
|
||||
|
||||
public StartNewLineHandler(EditorActionHandler originalHandler) {
|
||||
myOriginalHandler = originalHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doExecute(Editor editor, @Nullable Caret caret, DataContext dataContext) {
|
||||
Runnable callOriginal = () -> {
|
||||
if (myOriginalHandler != null) {
|
||||
myOriginalHandler.execute(editor, caret, dataContext);
|
||||
}
|
||||
};
|
||||
LookupImpl lookup = (LookupImpl)LookupManager.getActiveLookup(editor);
|
||||
if (lookup != null && lookup.getLookupStart() == lookup.getLookupOriginalStart()) {
|
||||
lookup.performGuardedChange(callOriginal);
|
||||
lookup.moveToCaretPosition();
|
||||
} else {
|
||||
callOriginal.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -723,6 +723,7 @@
|
||||
<editorActionHandler action="EditorLeft" implementationClass="com.intellij.codeInsight.lookup.impl.LookupActionHandler$LeftHandler"/>
|
||||
<editorActionHandler action="EditorRight" implementationClass="com.intellij.codeInsight.lookup.impl.LookupActionHandler$RightHandler"/>
|
||||
<editorActionHandler action="EditorBackSpace" implementationClass="com.intellij.codeInsight.lookup.impl.BackspaceHandler" id="backspace.lookup"/>
|
||||
<editorActionHandler action="EditorStartNewLine" implementationClass="com.intellij.codeInsight.lookup.impl.StartNewLineHandler" id="backspace.lookup"/>
|
||||
|
||||
<!-- CodeInsightSettings -->
|
||||
<editorActionHandler action="EditorEnter" implementationClass="com.intellij.codeInsight.editorActions.EnterHandler" id="editorEnter"/>
|
||||
|
||||
Reference in New Issue
Block a user