Fix the end of the replaced identifier for completion with tab char

Stop removing (, ), {, }, + and so on.
This commit is contained in:
Nikolay Krasko
2013-08-29 14:07:05 +04:00
parent e1f31a4a75
commit 4477dadcd1
22 changed files with 135 additions and 2 deletions
@@ -21,9 +21,11 @@ import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
@@ -93,8 +95,10 @@ public class JetCompletionContributor extends CompletionContributor {
@Override
public void beforeCompletion(@NotNull CompletionInitializationContext context) {
if (context.getCompletionType() == CompletionType.BASIC && context.getFile() instanceof JetFile) {
PsiElement position = context.getFile().findElementAt(Math.max(0, context.getStartOffset() - 1));
if (context.getFile() instanceof JetFile) {
int offset = context.getStartOffset();
PsiElement position = context.getFile().findElementAt(Math.max(0, offset - 1));
if (JetPackagesContributor.ACTIVATION_PATTERN.accepts(position)) {
context.setDummyIdentifier(JetPackagesContributor.DUMMY_IDENTIFIER);
@@ -102,6 +106,21 @@ public class JetCompletionContributor extends CompletionContributor {
else if (JetExtensionReceiverTypeContributor.ACTIVATION_PATTERN.accepts(position)) {
context.setDummyIdentifier(JetExtensionReceiverTypeContributor.DUMMY_IDENTIFIER);
}
if (!context.getEditor().getSelectionModel().hasSelection()) {
PsiReference reference = context.getFile().findReferenceAt(offset);
if (reference != null) {
PsiElement atElement = context.getFile().findElementAt(offset);
assert atElement != null : String.format("Element is not expected to be null: %d in file %s",
offset, context.getFile().getText());
IElementType parentElementType = atElement.getParent().getNode().getElementType();
if (!(reference instanceof JetSimpleNameReference) || parentElementType == JetNodeTypes.OPERATION_REFERENCE) {
context.setReplacementOffset(offset);
}
}
}
}
}
}
@@ -0,0 +1,2 @@
val vvvvv = 112
val a = vv<caret>
@@ -0,0 +1,2 @@
val vvvvv = 112
val a = vvvvv<caret>
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vv<caret>{}
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vvvvv<caret>{}
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vv<caret>[]
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vvvvv<caret>[]
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vv<caret>+12
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vvvvv<caret>+12
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vv<caret>()
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vvvvv<caret>()
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vvv<caret>me
}
@@ -0,0 +1,4 @@
fun test() {
val vvvvv = 12
vvvvv<caret>
}
@@ -0,0 +1,6 @@
fun foo(f: (Int) -> Unit) = 12
fun test() {
val vvvvv = 12
foo {vv<caret>}
}
@@ -0,0 +1,6 @@
fun foo(f: (Int) -> Unit) = 12
fun test() {
val vvvvv = 12
foo {vvvvv<caret>}
}
@@ -0,0 +1,5 @@
fun test() {
val vvvvv = 12
val foo = array(1, 2, 3)
foo[vv<caret>]
}
@@ -0,0 +1,5 @@
fun test() {
val vvvvv = 12
val foo = array(1, 2, 3)
foo[vvvvv<caret>]
}
@@ -0,0 +1,7 @@
fun foo(a: Int) {
}
fun test() {
val vvvvv = 12
foo(<caret>)
}
@@ -0,0 +1,7 @@
fun foo(a: Int) {
}
fun test() {
val vvvvv = 12
foo(vvvvv<caret>)
}
@@ -0,0 +1,7 @@
fun foo(a: Int) {
}
fun test() {
val vvvvv = 12
foo(vv<caret>)
}
@@ -0,0 +1,7 @@
fun foo(a: Int) {
}
fun test() {
val vvvvv = 12
foo(vvvvv<caret>)
}
@@ -70,6 +70,26 @@ public class CompletionHandlerTest() : JetLightCodeInsightFixtureTestCase() {
fun testForceParenthesisForTabChar() = doTest(CompletionType.BASIC, 0, "some", null, '\t')
fun testTabInsertAtTheFileEnd() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertBeforeBraces() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertBeforeBrackets() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertBeforeOperator() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertBeforeParentheses() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertInsideBraces() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertInsideBrackets() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertInsideEmptyParentheses() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertInsideParentheses() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
fun testTabInsertInSimpleName() = doTest(CompletionType.BASIC, 0, "vvvvv", null, '\t')
var fixture by Delegates.notNull<JavaCodeInsightTestFixture>()
protected override fun setUp() {