From 831125d1c72a87d7f6d91544ca25754ddb95b5bb Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 13 Jun 2019 14:12:53 +0200 Subject: [PATCH] java completion: don't suggest a variable name after a misspelled keyword (IDEA-215451) GitOrigin-RevId: 2224a09bdaaee8026dc1ec97cb8884366a26abfd --- .../JavaMemberNameCompletionContributor.java | 4 +++- .../keywords/instanceofAfterStatementStart.java | 2 +- .../completion/normal/SecondMethodParameterName.java | 2 +- .../normal/SecondMethodParameterName_after.java | 2 +- .../completion/VariablesCompletionTest.groovy | 11 +++++++++++ 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java index 678aafc6e2b8..6f520acccc7b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java @@ -105,7 +105,9 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { } } - final PsiType type = var.getType(); + PsiType type = var.getType(); + if (type instanceof PsiClassType && ((PsiClassType)type).resolve() == null) return; + SuggestedNameInfo suggestedNameInfo = codeStyleManager.suggestVariableName(variableKind, propertyName, null, type, StringUtil.isEmpty(matcher.getPrefix())); suggestedNameInfo = codeStyleManager.suggestUniqueVariableName(suggestedNameInfo, var, false); final String[] suggestedNames = suggestedNameInfo.names; diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceofAfterStatementStart.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceofAfterStatementStart.java index b5ab87da8f4a..96596427a9d4 100644 --- a/java/java-tests/testData/codeInsight/completion/keywords/instanceofAfterStatementStart.java +++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceofAfterStatementStart.java @@ -1,5 +1,5 @@ class Foo { void test(Object o) { - o + o x } } diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java index ae5ac36efc5a..3e41436cfca3 100644 --- a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java +++ b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java @@ -1,4 +1,4 @@ -public class MyFirstTestClassFoo { +public class Eee { void foo(int a, Eee e){ } diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java index 60942921393d..993a2dcc7ba1 100644 --- a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java +++ b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java @@ -1,4 +1,4 @@ -public class MyFirstTestClassFoo { +public class Eee { void foo(int a, Eee eee){ } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/VariablesCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/VariablesCompletionTest.groovy index 75f260e155dd..9c51e817964c 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/VariablesCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/VariablesCompletionTest.groovy @@ -296,4 +296,15 @@ class FooFoo { myFixture.assertPreferredCompletionItems 0, 'materialQualities', 'materialQualities1', 'qualities', 'materialQualityIterable', 'qualityIterable', 'iterable' } + void "test no name suggestions when the type is unresolved because it is actually a mistyped keyword"() { + myFixture.configureByText 'a.java', ''' +class C { + { + retur Fix + } + } +''' + assert myFixture.completeBasic()?.size() == 0 + } + }