Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorangelozerr2017-12-13 15:02:43 +0000
committerMickael Istria2017-12-15 15:32:25 +0000
commit079815ecaf4c3f5aea1bb04692048e955daea8c4 (patch)
treeaac64e126f68b88bab0071ef2049de77d2a5a221 /org.eclipse.ui.genericeditor.examples/src
parent9855af89aba96b423622037a259b65f3fa08ec86 (diff)
downloadeclipse.platform.text-079815ecaf4c3f5aea1bb04692048e955daea8c4.tar.gz
eclipse.platform.text-079815ecaf4c3f5aea1bb04692048e955daea8c4.tar.xz
eclipse.platform.text-079815ecaf4c3f5aea1bb04692048e955daea8c4.zip
Bug 528419 - [CodeMining] Provide extension point for CodeMiningI20171218-2000I20171217-2000I20171216-1500I20171215-2000
Change-Id: I1a7d51ae3772aefd382839d27814f88f7fa68efa Signed-off-by: angelozerr <angelo.zerr@gmail.com>
Diffstat (limited to 'org.eclipse.ui.genericeditor.examples/src')
-rw-r--r--org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferenceCodeMining.java46
-rw-r--r--org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferencesCodeMiningProvider.java75
2 files changed, 121 insertions, 0 deletions
diff --git a/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferenceCodeMining.java b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferenceCodeMining.java
new file mode 100644
index 00000000000..e46bd352e5a
--- /dev/null
+++ b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferenceCodeMining.java
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2017 Angelo ZERR.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Angelo Zerr <angelo.zerr@gmail.com> - [CodeMining] Provide extension point for CodeMining - Bug 528419
+ */
+package org.eclipse.ui.genericeditor.examples.dotproject.codemining;
+
+import java.util.concurrent.CompletableFuture;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.codemining.AbstractCodeMining;
+import org.eclipse.jface.text.codemining.ICodeMiningProvider;
+
+/**
+ * Project reference mining.
+ */
+public class ProjectReferenceCodeMining extends AbstractCodeMining {
+
+ private final String projectName;
+
+ public ProjectReferenceCodeMining(String projectName, int beforeLineNumber, IDocument document,
+ ICodeMiningProvider provider) throws BadLocationException {
+ super(beforeLineNumber, document, provider);
+ this.projectName = projectName;
+ }
+
+ @Override
+ protected CompletableFuture<Void> doResolve(ITextViewer viewer, IProgressMonitor monitor) {
+ return CompletableFuture.runAsync(() -> {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ int refCount = project != null ? project.getReferencingProjects().length : 0;
+ super.setLabel(refCount + (refCount > 1 ? " references" : " reference"));
+ });
+ }
+
+}
diff --git a/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferencesCodeMiningProvider.java b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferencesCodeMiningProvider.java
new file mode 100644
index 00000000000..a1312fe23c0
--- /dev/null
+++ b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/codemining/ProjectReferencesCodeMiningProvider.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2017 Angelo ZERR.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Angelo Zerr <angelo.zerr@gmail.com> - [CodeMining] Provide extension point for CodeMining - Bug 528419
+ */
+package org.eclipse.ui.genericeditor.examples.dotproject.codemining;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.codemining.AbstractCodeMiningProvider;
+import org.eclipse.jface.text.codemining.ICodeMining;
+
+/**
+ * Project reference minings provider.
+ */
+public class ProjectReferencesCodeMiningProvider extends AbstractCodeMiningProvider {
+
+ @Override
+ public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
+ IProgressMonitor monitor) {
+ return CompletableFuture.supplyAsync(() -> {
+ IDocument document = viewer.getDocument();
+ List<ICodeMining> minings = new ArrayList<>();
+ int lineCount = document.getNumberOfLines();
+ for (int i = 0; i < lineCount; i++) {
+ // check if request was canceled.
+ monitor.isCanceled();
+ String line = getLineText(document, i).trim();
+ int startIndex = line.indexOf("<name>");
+ if (startIndex != -1) {
+ // It's the first name, we consider we are in <projectDescription></name>
+ startIndex += "<name>".length();
+ int endIndex = line.indexOf("</name>");
+ if (endIndex > startIndex) {
+ // Check if parent element is projectDescription
+ String projectName = line.substring(startIndex, endIndex);
+ if (projectName.length() > 0) {
+ try {
+ minings.add(new ProjectReferenceCodeMining(projectName, i, document, this));
+ } catch (BadLocationException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ // stop the compute of minings to avoid process other name like
+ // <buildCommand><name>
+ break;
+ }
+ }
+ return minings;
+ });
+ }
+
+ private static String getLineText(IDocument document, int line) {
+ try {
+ int lo = document.getLineOffset(line);
+ int ll = document.getLineLength(line);
+ return document.get(lo, ll);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}

Back to the top