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.TemplateManagerImpl;
|
||||||
import com.intellij.codeInsight.template.impl.TemplateSettings;
|
import com.intellij.codeInsight.template.impl.TemplateSettings;
|
||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref;
|
||||||
|
import com.intellij.patterns.ElementPattern;
|
||||||
import com.intellij.patterns.PlatformPatterns;
|
import com.intellij.patterns.PlatformPatterns;
|
||||||
|
import com.intellij.psi.JavaTokenType;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.util.Consumer;
|
import com.intellij.util.Consumer;
|
||||||
import com.intellij.util.ProcessingContext;
|
import com.intellij.util.ProcessingContext;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lexer.JetToken;
|
||||||
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static com.intellij.patterns.PsiJavaPatterns.elementType;
|
||||||
|
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
|
||||||
|
|
||||||
public class JetLiveTemplateCompletionContributor extends CompletionContributor {
|
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() {
|
public JetLiveTemplateCompletionContributor() {
|
||||||
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
|
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
|
||||||
@Override
|
@Override
|
||||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||||
ProcessingContext context,
|
ProcessingContext context,
|
||||||
@NotNull final CompletionResultSet result) {
|
@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) {
|
if (parameters.getInvocationCount() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PsiFile file = parameters.getPosition().getContainingFile();
|
PsiFile file = parameters.getPosition().getContainingFile();
|
||||||
int offset = parameters.getOffset();
|
int offset = parameters.getOffset();
|
||||||
final List<TemplateImpl> templates = listApplicableTemplates(file, offset);
|
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")
|
@TestMetadata("idea/testData/completion/basic/common")
|
||||||
@InnerTestClasses({Common.Extensions.class})
|
@InnerTestClasses({Common.Extensions.class})
|
||||||
public static class Common extends AbstractJSBasicCompletionTest {
|
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 {
|
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);
|
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");
|
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")
|
@TestMetadata("ExtensionWithAdditionalTypeParameters.kt")
|
||||||
public void testExtensionWithAdditionalTypeParameters() throws Exception {
|
public void testExtensionWithAdditionalTypeParameters() throws Exception {
|
||||||
doTest("idea/testData/completion/basic/common/ExtensionWithAdditionalTypeParameters.kt");
|
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");
|
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")
|
@TestMetadata("NoEmptyNamespace.kt")
|
||||||
public void testNoEmptyNamespace() throws Exception {
|
public void testNoEmptyNamespace() throws Exception {
|
||||||
doTest("idea/testData/completion/basic/common/NoEmptyNamespace.kt");
|
doTest("idea/testData/completion/basic/common/NoEmptyNamespace.kt");
|
||||||
|
|||||||
@@ -35,6 +35,16 @@ public class JetBasicJavaCompletionTestGenerated extends AbstractJvmBasicComplet
|
|||||||
@TestMetadata("idea/testData/completion/basic/common")
|
@TestMetadata("idea/testData/completion/basic/common")
|
||||||
@InnerTestClasses({Common.Extensions.class})
|
@InnerTestClasses({Common.Extensions.class})
|
||||||
public static class Common extends AbstractJvmBasicCompletionTest {
|
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 {
|
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);
|
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");
|
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")
|
@TestMetadata("ExtensionWithAdditionalTypeParameters.kt")
|
||||||
public void testExtensionWithAdditionalTypeParameters() throws Exception {
|
public void testExtensionWithAdditionalTypeParameters() throws Exception {
|
||||||
doTest("idea/testData/completion/basic/common/ExtensionWithAdditionalTypeParameters.kt");
|
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");
|
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")
|
@TestMetadata("NoEmptyNamespace.kt")
|
||||||
public void testNoEmptyNamespace() throws Exception {
|
public void testNoEmptyNamespace() throws Exception {
|
||||||
doTest("idea/testData/completion/basic/common/NoEmptyNamespace.kt");
|
doTest("idea/testData/completion/basic/common/NoEmptyNamespace.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user