Bug 541396 - [code mining] 0 reference / implementation

Change-Id: I0f997e0588fbd7e7ad6e4642f5442e8a16aacee4
Signed-off-by: angelozerr <angelo.zerr@gmail.com>
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaCodeMiningMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaCodeMiningMessages.java
new file mode 100644
index 0000000..5344c6e
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaCodeMiningMessages.java
@@ -0,0 +1,38 @@
+/**
+ *  Copyright (c) 2018 Angelo ZERR.
+ *  
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *     Angelo Zerr <angelo.zerr@gmail.com> - [code mining] 0 reference / implementation - Bug 541396
+ */
+package org.eclipse.jdt.internal.ui.javaeditor.codemining;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Helper class to get NLSed messages.
+ */
+final class JavaCodeMiningMessages extends NLS {
+
+	private static final String BUNDLE_NAME= JavaCodeMiningMessages.class.getName();
+
+
+	private JavaCodeMiningMessages() {
+		// Do not instantiate
+	}
+
+	public static String JavaReferenceCodeMining_label;
+
+	public static String JavaImplementationCodeMining_label;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, JavaCodeMiningMessages.class);
+	}
+
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaCodeMiningMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaCodeMiningMessages.properties
new file mode 100644
index 0000000..b688942
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaCodeMiningMessages.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2018 Angelo ZERR.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+#     Angelo Zerr <angelo.zerr@gmail.com> - [code mining] 0 reference / implementation - Bug 541396
+###############################################################################
+
+JavaReferenceCodeMining_label={0,choice,0#0 references|1#1 reference|1<{0} references}
+JavaImplementationCodeMining_label={0,choice,0#0 implementations|1#1 implementation|1<{0} implementations}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaImplementationCodeMining.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaImplementationCodeMining.java
index c0f1dbc..5b88451 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaImplementationCodeMining.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaImplementationCodeMining.java
@@ -10,6 +10,7 @@
  */
 package org.eclipse.jdt.internal.ui.javaeditor.codemining;
 
+import java.text.MessageFormat;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Stream;
 
@@ -39,6 +40,7 @@
 		this.showImplementationsAtLeastOne= showImplementationsAtLeastOne;
 	}
 
+	@SuppressWarnings("boxing")
 	@Override
 	protected CompletableFuture<Void> doResolve(ITextViewer viewer, IProgressMonitor monitor) {
 		return CompletableFuture.runAsync(() -> {
@@ -47,7 +49,7 @@
 				if (implCount == 0 && showImplementationsAtLeastOne) {
 					super.setLabel(""); //$NON-NLS-1$
 				} else {
-					super.setLabel(implCount + " " + (implCount > 1 ? "implementations" : "implementation")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					super.setLabel(MessageFormat.format(JavaCodeMiningMessages.JavaImplementationCodeMining_label, implCount));
 				}
 			} catch (JavaModelException e) {
 				// Should never occur
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java
index 538f7b0..d2c7168 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java
@@ -10,8 +10,12 @@
  */
 package org.eclipse.jdt.internal.ui.javaeditor.codemining;
 
+import java.text.MessageFormat;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
+
+import org.eclipse.swt.events.MouseEvent;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -46,26 +50,34 @@
  */
 public class JavaReferenceCodeMining extends AbstractJavaElementLineHeaderCodeMining {
 
+	private final JavaEditor editor;
+
 	private final boolean showReferencesAtLeastOne;
 
+	private Consumer<MouseEvent> action;
+
 	public JavaReferenceCodeMining(IJavaElement element, JavaEditor editor, IDocument document,
 			ICodeMiningProvider provider, boolean showReferencesAtLeastOne)
 			throws JavaModelException, BadLocationException {
-		super(element, document, provider, e -> new FindReferencesAction(editor).run(element));
+		super(element, document, provider, null);
+		this.editor= editor;
 		this.showReferencesAtLeastOne= showReferencesAtLeastOne;
 	}
 
+	@SuppressWarnings("boxing")
 	@Override
 	protected CompletableFuture<Void> doResolve(ITextViewer viewer, IProgressMonitor monitor) {
 		return CompletableFuture.runAsync(() -> {
 			try {
 				monitor.isCanceled();
-				long refCount= countReferences(getElement(), monitor);
+				IJavaElement element = super.getElement();
+				long refCount= countReferences(element, monitor);
 				monitor.isCanceled();
+				action= refCount > 0 ? e -> new FindReferencesAction(editor).run(element) : null;
 				if (refCount == 0 && showReferencesAtLeastOne) {
 					super.setLabel(""); //$NON-NLS-1$
 				} else {
-					super.setLabel(refCount + " " + (refCount > 1 ? "references" : "reference")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					super.setLabel(MessageFormat.format(JavaCodeMiningMessages.JavaReferenceCodeMining_label, refCount));
 				}
 			} catch (JavaModelException e) {
 				// Should never occur
@@ -75,6 +87,11 @@
 		});
 	}
 
+	@Override
+	public Consumer<MouseEvent> getAction() {
+		return action;
+	}
+
 	/**
 	 * Return the number of references for the given java element.
 	 *