From eb554cf97365d3b5a09e4de0af78917a42895751 Mon Sep 17 00:00:00 2001 From: Tobias Melcher Date: Mon, 6 Apr 2026 11:14:21 +0200 Subject: [PATCH] Introduce AbstractInlinedAnnotation#getMinings() to expose ICodeMining list Adds a new public API method `getMinings()` to `AbstractInlinedAnnotation` that provides read-only access to the list of `ICodeMining` instances associated with an inlined annotation. This API is needed to implement the unified diff feature via https://github.com/eclipse-platform/eclipse.platform/pull/2560 --- .../org.eclipse.jface.text/META-INF/MANIFEST.MF | 2 +- .../CodeMiningDocumentFooterAnnotation.java | 9 +++++++++ .../CodeMiningLineContentAnnotation.java | 9 +++++++++ .../codemining/CodeMiningLineHeaderAnnotation.java | 9 +++++++++ .../source/inlined/AbstractInlinedAnnotation.java | 14 ++++++++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.jface.text/META-INF/MANIFEST.MF b/bundles/org.eclipse.jface.text/META-INF/MANIFEST.MF index fe46a55bb3ce..653c7b05d9d0 100644 --- a/bundles/org.eclipse.jface.text/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.jface.text/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.jface.text -Bundle-Version: 3.30.100.qualifier +Bundle-Version: 3.31.0.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Export-Package: diff --git a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningDocumentFooterAnnotation.java b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningDocumentFooterAnnotation.java index 15edfd5121b8..dd19be3727f2 100644 --- a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningDocumentFooterAnnotation.java +++ b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningDocumentFooterAnnotation.java @@ -15,6 +15,7 @@ import static org.eclipse.jface.internal.text.codemining.CodeMiningLineHeaderAnnotation.hasAtLeastOneResolvedMiningNotEmpty; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -144,4 +145,12 @@ public Consumer getAction(MouseEvent e) { public boolean isInVisibleLines() { return super.isInVisibleLines(); } + + /** + * @since 3.31 + */ + @Override + public List getMinings() { + return Collections.unmodifiableList(fMinings); + } } diff --git a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineContentAnnotation.java b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineContentAnnotation.java index e01fab82a32f..5390806d1cd9 100644 --- a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineContentAnnotation.java +++ b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineContentAnnotation.java @@ -14,6 +14,7 @@ package org.eclipse.jface.internal.text.codemining; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -216,4 +217,12 @@ public boolean isInVisibleLines() { public final boolean isAfterPosition() { return afterPosition; } + + /** + * @since 3.31 + */ + @Override + public List getMinings() { + return Collections.unmodifiableList(fMinings); + } } diff --git a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineHeaderAnnotation.java b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineHeaderAnnotation.java index 906a4274ff7f..657e34cfd7f9 100644 --- a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineHeaderAnnotation.java +++ b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/codemining/CodeMiningLineHeaderAnnotation.java @@ -14,6 +14,7 @@ package org.eclipse.jface.internal.text.codemining; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; import java.util.stream.Stream; @@ -290,4 +291,12 @@ public Consumer getAction(MouseEvent e) { public boolean isInVisibleLines() { return super.isInVisibleLines(); } + + /** + * @since 3.31 + */ + @Override + public List getMinings() { + return Collections.unmodifiableList(fMinings); + } } diff --git a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java index 1dcff122ce16..0788a17cccfe 100644 --- a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java +++ b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java @@ -13,6 +13,8 @@ */ package org.eclipse.jface.text.source.inlined; +import java.util.Collections; +import java.util.List; import java.util.function.Consumer; import org.eclipse.swt.SWT; @@ -26,6 +28,7 @@ import org.eclipse.jface.text.ITextViewerExtension5; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.Region; +import org.eclipse.jface.text.codemining.ICodeMining; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.projection.ProjectionViewer; @@ -300,6 +303,17 @@ void setLocation(int x, int y) { this.fY= y; } + /** + * Returns the list of code minings associated with this annotation, or an empty list if this + * annotation has no associated minings. + * + * @return an unmodifiable list of code minings, never null + * @since 3.31 + */ + public List getMinings() { + return Collections.emptyList(); + } + /** * Returns true if the point specified by the arguments is inside the annotation * specified by the receiver, and false otherwise.