Bug 549126 - [code mining] Show method parameter names for enum
constructors

Change-Id: Id573e513d64f79f5dab61b4dd9d9d7340fc3c7ca
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 60f9cdc..9e2fda0 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
@@ -341,6 +341,28 @@
 		assertEquals(2, fParameterNameCodeMiningProvider.provideCodeMinings(viewer, new NullProgressMonitor()).get().size());
 	}
 
+	public void testBug549126() throws Exception {
+		String contents= "public enum TestEnum {\n" + 
+				"    A(\"bla\", null);\n" + 
+				"\n" + 
+				"    public final String string;\n" + 
+				"    public final Object object;\n" + 
+				"\n" + 
+				"    TestEnum(String string, Object object) {\n" + 
+				"        this.string = string;\n" + 
+				"        this.object = object;\n" + 
+				"    }\n" + 
+				"}\n" + 
+				"";
+		ICompilationUnit compilationUnit= fPackage.createCompilationUnit("TestEnum.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());
+	}
+
 
 	private static boolean welcomeClosed;
 	private static void closeIntro(final IWorkbench wb) {
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 00712b8..7ca0424 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
@@ -23,6 +23,7 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.ConstructorInvocation;
+import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.MethodInvocation;
@@ -84,6 +85,19 @@
 	}
 
 	@Override
+	public boolean visit(EnumConstantDeclaration enumConstantDeclaration) {
+		List<?> arguments= enumConstantDeclaration.arguments();
+		if (!arguments.isEmpty()) {
+			IMethodBinding constructorBinding= enumConstantDeclaration.resolveConstructorBinding();
+			if (constructorBinding != null) {
+				IMethod method = resolveMethodBinding(constructorBinding);
+				collectParameterNamesCodeMinings(method, arguments, constructorBinding.isVarargs());
+			}
+		}
+		return super.visit(enumConstantDeclaration);
+	}
+
+	@Override
 	public boolean visit(MethodInvocation methodInvocation) {
 		List<?> arguments= methodInvocation.arguments();
 		if (!arguments.isEmpty()) {