From 5fe4a9b6912fd75f9f3ab718fef33a4872cb85f5 Mon Sep 17 00:00:00 2001 From: Tagir Valeev <Tagir.Valeev@jetbrains.com> Date: Thu, 5 Apr 2018 11:46:42 +0700 Subject: [PATCH] GuessManagerImpl: box values on fast-path; disable DFA on primitive types at all Fixes IDEA-189340 Does not show Number methods during auto completion --- .../intellij/codeInsight/guess/impl/GuessManagerImpl.java | 6 ++++++ .../completion/normal/AssignmentPrimitiveLiteral.java | 6 ++++++ .../completion/normal/AssignmentPrimitiveLiteral_after.java | 6 ++++++ .../codeInsight/completion/NormalCompletionDfaTest.groovy | 1 + 4 files changed, 19 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral_after.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java index ae1959c9cb6f..ad3f24e8adb9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java @@ -340,6 +340,9 @@ public class GuessManagerImpl extends GuessManager { @NotNull @Override public List<PsiType> getControlFlowExpressionTypeConjuncts(@NotNull PsiExpression expr) { + if (expr.getType() instanceof PsiPrimitiveType) { + return Collections.emptyList(); + } List<PsiType> result = null; PsiExpression place = PsiUtil.skipParenthesizedExprDown(expr); if (place == null) return Collections.emptyList(); @@ -413,6 +416,9 @@ public class GuessManagerImpl extends GuessManager { private void handleAssignment(@Nullable PsiExpression expression) { if (expression == null) return; PsiType type = expression.getType(); + if (type instanceof PsiPrimitiveType) { + type = ((PsiPrimitiveType)type).getBoxedType(expression); + } PsiType rawType = type instanceof PsiClassType ? ((PsiClassType)type).rawType() : type; if (rawType == null || rawType.equals(PsiType.NULL)) return; if (mySpecificType == null) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral.java b/java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral.java new file mode 100644 index 000000000000..44fed7a10349 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral.java @@ -0,0 +1,6 @@ +class Foo { + void test() { + Number x = 10; + return x.lon<caret> + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral_after.java b/java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral_after.java new file mode 100644 index 000000000000..d5685ad20c74 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/AssignmentPrimitiveLiteral_after.java @@ -0,0 +1,6 @@ +class Foo { + void test() { + Number x = 10; + return x.longValue() + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionDfaTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionDfaTest.groovy index 5fe82b6a5939..a676336654c9 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionDfaTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionDfaTest.groovy @@ -47,6 +47,7 @@ class NormalCompletionDfaTest extends NormalCompletionTestCase { void testAssignmentTwicePreciseTypeDfa() { doTest() } void testAssignmentParameterDfa() { doTest() } void testAssignmentNoPreciseTypeDfa() { doTest() } + void testAssignmentPrimitiveLiteral() { doTest() } void testDeclarationPreciseTypeDfa() { doTest() } void testInstanceOfAssignmentDfa() { doTest() } void testStreamDfa() { doTest() } -- GitLab