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()) {