From 58447c4832dd148a4145a82b904bf41a7230369f Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 24 Jan 2011 12:45:21 +0100 Subject: [PATCH] add explicit type arguments: qualify method expression if needed (IDEA-64458) --- .../daemon/impl/quickfix/AddTypeArgumentsFix.java | 15 ++++++++++++++- .../addTypeArguments/afterUnqualified.java | 7 +++++++ .../addTypeArguments/afterUnqualifiedStatic.java | 7 +++++++ .../addTypeArguments/beforeUnqualified.java | 7 +++++++ .../addTypeArguments/beforeUnqualifiedStatic.java | 7 +++++++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddTypeArgumentsFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddTypeArgumentsFix.java index 87fbe3ccf8f6..f0940a84f3ed 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddTypeArgumentsFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddTypeArgumentsFix.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; +import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; @@ -72,11 +73,23 @@ public class AddTypeArgumentsFix extends MethodArgumentFix { final PsiElementFactory factory = JavaPsiFacade.getInstance(expression.getProject()).getElementFactory(); PsiMethodCallExpression copy = (PsiMethodCallExpression)expression.copy(); - final PsiReferenceParameterList parameterList = copy.getMethodExpression().getParameterList(); + final PsiReferenceExpression methodExpression = copy.getMethodExpression(); + final PsiReferenceParameterList parameterList = methodExpression.getParameterList(); LOG.assertTrue(parameterList != null); for (PsiType mapping : mappings) { parameterList.add(factory.createTypeElement(mapping)); } + if (methodExpression.getQualifierExpression() == null) { + final PsiExpression qualifierExpression; + final PsiClass containingClass = method.getContainingClass(); + LOG.assertTrue(containingClass != null); + if (method.hasModifierProperty(PsiModifier.STATIC)) { + qualifierExpression = factory.createReferenceExpression(containingClass); + } else { + qualifierExpression = RefactoringUtil.createThisExpression(method.getManager(), null); + } + methodExpression.setQualifierExpression(qualifierExpression); + } return copy; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java new file mode 100644 index 000000000000..2e7cbdc95880 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java @@ -0,0 +1,7 @@ +// "Add explicit type arguments" "true" +import java.util.*; +class Test { + List f() { return new ArrayList(); } + void g(List a) {} + void someMethod() { g(this.f()); } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java new file mode 100644 index 000000000000..6ca0a0b28769 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java @@ -0,0 +1,7 @@ +// "Add explicit type arguments" "true" +import java.util.*; +class Test { + static List f() { return new ArrayList(); } + void g(List a) {} + void someMethod() { g(Test.f()); } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java new file mode 100644 index 000000000000..8ed862474c9f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java @@ -0,0 +1,7 @@ +// "Add explicit type arguments" "true" +import java.util.*; +class Test { + List f() { return new ArrayList(); } + void g(List a) {} + void someMethod() { g(f()); } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java new file mode 100644 index 000000000000..66bc051cd302 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java @@ -0,0 +1,7 @@ +// "Add explicit type arguments" "true" +import java.util.*; +class Test { + static List f() { return new ArrayList(); } + void g(List a) {} + void someMethod() { g(f()); } +} \ No newline at end of file