diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddExplicitTypeArgumentsIntention.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddExplicitTypeArgumentsIntention.java index 5985f25296ef..b5c3f388d55c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddExplicitTypeArgumentsIntention.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddExplicitTypeArgumentsIntention.java @@ -43,11 +43,14 @@ public class AddExplicitTypeArgumentsIntention extends BaseElementAtCaretIntenti if (methodExpression == null) return false; PsiElement parent = methodExpression.getParent(); if (parent instanceof PsiMethodCallExpression && ((PsiMethodCallExpression)parent).getTypeArguments().length == 0) { - JavaResolveResult result = ((PsiMethodCallExpression)parent).resolveMethodGenerics(); + PsiMethodCallExpression callExpression = (PsiMethodCallExpression)parent; + JavaResolveResult result = callExpression.resolveMethodGenerics(); if (result instanceof MethodCandidateInfo && ((MethodCandidateInfo)result).isApplicable()) { PsiElement method = result.getElement(); setText(getFamilyName()); - return method instanceof PsiMethod && !((PsiMethod)method).isConstructor() && ((PsiMethod)method).hasTypeParameters(); + return method instanceof PsiMethod && !((PsiMethod)method).isConstructor() && + ((PsiMethod)method).hasTypeParameters() && + AddTypeArgumentsFix.addTypeArguments(callExpression, null) != null; } } return false; diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/AddExplicitTypeArgumentsIntentionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/AddExplicitTypeArgumentsIntentionTest.java index c6677ba6909a..4337367b921f 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/AddExplicitTypeArgumentsIntentionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/AddExplicitTypeArgumentsIntentionTest.java @@ -76,6 +76,19 @@ public class AddExplicitTypeArgumentsIntentionTest extends JavaCodeInsightFixtur "}"); } + public void testNotAvailableWhenRawTypeInferred() throws Exception { + myFixture.configureByText("a.java", "import java.util.List;\n" + + "class Foo {\n" + + " List getList() {return null;}\n" + + " {\n" + + " List l;\n" + + " l = getList();\n" + + " }\n" + + "}"); + final IntentionAction intentionAction = myFixture.getAvailableIntention(CodeInsightBundle.message("intention.add.explicit.type.arguments.family")); + assertNull(intentionAction); + } + private void doTest(String beforeText, String afterText) { myFixture.configureByText("a.java", beforeText); final IntentionAction intentionAction = myFixture.findSingleIntention(CodeInsightBundle.message("intention.add.explicit.type.arguments.family"));