Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Läubrich2021-01-29 10:30:09 +0000
committerMickael Istria2021-01-31 17:23:47 +0000
commit013925a7e22618bef7ed8e968ee4a935d8a61d68 (patch)
tree4f9385fe05d399f3c163e370ce0f8cd987f829b2
parent81ce03674338571701849d494577cf55101c26b2 (diff)
downloadeclipse.platform.text-013925a7e22618bef7ed8e968ee4a935d8a61d68.tar.gz
eclipse.platform.text-013925a7e22618bef7ed8e968ee4a935d8a61d68.tar.xz
eclipse.platform.text-013925a7e22618bef7ed8e968ee4a935d8a61d68.zip
Bug 570727 - [codemining] Codeminings computed multiple timesI20210131-1800
if the same CodminingReconciler is added multiple times (e.g. for different content-type, from different plugins for the same content type) the codeminings are calculated for every change multiple times. To fix this a check is added that the reconcilingstrategy is only installed once for a given viewer. Change-Id: Id9609ac4453c4760b7a835fde1e39205e8ababb1 Signed-off-by: Christoph Läubrich <laeubi@laeubi-soft.de>
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningReconciler.java26
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningStrategy.java24
2 files changed, 30 insertions, 20 deletions
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningReconciler.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningReconciler.java
index afe0799b3b3..cf66a7d2824 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningReconciler.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningReconciler.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2017 Angelo ZERR.
+ * Copyright (c) 2017, 2021 Angelo ZERR.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -10,12 +10,14 @@
*
* Contributors:
* Angelo Zerr <angelo.zerr@gmail.com> - [CodeMining] Provide extension point for CodeMining - Bug 528419
+ * Christoph Läubrich - Bug 570727 - [codemining] Codeminings computed multiple times
*/
package org.eclipse.jface.text.codemining;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.reconciler.Reconciler;
+import org.eclipse.jface.text.source.ISourceViewerExtension5;
/**
* A reconciler which update code minings.
@@ -24,24 +26,32 @@ import org.eclipse.jface.text.reconciler.Reconciler;
*/
public class CodeMiningReconciler extends Reconciler {
- private CodeMiningStrategy fStrategy;
+ private static final String KEY= CodeMiningReconciler.class.getName();
public CodeMiningReconciler() {
super.setIsIncrementalReconciler(false);
- fStrategy= new CodeMiningStrategy();
- this.setReconcilingStrategy(fStrategy, IDocument.DEFAULT_CONTENT_TYPE);
+ this.setReconcilingStrategy(new CodeMiningStrategy(() -> getTextViewer()), IDocument.DEFAULT_CONTENT_TYPE);
}
@Override
public void install(ITextViewer textViewer) {
- super.install(textViewer);
- fStrategy.install(textViewer);
+ if (mustInstall(textViewer)) {
+ super.install(textViewer);
+ textViewer.getTextWidget().setData(KEY, this);
+ }
}
@Override
public void uninstall() {
- super.uninstall();
- fStrategy.uninstall();
+ ITextViewer viewer= getTextViewer();
+ if (viewer != null && viewer.getTextWidget().getData(KEY) == this) {
+ super.uninstall();
+ viewer.getTextWidget().setData(KEY, null);
+ }
}
+
+ private static boolean mustInstall(ITextViewer textViewer) {
+ return textViewer instanceof ISourceViewerExtension5 && textViewer.getTextWidget().getData(KEY) == null;
+ }
}
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningStrategy.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningStrategy.java
index 50290aa106f..be2e49bdc98 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningStrategy.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/codemining/CodeMiningStrategy.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2017 Angelo ZERR.
+ * Copyright (c) 2017, 2021 Angelo ZERR.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -10,9 +10,12 @@
*
* Contributors:
* Angelo Zerr <angelo.zerr@gmail.com> - [CodeMining] Provide extension point for CodeMining - Bug 528419
+ * Christoph Läubrich - Bug 570727 - [codemining] Codeminings computed multiple times
*/
package org.eclipse.jface.text.codemining;
+import java.util.function.Supplier;
+
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
@@ -30,14 +33,14 @@ import org.eclipse.jface.text.source.ISourceViewerExtension5;
*/
class CodeMiningStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension {
- private ISourceViewerExtension5 fViewer;
- public void install(ITextViewer viewer) {
- if (viewer instanceof ISourceViewerExtension5) {
- fViewer= (ISourceViewerExtension5) viewer;
- }
+ private Supplier<ITextViewer> fViewerSupplier;
+
+ public CodeMiningStrategy(Supplier<ITextViewer> viewerSupplier) {
+ fViewerSupplier= viewerSupplier;
}
+
@Override
public void initialReconcile() {
// Do nothing
@@ -48,15 +51,12 @@ class CodeMiningStrategy implements IReconcilingStrategy, IReconcilingStrategyEx
@Override
public void reconcile(IRegion partition) {
- if (fViewer != null) {
- fViewer.updateCodeMinings();
+ ITextViewer viewer= fViewerSupplier.get();
+ if (viewer instanceof ISourceViewerExtension5) {
+ ((ISourceViewerExtension5) viewer).updateCodeMinings();
}
}
- public void uninstall() {
- fViewer= null;
- }
-
@Override
public void setProgressMonitor(IProgressMonitor monitor) {
// Do nothing

Back to the top