Fix autopopup completion with irrelevant variants after typing 'f' suffix for float number
#KT-4312 Fixed
This commit is contained in:
+19
@@ -24,27 +24,46 @@ import com.intellij.codeInsight.template.impl.TemplateImpl;
|
||||
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
|
||||
import com.intellij.codeInsight.template.impl.TemplateSettings;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lexer.JetToken;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.intellij.patterns.PsiJavaPatterns.elementType;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
|
||||
|
||||
public class JetLiveTemplateCompletionContributor extends CompletionContributor {
|
||||
private static final ElementPattern<PsiElement> AFTER_NUMBER_LITERAL = psiElement().afterLeafSkipping(
|
||||
psiElement().withText(""),
|
||||
psiElement().withElementType(elementType().oneOf(JetTokens.FLOAT_LITERAL, JetTokens.INTEGER_LITERAL)));
|
||||
|
||||
public JetLiveTemplateCompletionContributor() {
|
||||
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull final CompletionResultSet result) {
|
||||
if (AFTER_NUMBER_LITERAL.accepts(parameters.getPosition())) {
|
||||
// First Kotlin completion contributors - stop here will stop all completion
|
||||
result.stopHere();
|
||||
return;
|
||||
}
|
||||
|
||||
if (parameters.getInvocationCount() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
PsiFile file = parameters.getPosition().getContainingFile();
|
||||
int offset = parameters.getOffset();
|
||||
final List<TemplateImpl> templates = listApplicableTemplates(file, offset);
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
fun test() {
|
||||
val some = 1
|
||||
val f = 1.0f
|
||||
som<caret>
|
||||
}
|
||||
|
||||
// EXIST: some
|
||||
@@ -0,0 +1,7 @@
|
||||
fun test() {
|
||||
val floor = "Floor"
|
||||
val a = 1/**/f<caret>
|
||||
}
|
||||
|
||||
// EXIST: floor
|
||||
// EXIST: false
|
||||
@@ -0,0 +1,5 @@
|
||||
val Int.f: Float get() = this.toFloat()
|
||||
|
||||
val test = 1.<caret>
|
||||
|
||||
// EXIST: f
|
||||
@@ -0,0 +1,3 @@
|
||||
val a = 1.0F<caret>
|
||||
|
||||
// NUMBER: 0
|
||||
@@ -0,0 +1,3 @@
|
||||
val a = 1.0f<caret>
|
||||
|
||||
// NUMBER: 0
|
||||
@@ -0,0 +1,5 @@
|
||||
fun test() {
|
||||
val a = 10<caret>
|
||||
}
|
||||
|
||||
// NUMBER: 0
|
||||
@@ -0,0 +1,3 @@
|
||||
val a = 1L<caret>
|
||||
|
||||
// NUMBER: 0
|
||||
@@ -35,6 +35,16 @@ public class JetBasicJSCompletionTestGenerated extends AbstractJSBasicCompletion
|
||||
@TestMetadata("idea/testData/completion/basic/common")
|
||||
@InnerTestClasses({Common.Extensions.class})
|
||||
public static class Common extends AbstractJSBasicCompletionTest {
|
||||
@TestMetadata("AfterFloatOnNewLine.kt")
|
||||
public void testAfterFloatOnNewLine() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/AfterFloatOnNewLine.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("AfterIntSeparatedWithComments.kt")
|
||||
public void testAfterIntSeparatedWithComments() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/AfterIntSeparatedWithComments.kt");
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInCommon() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/completion/basic/common"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
@@ -139,6 +149,11 @@ public class JetBasicJSCompletionTestGenerated extends AbstractJSBasicCompletion
|
||||
doTest("idea/testData/completion/basic/common/ExtensionInsideFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ExtensionToIntInFloatStyle.kt")
|
||||
public void testExtensionToIntInFloatStyle() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/ExtensionToIntInFloatStyle.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ExtensionWithAdditionalTypeParameters.kt")
|
||||
public void testExtensionWithAdditionalTypeParameters() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/ExtensionWithAdditionalTypeParameters.kt");
|
||||
@@ -299,6 +314,26 @@ public class JetBasicJSCompletionTestGenerated extends AbstractJSBasicCompletion
|
||||
doTest("idea/testData/completion/basic/common/NoClassNameDuplication.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterBigFloat.kt")
|
||||
public void testNoCompletionAfterBigFloat() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterBigFloat.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterFloat.kt")
|
||||
public void testNoCompletionAfterFloat() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterFloat.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterInt.kt")
|
||||
public void testNoCompletionAfterInt() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterInt.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterLong.kt")
|
||||
public void testNoCompletionAfterLong() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterLong.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoEmptyNamespace.kt")
|
||||
public void testNoEmptyNamespace() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoEmptyNamespace.kt");
|
||||
|
||||
@@ -35,6 +35,16 @@ public class JetBasicJavaCompletionTestGenerated extends AbstractJvmBasicComplet
|
||||
@TestMetadata("idea/testData/completion/basic/common")
|
||||
@InnerTestClasses({Common.Extensions.class})
|
||||
public static class Common extends AbstractJvmBasicCompletionTest {
|
||||
@TestMetadata("AfterFloatOnNewLine.kt")
|
||||
public void testAfterFloatOnNewLine() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/AfterFloatOnNewLine.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("AfterIntSeparatedWithComments.kt")
|
||||
public void testAfterIntSeparatedWithComments() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/AfterIntSeparatedWithComments.kt");
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInCommon() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/completion/basic/common"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
@@ -139,6 +149,11 @@ public class JetBasicJavaCompletionTestGenerated extends AbstractJvmBasicComplet
|
||||
doTest("idea/testData/completion/basic/common/ExtensionInsideFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ExtensionToIntInFloatStyle.kt")
|
||||
public void testExtensionToIntInFloatStyle() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/ExtensionToIntInFloatStyle.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ExtensionWithAdditionalTypeParameters.kt")
|
||||
public void testExtensionWithAdditionalTypeParameters() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/ExtensionWithAdditionalTypeParameters.kt");
|
||||
@@ -299,6 +314,26 @@ public class JetBasicJavaCompletionTestGenerated extends AbstractJvmBasicComplet
|
||||
doTest("idea/testData/completion/basic/common/NoClassNameDuplication.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterBigFloat.kt")
|
||||
public void testNoCompletionAfterBigFloat() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterBigFloat.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterFloat.kt")
|
||||
public void testNoCompletionAfterFloat() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterFloat.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterInt.kt")
|
||||
public void testNoCompletionAfterInt() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterInt.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoCompletionAfterLong.kt")
|
||||
public void testNoCompletionAfterLong() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoCompletionAfterLong.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NoEmptyNamespace.kt")
|
||||
public void testNoEmptyNamespace() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/NoEmptyNamespace.kt");
|
||||
|
||||
Reference in New Issue
Block a user