Bug 549023 - [code mining] Parameter name code mining not shown for
super constructor invocation
Change-Id: Id0fd4350b6fd073b30857ba42264eb1efbc5d602
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/codemining/ParameterNamesCodeMiningTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/codemining/ParameterNamesCodeMiningTest.java
index d3750d9..60f9cdc 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/codemining/ParameterNamesCodeMiningTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/codemining/ParameterNamesCodeMiningTest.java
@@ -306,7 +306,33 @@
" }\n" +
"}\n" +
"";
- ICompilationUnit compilationUnit= fPackage.createCompilationUnit("Foo.java", contents, true, new NullProgressMonitor());
+ ICompilationUnit compilationUnit= fPackage.createCompilationUnit("Test.java", contents, true, new NullProgressMonitor());
+ JavaEditor editor= (JavaEditor) EditorUtility.openInEditor(compilationUnit);
+ fParameterNameCodeMiningProvider.setContext(editor);
+ JavaSourceViewer viewer= (JavaSourceViewer)editor.getViewer();
+ waitReconciled(viewer);
+
+ assertEquals(2, fParameterNameCodeMiningProvider.provideCodeMinings(viewer, new NullProgressMonitor()).get().size());
+ }
+
+ public void testBug549023() throws Exception {
+ String contents= "class Base {\n" +
+ " public final Object object;\n" +
+ " public final String string;\n" +
+ "\n" +
+ " Base(Object object, String string) {\n" +
+ " this.object = object;\n" +
+ " this.string = string;\n" +
+ " }\n" +
+ "}\n" +
+ "\n" +
+ "public class Test extends Base {\n" +
+ " Test() {\n" +
+ " super(null, \"\");\n" +
+ " }\n" +
+ "}\n" +
+ "";
+ ICompilationUnit compilationUnit= fPackage.createCompilationUnit("Test.java", contents, true, new NullProgressMonitor());
JavaEditor editor= (JavaEditor) EditorUtility.openInEditor(compilationUnit);
fParameterNameCodeMiningProvider.setContext(editor);
JavaSourceViewer viewer= (JavaSourceViewer)editor.getViewer();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/CalleeJavaMethodParameterVisitor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/CalleeJavaMethodParameterVisitor.java
index 1cbb372..00712b8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/CalleeJavaMethodParameterVisitor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/CalleeJavaMethodParameterVisitor.java
@@ -26,6 +26,7 @@
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
import org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor;
@@ -70,6 +71,19 @@
}
@Override
+ public boolean visit(SuperConstructorInvocation superConstructorInvocation) {
+ List<?> arguments= superConstructorInvocation.arguments();
+ if (!arguments.isEmpty()) {
+ IMethodBinding constructorBinding= superConstructorInvocation.resolveConstructorBinding();
+ if (constructorBinding != null) {
+ IMethod method = resolveMethodBinding(constructorBinding);
+ collectParameterNamesCodeMinings(method, arguments, constructorBinding.isVarargs());
+ }
+ }
+ return super.visit(superConstructorInvocation);
+ }
+
+ @Override
public boolean visit(MethodInvocation methodInvocation) {
List<?> arguments= methodInvocation.arguments();
if (!arguments.isEmpty()) {