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 6f520acccc7b..a2d693cf8845 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java @@ -106,7 +106,11 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { } PsiType type = var.getType(); - if (type instanceof PsiClassType && ((PsiClassType)type).resolve() == null) return; + if (type instanceof PsiClassType && + ((PsiClassType)type).resolve() == null && + seemsMistypedKeyword(((PsiClassType)type).getClassName())) { + return; + } SuggestedNameInfo suggestedNameInfo = codeStyleManager.suggestVariableName(variableKind, propertyName, null, type, StringUtil.isEmpty(matcher.getPrefix())); suggestedNameInfo = codeStyleManager.suggestUniqueVariableName(suggestedNameInfo, var, false); @@ -138,6 +142,10 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { } } + private static boolean seemsMistypedKeyword(String className) { + return className != null && !StringUtil.isCapitalized(className); + } + private static boolean hasStartMatches(PrefixMatcher matcher, Set set) { for (String s : set) { if (matcher.isStartMatch(s)) { 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 9c51e817964c..3b270e72a085 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 @@ -307,4 +307,16 @@ class C { assert myFixture.completeBasic()?.size() == 0 } + void "test suggest variable name when the type is unresolved but does not seem a mistyped keyword"() { + myFixture.configureByText 'a.java', ''' +class C { + { + UndefinedType + } + } +''' + myFixture.completeBasic() + myFixture.assertPreferredCompletionItems 0, 'undefinedType', 'type' + } + }