You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ak...@apache.org on 2022/05/02 06:58:22 UTC
[netbeans] branch master updated: JEP 413: External Snippets and Snippet Attributes Support (#3498)
This is an automated email from the ASF dual-hosted git repository.
akhileshsingh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 59785240fa JEP 413: External Snippets and Snippet Attributes Support (#3498)
59785240fa is described below
commit 59785240fa47b7d78335019d611f12ae7620b08c
Author: Sandeep Mishra <72...@users.noreply.github.com>
AuthorDate: Mon May 2 12:28:15 2022 +0530
JEP 413: External Snippets and Snippet Attributes Support (#3498)
* Added external snippet, snippet attributes, and copy snippet support
Co-authored-by: singhs-akhilesh <ak...@oracle.com>
---
.../editor/completion/DocumentationScrollPane.java | 74 +++++++++-
.../modules/editor/completion/HTMLDocView.java | 7 +-
.../modules/java/editor/javadoc/TagRegistery.java | 2 +-
...adocsnippet_HighlightAndReplace_cornercase.pass | 5 +-
...snippet_NestedRegion_Highlight_And_replace.pass | 5 +-
...ippet_NestedRegion_ReplaceAnnotation_Regex.pass | 5 +-
...t_NestedRegion_ReplaceAnnotation_Substring.pass | 5 +-
...adocsnippet_Region_ReplaceAnnotation_Regex.pass | 5 +-
...t_Region_ReplaceAnnotation_RegexInnComment.pass | 5 +-
...SingleLine_MultipleReplaceAnnotation_Regex.pass | 5 +-
...leLine_MultipleReplaceAnnotation_Substring.pass | 5 +-
...leLine_ReplaceAnnotation_Regex_DoubleQuote.pass | 5 +-
.../javadocsnippet_SingleLine_Replace_Regex.pass | 5 +-
...javadocsnippet_SingleLine_Replace_RegexDot.pass | 5 +-
...docsnippet_SingleLine_Replace_RegexDotStar.pass | 5 +-
...avadocsnippet_SingleLine_Replace_Substring.pass | 5 +-
.../javadocsnippet_TestError_HighlightTag.pass | 65 +++++----
.../javadocsnippet_TestError_NoRegionToEnd.pass | 5 +-
.../javadocsnippet_TestError_ReplaceTag.pass | 55 ++++---
.../javadocsnippet_TestError_UnpairedRegion.pass | 20 ++-
.../javadocsnippet_highlightRecord.pass | 5 +-
...et_highlightTagRegexWithAllCharacterChange.pass | 5 +-
...ightTagRegexWithAllCharacterChangeUsingDot.pass | 5 +-
...ippet_highlightTagSubstringApplyToNextLine.pass | 5 +-
...ngMultipleSnippetTagInOneJavaDocWithRegion.pass | 5 +-
...javadocsnippet_highlightUsingNestedRegions.pass | 5 +-
.../javadocsnippet_highlightUsingRegex.pass | 5 +-
..._highlightUsingRegionsEndedWithDoubleColon.pass | 5 +-
.../javadocsnippet_highlightUsingSubstring.pass | 5 +-
...docsnippet_highlightUsingSubstringAndRegex.pass | 5 +-
...nippet_highlightUsingSubstringRegexAndType.pass | 5 +-
...ass => javadocsnippet_highlight_markuptag.pass} | 3 +-
.../javadocsnippet_noMarkupTagPresent.pass | 5 +-
.../modules/editor/java/GoToSupportTest.java | 148 +------------------
.../modules/java/source/builder/TreeFactory.java | 9 ++
.../transform/ImmutableDocTreeTranslator.java | 16 +-
.../api/java/source/ui/ElementJavadoc.java | 161 +++++++++++++++------
.../java/source/ui/snippet/MarkupTagProcessor.java | 7 +-
.../source/ui/snippet/SnippetTagCommentParser.java | 10 +-
39 files changed, 395 insertions(+), 312 deletions(-)
diff --git a/ide/editor.completion/src/org/netbeans/modules/editor/completion/DocumentationScrollPane.java b/ide/editor.completion/src/org/netbeans/modules/editor/completion/DocumentationScrollPane.java
index aa0e40ee84..33980b5003 100644
--- a/ide/editor.completion/src/org/netbeans/modules/editor/completion/DocumentationScrollPane.java
+++ b/ide/editor.completion/src/org/netbeans/modules/editor/completion/DocumentationScrollPane.java
@@ -21,6 +21,8 @@
package org.netbeans.modules.editor.completion;
import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
@@ -34,11 +36,15 @@ import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.plaf.TextUI;
+import javax.swing.text.BadLocationException;
import javax.swing.text.Caret;
+import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter;
import javax.swing.text.Document;
import javax.swing.text.EditorKit;
+import javax.swing.text.Element;
import javax.swing.text.JTextComponent;
import javax.swing.text.Keymap;
+import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import org.netbeans.editor.*;
@@ -47,6 +53,7 @@ import org.netbeans.spi.editor.completion.CompletionDocumentation;
import org.openide.awt.HtmlBrowser;
import org.openide.awt.StatusDisplayer;
+import org.openide.util.Exceptions;
import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
@@ -62,7 +69,7 @@ public class DocumentationScrollPane extends JScrollPane {
private static final String FORWARD = "org/netbeans/modules/editor/completion/resources/forward.png"; //NOI18N
private static final String GOTO_SOURCE = "org/netbeans/modules/editor/completion/resources/open_source_in_editor.png"; //NOI18N
private static final String SHOW_WEB = "org/netbeans/modules/editor/completion/resources/open_in_external_browser.png"; //NOI18N
-
+
private static final String JAVADOC_ESCAPE = "javadoc-escape"; //NOI18N
private static final String JAVADOC_BACK = "javadoc-back"; //NOI18N
private static final String JAVADOC_FORWARD = "javadoc-forward"; //NOI18N
@@ -118,7 +125,7 @@ public class DocumentationScrollPane extends JScrollPane {
}
view.addHyperlinkListener(new HyperlinkAction());
setViewportView(view);
-
+
installTitleComponent();
installKeybindings(editorComponent);
this.editorComponent = editorComponent;
@@ -451,8 +458,26 @@ public class DocumentationScrollPane extends JScrollPane {
private class HyperlinkAction implements HyperlinkListener {
+ @Override
public void hyperlinkUpdate(HyperlinkEvent e) {
- if (e != null && HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
+ if (e != null && e.getEventType() == HyperlinkEvent.EventType.ACTIVATED && e.getDescription().startsWith("copy.snippet")) {
+ Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+ String snippetCount = e.getDescription().replaceAll("[^0-9]", "");
+ HTMLDocument HtmlDoc = (HTMLDocument) e.getSourceElement().getDocument();
+ HTMLDocView source = (HTMLDocView) e.getSource();
+ source.getText();
+ Element snippetElement = HtmlDoc.getElement("snippet" + snippetCount);
+ StringBuilder text = new StringBuilder();
+ getTextToCopy(HtmlDoc, text, snippetElement);
+ handleTextToCopy(HtmlDoc, snippetElement, text);
+ systemClipboard.setContents(new StringSelection(text.toString()), null);
+ view.getHighlighter().removeAllHighlights();
+ try {
+ view.getHighlighter().addHighlight(e.getSourceElement().getStartOffset(), e.getSourceElement().getEndOffset(), new DefaultHighlightPainter(Color.GRAY));
+ } catch (BadLocationException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ } else if (e != null && HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
final String desc = e.getDescription();
if (desc != null) {
RP.post(new Runnable() {
@@ -470,7 +495,48 @@ public class DocumentationScrollPane extends JScrollPane {
}
}
});
- }
+ }
+ }
+ }
+
+ private void handleTextToCopy(HTMLDocument HtmlDoc, Element snippetElement, StringBuilder text) {
+ HTMLDocument.Iterator it = HtmlDoc.getIterator(HTML.Tag.A);
+ int startOffset = snippetElement.getStartOffset();
+ int endOffset = snippetElement.getEndOffset();
+ int count = 0;
+ while (it.isValid()) {
+ int startOffset1 = it.getStartOffset();
+ int endOffset1 = it.getEndOffset();
+ try {
+ String aTagText = HtmlDoc.getText(startOffset1, endOffset1 - startOffset1);
+ if (startOffset1 > startOffset && endOffset1 < endOffset
+ && aTagText.length() == 1 && Character.isWhitespace(aTagText.charAt(0))) {
+ text.deleteCharAt(startOffset1 - startOffset - count);
+ count++;
+ }
+ } catch (BadLocationException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ it.next();
+ }
+ text.delete(0, text.indexOf("\n") + 1); //removing first line of div i.e. "Copy"
+ }
+
+ private void getTextToCopy(HTMLDocument HtmlDoc, StringBuilder sb, Element snippetElement) {
+ int elementCount = snippetElement.getElementCount();
+ if (elementCount == 0) {
+ int startOffset = snippetElement.getStartOffset();
+ int endOffset = snippetElement.getEndOffset();
+ try {
+ sb.append(HtmlDoc.getText(startOffset, endOffset - startOffset));
+ } catch (BadLocationException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ return;
+ }
+ for (int i = 0; i < elementCount; i++) {
+ Element element = snippetElement.getElement(i);
+ getTextToCopy(HtmlDoc, sb, element);
}
}
}
diff --git a/ide/editor.completion/src/org/netbeans/modules/editor/completion/HTMLDocView.java b/ide/editor.completion/src/org/netbeans/modules/editor/completion/HTMLDocView.java
index 09342b982f..19e6dc2321 100644
--- a/ide/editor.completion/src/org/netbeans/modules/editor/completion/HTMLDocView.java
+++ b/ide/editor.completion/src/org/netbeans/modules/editor/completion/HTMLDocView.java
@@ -65,7 +65,6 @@ public class HTMLDocView extends JEditorPane {
//add listeners for selection support
addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
- getHighlighter().removeAllHighlights();
}
public void mousePressed(MouseEvent e) {
getHighlighter().removeAllHighlights();
@@ -77,7 +76,11 @@ public class HTMLDocView extends JEditorPane {
}
}
- public void mouseReleased(MouseEvent e) {}
+ public void mouseReleased(MouseEvent e) {
+ if(getSelectedText() == null){
+ getHighlighter().removeAllHighlights();
+ }
+ }
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
});
diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/TagRegistery.java b/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/TagRegistery.java
index 291308c243..5b4f67fd0c 100644
--- a/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/TagRegistery.java
+++ b/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/TagRegistery.java
@@ -100,7 +100,7 @@ final class TagRegistery {
addTag("@uses", false, EnumSet.of(ElementKind.MODULE));
addTag("@code", true, ALL_KINDS);
- addTag("@snippet", true, ALL_KINDS);
+ addTag("@snippet", true, ALL_KINDS);
addTag("@docRoot", true, ALL_KINDS);
// just in empty tag description
addTag("@inheritDoc", true, EnumSet.of(ElementKind.METHOD));
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass
index 3329513e12..712977fa4f 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_HighlightAndReplace_cornercase.pass
@@ -1,5 +1,6 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testHighlightAndReplace_cornercase</b>()</pre><p><pre><code> public static void \bmain\b(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testHighlightAndReplace_cornercase</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void \bmain\b(String... args) {
S<b>y</b><b>s</b>replace<b>.</b><b>o</b><b>u</b><b>t</b>.println("tests");
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass
index 25264427c1..e746d689da 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_Highlight_And_replace.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testNestedRegion_Highlight_And_replace</b>()</pre><p><pre><code> public static void \bmain\b(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testNestedRegion_Highlight_And_replace</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void \bmain\b(String... args) {
for (var <i><b>a</b></i><i><b>r</b></i><i><b>g</b></i> : <i><b>a</b></i><i><b>r</b></i><i><b>g</b></i>s) {
if (!<b>a</b><b>r</b><b>g</b>.isBl<b>a</b><b>r</b><b>g</b>k()) {
System.<b><b>a</b></b><b><b>r</b></b><b><b>g</b></b>.println("<b><b>a</b></b><b><b>r</b></b><b><b>g</b></b>");
@@ -13,4 +14,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass
index 56cebce286..c40df372f8 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Regex.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testNestedRegion_ReplaceAnnotation_Regex</b>()</pre><p><pre><code> class HelloWorld<span style="background-color:yellow;">1</span> {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testNestedRegion_ReplaceAnnotation_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld<span style="background-color:yellow;">1</span> {
public static void main(String... args) {
UPPERystem.out.println(num);
UPPERystem.out.println(num);
@@ -7,4 +8,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass
index cd65829929..5e146608a3 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_NestedRegion_ReplaceAnnotation_Substring.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testNestedRegion_ReplaceAnnotation_Substring</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testNestedRegion_ReplaceAnnotation_Substring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.err.println("print");
System.err.println("print" + "to-do");
@@ -7,4 +8,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass
index b47f032872..406ecd1cce 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_Regex.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testRegion_ReplaceAnnotation_Regex</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testRegion_ReplaceAnnotation_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.println("...replace..."); //to-do
System.out.println("...replace..."
@@ -6,4 +7,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass
index a355e5c86b..78df225937 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_Region_ReplaceAnnotation_RegexInnComment.pass
@@ -1,8 +1,9 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testRegion_ReplaceAnnotation_RegexInnComment</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testRegion_ReplaceAnnotation_RegexInnComment</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.println("...replace..." + "Good morning"); //"...replace..."
System.out.println("Hello World!" + "...replace...");
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass
index d1fc76c975..21c971b351 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Regex.pass
@@ -1,7 +1,8 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_MultipleReplaceAnnotation_Regex</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_MultipleReplaceAnnotation_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.err.println(...replace...);
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass
index 2dfd28ecb2..ac9a23369e 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_MultipleReplaceAnnotation_Substring.pass
@@ -1,8 +1,9 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_MultipleReplaceAnnotation_Substring</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_MultipleReplaceAnnotation_Substring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.println("Hi World!" + "Hi Morning");
System.out.println("Hiiiiii World!" + "Hiiiiii Morning");
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass
index 62172d8e40..3f79d39d39 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_ReplaceAnnotation_Regex_DoubleQuote.pass
@@ -1,7 +1,8 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_ReplaceAnnotation_Regex_DoubleQuote</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_ReplaceAnnotation_Regex_DoubleQuote</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.println("...replace...");
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass
index 87c99b5e0f..a5dd54ba9f 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Regex.pass
@@ -1,7 +1,8 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_Regex</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_Regex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.println(...);
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass
index 83fdb207d6..84036ecce7 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDot.pass
@@ -1,7 +1,8 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_RegexDot</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_RegexDot</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
..........................................................................................................................................
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass
index 4e211ab417..1a57784635 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_RegexDotStar.pass
@@ -1,7 +1,8 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_RegexDotStar</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_RegexDotStar</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
......
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass
index 545bc84469..79366b1266 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_SingleLine_Replace_Substring.pass
@@ -1,7 +1,8 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_Substring</b>()</pre><p><pre><code> class HelloWorld {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>testSingleLine_Replace_Substring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.println("Hel-replace-d!");
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass
index 8f9a8ec3b8..f8a0fa69d3 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_HighlightTag.pass
@@ -1,43 +1,56 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInHighlightTag</b>()</pre><p><pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInHighlightTag</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+ <div id="snippet2" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet2">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+ <div id="snippet3" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet3">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+ <div id="snippet4" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet4">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
-</code></pre>
+ <div id="snippet5" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet5">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
-</code></pre>
+ <div id="snippet6" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet6">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
-</code></pre>
+ <div id="snippet7" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet7">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i></b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
-</code></pre>
+ <div id="snippet8" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet8">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i></b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i></b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
-</code></pre>
+ <div id="snippet9" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet9">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i></b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i></b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
-</code></pre>
+ <div id="snippet10" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet10">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i></b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>xyz</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
-</code></pre>
+ <div id="snippet11" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet11">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>xyz</b></i> for <sub>^</sub><b><i>highlight</b></i> tag mark up attribute <sub>^</sub><b><i>type</b></i>.<br>Valid values, such as bold, italic, or highlighted</span>
+</code></pre></div>
- <pre><code><span style="background-color:yellow;"> </span>class<span style="background-color:yellow;"> </span>HelloWorld<span style="background-color:yellow;"> </span>{
+ <div id="snippet12" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet12">Copy</a></div>
+<pre><code><span style="background-color:yellow;"> </span>class<span style="background-color:yellow;"> </span>HelloWorld<span style="background-color:yellow;"> </span>{
}
-</code></pre>
+</code></pre></div>
- <pre><code> class HelloWorld {
+ <div id="snippet13" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet13">Copy</a></div>
+<pre><code> class HelloWorld {
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass
index b1591dc581..3874175b80 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_NoRegionToEnd.pass
@@ -1,2 +1,3 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInNoRegionToEnd</b>()</pre><p><pre><code><span style="color:red;">error: snippet markup: no region to end @end <sub>^</sub><b><i>anonymous</b></i></span>
-</code></pre><p>
\ No newline at end of file
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInNoRegionToEnd</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: no region to end @end <sub>^</sub><b><i>anonymous</b></i></span>
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass
index eba20ddebe..173fb2afd7 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_ReplaceTag.pass
@@ -1,36 +1,47 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInReplaceTag</b>()</pre><p><pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInReplaceTag</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+ <div id="snippet2" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet2">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+ <div id="snippet3" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet3">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
-</code></pre>
+ <div id="snippet4" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet4">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
-</code></pre>
+ <div id="snippet5" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet5">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
-</code></pre>
+ <div id="snippet6" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet6">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>regex</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Missing <sub>^</sub><b><i>replace</b></i> tag attribute : <sub>^</sub><b><i>replacement</b></i></span>
-</code></pre>
+ <div id="snippet7" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet7">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Missing <sub>^</sub><b><i>replace</b></i> tag attribute : <sub>^</sub><b><i>replacement</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Missing <sub>^</sub><b><i>replace</b></i> tag attribute : <sub>^</sub><b><i>replacement</b></i></span>
-</code></pre>
+ <div id="snippet8" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet8">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Missing <sub>^</sub><b><i>replace</b></i> tag attribute : <sub>^</sub><b><i>replacement</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
-</code></pre>
+ <div id="snippet9" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet9">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: Invalid value <sub>^</sub><b><i>Blank</b></i> for <sub>^</sub><b><i>replace</b></i> tag mark up attribute <sub>^</sub><b><i>substring</b></i></span>
+</code></pre></div>
- <pre><code> interface Helloclass {
+ <div id="snippet10" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet10">Copy</a></div>
+<pre><code> interface Helloclass {
}
-</code></pre>
+</code></pre></div>
- <pre><code> class Hello {
+ <div id="snippet11" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet11">Copy</a></div>
+<pre><code> class Hello {
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass
index 6e2c011098..59b3db609f 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_TestError_UnpairedRegion.pass
@@ -1,11 +1,15 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInUnpairedRegion</b>()</pre><p><pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight anonymous</b></i></span>
-</code></pre>
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>errorsInUnpairedRegion</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight anonymous</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight rg1</b></i></span>
-</code></pre>
+ <div id="snippet2" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet2">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight rg1</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight rg2</b></i></span>
-</code></pre>
+ <div id="snippet3" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet3">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight rg2</b></i></span>
+</code></pre></div>
- <pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight rg1</b></i></span>
-</code></pre><p>
\ No newline at end of file
+ <div id="snippet4" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet4">Copy</a></div>
+<pre><code><span style="color:red;">error: snippet markup: unpaired region <b><i>highlight rg1</b></i></span>
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
index e2f92e03ee..ebeb164087 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
@@ -1,10 +1,11 @@
<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>private static void <b>method</b>(<a href='*1'>R</a> r)</pre><p>A simple program.
<code><a href='*2'>System.out</a></code>
- <pre><code> class HelloWorld {
+ <div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.<b>p</b><b>r</b><b>i</b><b>n</b><b>t</b><b>l</b><b>n</b>("Hello World!");
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass
index 67b9a4886f..a42f299868 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChange.pass
@@ -1,6 +1,7 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightTagRegexWithAllCharacterChange</b>()</pre><p><pre><code> public static void main(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightTagRegexWithAllCharacterChange</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args) {
<b> </b><b> </b><b> </b><b> </b><b> </b><b>S</b><b>y</b><b>s</b><b>t</b><b>e</b><b>m</b><b>.</b><b>o</b><b>u</b><b>t</b><b>.</b><b>p</b><b>r</b><b>i</b><b>n</b><b>t</b><b>l</b><b>n</b><b>(</b><b>"</b><b>a</b><b>r</b><b>g</b><b>s</b><b>"</b><b>)</b><b>;</b><b> </b><b>/</b><b>/</b><b> </b><b>t</b><b>o</b><b>-</b><b>d</b><b>o</b><b> </b><b>a</b><b>r</b><b>g</b><b>s</b>
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass
index 1c646154c8..994db22393 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagRegexWithAllCharacterChangeUsingDot.pass
@@ -1,6 +1,7 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightTagRegexWithAllCharacterChangeUsingDot</b>()</pre><p><pre><code> public static void main(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightTagRegexWithAllCharacterChangeUsingDot</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args) {
<b> </b><b> </b><b> </b><b> </b><b> </b><b>S</b><b>y</b><b>s</b><b>t</b><b>e</b><b>m</b><b>.</b><b>o</b><b>u</b><b>t</b><b>.</b><b>p</b><b>r</b><b>i</b><b>n</b><b>t</b><b>l</b><b>n</b><b>(</b><b>"</b><b>a</b><b>r</b><b>g</b><b>s</b><b>"</b><b>)</b><b>;</b><b> </b><b>/</b><b>/</b><b> </b><b>t</b><b>o</b><b>-</b><b>d</b><b>o</b><b> </b><b>a</b><b>r</b><b>g</b><b>s</b>
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass
index cb9be01146..9b05d647a3 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightTagSubstringApplyToNextLine.pass
@@ -1,6 +1,7 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightTagSubstringApplyToNextLine</b>()</pre><p><pre><code> public static void main(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightTagSubstringApplyToNextLine</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args) {
System.out.println("<b>a</b><b>r</b><b>g</b><b>s</b>"); // to-do <b>a</b><b>r</b><b>g</b><b>s</b>
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass
index 3151555e57..83732f2b1f 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingMultipleSnippetTagInOneJavaDocWithRegion.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstringRegexAndType</b>()</pre><p><pre><code> public static void main(String... substring) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstringRegexAndType</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... substring) {
for (var regex : substring) {
if (!arg.isBlank()) {
System.out.println("<i>i</i><i>t</i><i>a</i><i>l</i><i>i</i><i>c</i>");
@@ -20,4 +21,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass
index 198d556abe..0b642aa0f5 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingNestedRegions.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingNestedRegions</b>()</pre><p><pre><code> public static void \bmain\b(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingNestedRegions</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void \bmain\b(String... args) {
for (var <b><i>a</i></b><b><i>r</i></b><b><i>g</i></b> : <b><i>a</i></b><b><i>r</i></b><b><i>g</i></b>s) {
if (!<b>a</b><b>r</b><b>g</b>.isBl<b>a</b><b>r</b><b>g</b>k()) {
@@ -11,4 +12,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass
index 5871306357..7c96bd0913 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegex.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingRegex</b>()</pre><p><pre><code> public static void main(String... args1) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingRegex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args1) {
for (var arg : args<b>1</b>) {
if (!<b>a</b><b>r</b><b>g</b>.isBlankarg()) {
System.<b>o</b><b>u</b><b>t</b>.println(args1);
@@ -6,4 +7,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass
index 4f35b1235d..faac4e2c66 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingRegionsEndedWithDoubleColon.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingRegionsEndedWithDoubleColon</b>()</pre><p><pre><code> public static void \bmain\b(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingRegionsEndedWithDoubleColon</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void \bmain\b(String... args) {
for (var arg : args) {
if (!<span style="background-color:yellow;">a</span><span style="background-color:yellow;">r</span><span style="background-color:yellow;">g</span>.<b>i</b><b>s</b>Bl<span style="background-color:yellow;">a</span><span style="background-color:yellow;">r</span><span style="background-color:yellow;">g</span>k()) {
System.<span style="background-color:yellow;">a</span><span style="background-color:yellow;">r</span><span style="background-color:yellow;">g</span>.println("<span style="background-color:yellow;">a</span><span style="background-color:yellow;">r</span><span style="background-color:yellow;">g</span>");
@@ -10,4 +11,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass
index 7ebe758b32..7230e25d72 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstring.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstring</b>()</pre><p><pre><code> public static void main(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstring</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args) {
for (var arg : <b>a</b><b>r</b><b>g</b><b>s</b>) {
if (!<b>a</b><b>r</b><b>g</b>.isBlank<b>a</b><b>r</b><b>g</b>()) {
System.out.<b>p</b><b>r</b><b>i</b><b>n</b><b>t</b><b>l</b><b>n</b>(<b>a</b><b>r</b><b>g</b>);
@@ -6,4 +7,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass
index f3ce2ed3be..dea56f3efa 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringAndRegex.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstringAndRegex</b>()</pre><p><pre><code> public static void main(String... args1) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstringAndRegex</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args1) {
for (<b>v</b><b>a</b><b>r</b> arg : args<b>1</b>) {
if (!<b>a</b><b>r</b><b>g</b>.isBlankarg<b>(</b><b>)</b>) {
<b>S</b><b>y</b><b>s</b><b>t</b><b>e</b><b>m</b>.<b>o</b><b>u</b><b>t</b>.println("outs");
@@ -6,4 +7,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass
index 3151555e57..83732f2b1f 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightUsingSubstringRegexAndType.pass
@@ -1,4 +1,5 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstringRegexAndType</b>()</pre><p><pre><code> public static void main(String... substring) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>highlightUsingSubstringRegexAndType</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... substring) {
for (var regex : substring) {
if (!arg.isBlank()) {
System.out.println("<i>i</i><i>t</i><i>a</i><i>l</i><i>i</i><i>c</i>");
@@ -20,4 +21,4 @@
}
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlight_markuptag.pass
similarity index 94%
copy from java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
copy to java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlight_markuptag.pass
index e2f92e03ee..2e5d769fb5 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlightRecord.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_highlight_markuptag.pass
@@ -1,10 +1,9 @@
<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>private static void <b>method</b>(<a href='*1'>R</a> r)</pre><p>A simple program.
-
<code><a href='*2'>System.out</a></code>
<pre><code> class HelloWorld {
public static void main(String... args) {
System.out.<b>p</b><b>r</b><b>i</b><b>n</b><b>t</b><b>l</b><b>n</b>("Hello World!");
- }
+ }
}
</code></pre><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass
index 8e64c58d70..82b3e07aea 100644
--- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass
+++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/editor/java/GoToSupportTest/javadocsnippet_noMarkupTagPresent.pass
@@ -1,5 +1,6 @@
-<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>noMarkupTagPresent</b>()</pre><p><pre><code> public static void main(String... args) {
+<html><body><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>public void <b>noMarkupTagPresent</b>()</pre><p><div id="snippet1" style="font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px"><div align=right><a href="copy.snippet1">Copy</a></div>
+<pre><code> public static void main(String... args) {
System.out.println("args"); // highligh substring = "args"
}
-</code></pre><p>
\ No newline at end of file
+</code></pre></div><p>
\ No newline at end of file
diff --git a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
index 43f1d8e50c..8f66d208b1 100644
--- a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
+++ b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
@@ -46,6 +46,7 @@ import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.java.source.SourceUtilsTest;
import org.netbeans.api.java.source.SourceUtilsTestUtil;
import org.netbeans.api.java.source.SourceUtilsTestUtil2;
import org.netbeans.api.java.source.Task;
@@ -278,31 +279,6 @@ public class GoToSupportTest extends NbTestCase {
}, true);
}
- public void testTooltipForInnerClasses() throws Exception {
- String code = "package test; public class Test {enum EE {A} class CC {} EE a; CC c;}";
- int[] offset = new int[] {82, 88};
- String[] golden = new String[] {
- "<html><body><base href=\"file:" + getWorkDirPath() + "/src/test/Test.java\"></base><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>static enum <b>EE</b><br>extends <a href='*1'>Enum</a><<a href='*2'>EE</a>></pre>",
- "<html><body><base href=\"file:" + getWorkDirPath() + "/src/test/Test.java\"></base><font size='+0'><b><a href='*0'>test.​Test</a></b></font><pre>class <b>CC</b><br>extends <a href='*1'>Object</a></pre>",
- };
- assertEquals(offset.length, golden.length);
- for (int cntr = 0; cntr < offset.length; cntr++) {
- String tooltip = performTest(code, offset[cntr] - 24, new OrigUiUtilsCaller() {
- public void open(FileObject fo, int pos) {
- fail("Should not be called.");
- }
- public void beep() {
- fail("Should not be called.");
- }
- public void open(ClasspathInfo info, Element el) {
- fail("Should not be called.");
- }
- }, true);
-
- assertEquals(golden[cntr], tooltip);
- }
- }
-
public void testGoToIntoAnnonymous() throws Exception {
final boolean[] wasCalled = new boolean[1];
@@ -1857,118 +1833,6 @@ public class GoToSupportTest extends NbTestCase {
performTest("ReplaceTag", 6926, null, "javadocsnippet_HighlightAndReplace_cornercase.pass", this.sourceLevel);
}
- public void testLinkTag() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 558, null, "javadocsnippet_LinkTag.pass", this.sourceLevel);
-
- }
-
- public void testLinkTag_With_RegexAndRegion() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 999, null, "javadocsnippet_LinkTag_With_RegexAndRegion.pass", this.sourceLevel);
-
- }
-
- public void testLinkTag_AppliesToNextLine() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 1350, null, "javadocsnippet_LinkTag_AppliesToNextLine.pass", this.sourceLevel);
-
- }
-
- public void testLink_MultipleTag_OnSameLine() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 1737, null, "javadocsnippet_Link_MultipleTag_OnSameLine.pass", this.sourceLevel);
- }
-
- public void testLinkTag_With_RegionAttribute() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 2420, null, "javadocsnippet_LinkTag_With_RegionAttribute.pass", this.sourceLevel);
- }
-
- public void testLinkTag_Ref_ToThisClass_UsingHash() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 2752, null, "javadocsnippet_LinkTag_Ref_ToThisClass_UsingHash.pass", this.sourceLevel);
- }
-
- public void testLinkTag_FieldRef_ToThisClass_UsingHash() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 3074, null, "javadocsnippet_LinkTag_FieldRef_ToThisClass_UsingHash.pass", this.sourceLevel);
- }
-
- public void testLinkTag_AlongWith_HighlightTag() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 3492, null, "javadocsnippet_LinkTag_AlongWith_HighlightTag.pass", this.sourceLevel);
- }
-
- public void testLinkTag_AlongWith_ReplaceTag() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 3895, null, "javadocsnippet_LinkTag_AlongWith_ReplaceTag.pass", this.sourceLevel);
- }
-
- public void testLinkTag_AlongWith_SubStringAndReplaceTag() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 4353, null, "javadocsnippet_LinkTag_AlongWith_SubStringAndReplaceTag.pass", this.sourceLevel);
- }
-
- public void testLinkTag_EmptyReplacementValue() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("LinkTag", 4758, null, "javadocsnippet_LinkTag_EmptyReplacementValue.pass", this.sourceLevel);
- }
public void testError_HighlightTag() throws Exception {
if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
return;
@@ -1989,16 +1853,6 @@ public class GoToSupportTest extends NbTestCase {
performTest("Errors", 2613, null, "javadocsnippet_TestError_ReplaceTag.pass", this.sourceLevel);
}
- public void testError_LinkTag() throws Exception {
- if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
- return;
- }
- this.sourceLevel = getLatestSourceVersion();
- EXTRA_OPTIONS.add("--enable-preview");
- JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true;
- performTest("Errors", 4069, null, "javadocsnippet_TestError_LinkTag.pass", this.sourceLevel);
- }
-
public void testError_UnpairedRegion() throws Exception {
if (!TreeShims.isJDKVersionRelease18_Or_Above()) {
return;
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java b/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
index de5f566b73..568e8952f5 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
@@ -61,6 +61,7 @@ import com.sun.tools.javac.code.TypeTag;
import com.sun.tools.javac.jvm.ClassReader;
import com.sun.tools.javac.model.JavacElements;
import com.sun.tools.javac.model.JavacTypes;
+import com.sun.tools.javac.tree.DCTree;
import com.sun.tools.javac.tree.DocTreeMaker;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.JCTree.*;
@@ -1774,6 +1775,14 @@ public class TreeFactory {
return docMake.at(NOPOS).newDocCommentTree(fullBody, tags);
}
+ public DocTree Snippet(List<? extends DocTree> attributes, TextTree text){
+ try {
+ return (DocTree) docMake.getClass().getMethod("newSnippetTree", List.class, TextTree.class).invoke(docMake.at(NOPOS), attributes, text);
+ } catch (Throwable t) {
+ throw throwAny(t);
+ }
+ }
+
public DocCommentTree DocComment(List<? extends DocTree> firstSentence, List<? extends DocTree> body, List<? extends DocTree> tags) {
final ArrayList<DocTree> fullBody = new ArrayList<>(firstSentence.size() + body.size());
fullBody.addAll(firstSentence);
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableDocTreeTranslator.java b/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableDocTreeTranslator.java
index 991142f359..9e3fd125ad 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableDocTreeTranslator.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableDocTreeTranslator.java
@@ -61,6 +61,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.netbeans.api.java.source.WorkingCopy;
+import org.netbeans.modules.java.source.TreeShims;
/**
*
@@ -77,7 +78,9 @@ public class ImmutableDocTreeTranslator extends ImmutableTreeTranslator implemen
public DocTree translate(DocTree tree) {
if (tree == null) {
return null;
- } else {
+ } else if (tree.getKind().name().equals("SNIPPET")){
+ return rewriteSnippetChildren(tree);
+ }else {
DocTree t = tree.accept(this, null);
if (tree2Tag != null && tree != t) {
tree2Tag.put(t, tree2Tag.get(tree));
@@ -370,7 +373,18 @@ public class ImmutableDocTreeTranslator extends ImmutableTreeTranslator implemen
value = make.Version(body);
}
return value;
+ }
+
+ protected final DocTree rewriteSnippetChildren(DocTree tree) {
+ DocTree value = tree;
+ List<? extends DocTree> snippetTreeAttributes = translateDoc(TreeShims.getSnippetDocTreeAttributes(tree));
+ TextTree snippetTreeText = (TextTree) translate(TreeShims.getSnippetDocTreeText(tree));
+ if((snippetTreeAttributes != TreeShims.getSnippetDocTreeAttributes(tree)) || (snippetTreeText != TreeShims.getSnippetDocTreeText(tree))){
+ value=make.Snippet(snippetTreeAttributes, snippetTreeText);
+ }
+ return value;
}
+
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="VisitMethods">
diff --git a/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java b/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java
index 1a1b2521a7..d79aba7e38 100644
--- a/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java
+++ b/java/java.sourceui/src/org/netbeans/api/java/source/ui/ElementJavadoc.java
@@ -118,6 +118,7 @@ import javax.tools.ToolProvider;
import com.sun.source.tree.ImportTree;
import com.sun.source.tree.Tree;
import com.sun.source.util.JavacTask;
+import com.sun.tools.javac.code.ClassFinder;
import org.netbeans.api.java.source.ui.snippet.MarkupTagProcessor;
/** Utility class for viewing Javadoc comments as HTML.
@@ -175,6 +176,7 @@ public class ElementJavadoc {
static{
MARKUPTAG_MANDATORY_ATTRIBUTE.put("link", "target");
MARKUPTAG_MANDATORY_ATTRIBUTE.put("replace", "replacement");
+ MARKUPTAG_MANDATORY_ATTRIBUTE.put("start", "region");
}
/** Creates an object describing the Javadoc of given element. The object
@@ -1224,6 +1226,7 @@ public class ElementJavadoc {
private StringBuilder inlineTags(List<? extends DocTree> tags, TreePath docPath, DocCommentTree doc, DocTrees trees, CharSequence inherited) {
StringBuilder sb = new StringBuilder();
+ Integer snippetCount=0;
for (DocTree tag : tags) {
switch (tag.getKind()) {
case REFERENCE:
@@ -1318,41 +1321,106 @@ public class ElementJavadoc {
sb.append(ttag.getBody());
break;
default:
- if (tag.getKind().toString().equals("SNIPPET")) {
- processDocSnippet(sb, tag);
+ if (tag.getKind().toString().equals("SNIPPET")) {
+ snippetCount++;
+ processDocSnippet(sb, tag, snippetCount,docPath, doc, trees);
}
}
}
return sb;
}
- private void processDocSnippet(StringBuilder sb, DocTree tag) {
+ private void processDocSnippet(StringBuilder sb, DocTree tag, Integer snippetCount, TreePath docPath,DocCommentTree doc, DocTrees trees) {
+ sb.append("<div id=\"snippet").append(snippetCount).append("\" style=\"font-size: 10px; border: 1px solid black; margin-top: 2px; margin-bottom: 2px\">"); //NOI18N
+ sb.append("<div align=right>" //NOI18N
+ + "<a href=\"copy.snippet").append(snippetCount).append("\">Copy</a>" //NOI18N
+ + "</div>\n"); //NOI18N
sb.append("<pre>"); //NOI18N
sb.append("<code>"); //NOI18N
+
+ ClassPath classPath = this.cpInfo.getClassPath(ClasspathInfo.PathKind.SOURCE);
+ String pckgName = docPath.getCompilationUnit().getPackageName().toString();
+
+ List<DocTree> attributes = (List<DocTree>) TreeShims.getSnippetDocTreeAttributes(tag);
+
+ String fileName = null;
+ String regionName = null;
+ String lang = null;
+
+ boolean isExternalSnippet = false;
+
+ for(DocTree att : attributes){
+ switch (((AttributeTree)att).getName().toString()) {
+ case "file":
+ fileName = ((AttributeTree)att).getValue().get(0).toString();
+ isExternalSnippet = true;
+ break;
+ case "class":
+ fileName = ((AttributeTree)att).getValue().get(0).toString() + ".java";
+ isExternalSnippet = true;
+ lang="java";
+ break;
+ case "region":
+ regionName = ((AttributeTree)att).getValue().get(0).toString();
+ break;
+ case "lang":
+ lang = ((AttributeTree)att).getValue().get(0).toString();
+ break;
+ }
+ }
+
+
+ if(lang == null && fileName!=null){
+ if(fileName.endsWith(".java")){
+ lang="java";
+ }else if(fileName.endsWith(".properties")){
+ lang="properties";
+ }
+ }
- List<DocTree> attributes = TreeShims.getSnippetDocTreeAttributes(tag);
- TextTree text = TreeShims.getSnippetDocTreeText(tag);
- SnippetTagCommentParser parser = new SnippetTagCommentParser();
- List<SourceLineMeta> parseResult = parser.parse(text.getBody());
+ String text = null;
+ if (isExternalSnippet) {
+ pckgName = pckgName.replaceAll("\\.", "\\\\");
+ FileObject snippetFile = classPath.findResource(pckgName + "\\snippet-files\\" + fileName);
+ try {
+ text = snippetFile.asText();
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ } else {
+ text = TreeShims.getSnippetDocTreeText(tag).toString();
+ }
+
+ String langCommentPattern;
+ if(lang != null && lang.equals("properties")){
+ langCommentPattern = "#";
+ }else{
+ langCommentPattern = "\\Q//\\E";
+ }
+
+ SnippetTagCommentParser parser = new SnippetTagCommentParser(langCommentPattern);
+ List<SourceLineMeta> parseResult = parser.parse(text);
+
MarkupTagProcessor tagProcessor = new MarkupTagProcessor();
MarkupTagProcessor.ProcessedTags tags = tagProcessor.process(parseResult);
- applyTags(parseResult, tags, sb);
+ applyTags(parseResult, tags, sb, regionName);
sb.append("</code>"); //NOI18N
sb.append("</pre>"); //NOI18N
+ sb.append("</div>"); //NOI18N
}
- private void applyTags(List<SourceLineMeta> parseResult, MarkupTagProcessor.ProcessedTags tags, StringBuilder sb) {
-
+ private void applyTags(List<SourceLineMeta> parseResult, MarkupTagProcessor.ProcessedTags tags, StringBuilder sb, String regionName) {
+
if(!tags.getErrorList().isEmpty()){
reportError(tags.getErrorList(), sb);
return;
}
-
+
int lineCounter = 0;
for (SourceLineMeta fullLineInfo : parseResult) {
lineCounter++;
-
+
String codeLine = fullLineInfo.getSourceLineWithoutComment() != null ? fullLineInfo.getSourceLineWithoutComment() : fullLineInfo.getActualSourceLine();
List<SourceLineCharterMapperToHtmlTag> eachCharList = new LinkedList<>();
@@ -1360,29 +1428,38 @@ public class ElementJavadoc {
SourceLineCharterMapperToHtmlTag htmlCharMapper = new SourceLineCharterMapperToHtmlTag(new LinkedList<>(), codeLine.charAt(pos), new ArrayList<>());
eachCharList.add(htmlCharMapper);
}
-
+
List<MarkupTagProcessor.ApplicableMarkupTag> attributes = tags.getMarkUpTagLineMapper().get(lineCounter);
+ List<MarkupTagProcessor.Region> regions = tags.getRegionTagLineMapper().get(lineCounter);
- if (attributes != null) {
- for (MarkupTagProcessor.ApplicableMarkupTag attrib : attributes) {
- codeLine = applyTagsToHTML(codeLine, attrib.getAttributes(), attrib.getMarkupTagName(), sb, eachCharList);
- if(codeLine == null){//its error
- return;
- }
- }
+ boolean toAddCurrent = true;
+ if (regionName != null && regions != null) {
+ toAddCurrent = regions.stream().anyMatch(p -> p.getValue().equals(regionName));
+ } else if (regionName != null) {
+ toAddCurrent = false;
}
-
- for (SourceLineCharterMapperToHtmlTag charMapper : eachCharList) {
- for (String startTag : charMapper.getStartTag()) {
- sb.append(startTag);
+ if (toAddCurrent) {
+ if (attributes != null) {
+ for (MarkupTagProcessor.ApplicableMarkupTag attrib : attributes) {
+ codeLine = applyTagsToHTML(codeLine, attrib.getAttributes(), attrib.getMarkupTagName(), sb, eachCharList);
+ if (codeLine == null) {//its error
+ return;
+ }
+ }
}
- //replace html tag to equivalent plain text
- sb.append(charMapper.getSourceChar()=='<' ? "<" : charMapper.getSourceChar());
- for (String endTag : charMapper.getEndTag()) {
- sb.append(endTag);
+
+ for (SourceLineCharterMapperToHtmlTag charMapper : eachCharList) {
+ for (String startTag : charMapper.getStartTag()) {
+ sb.append(startTag);
+ }
+ //replace html tag to equivalent plain text
+ sb.append(charMapper.getSourceChar() == '<' ? "<" : charMapper.getSourceChar());
+ for (String endTag : charMapper.getEndTag()) {
+ sb.append(endTag);
+ }
}
+ sb.append("\n");
}
- sb.append("\n");
}
}
@@ -1400,11 +1477,9 @@ public class ElementJavadoc {
applyHighlightTag(codeLine, tagAction, htmlHighlightType, tagAttributes.get(tagAction), eachCharList);
break;
case "replace":
- //String replacement = tagAttributes.get("replacement") != null && !tagAttributes.get("replacement").trim().isEmpty() ? tagAttributes.get("replacement") : null;
codeLine = applyReplaceTag(codeLine, tagAction, tagAttributes.get("replacement"), tagAttributes.get(tagAction), eachCharList);
break;
case "link":
- //String linkTarget = tagAttributes.get("target") != null && !tagAttributes.get("target").trim().isEmpty() ? tagAttributes.get("target") : null;
applyLinkTag(codeLine, tagAction, tagAttributes.get("target"), tagAttributes.get(tagAction), eachCharList);
break;
default:
@@ -1426,6 +1501,8 @@ public class ElementJavadoc {
} else {
return true;
}
+ } else if(markupTagName.equals("start")){
+ return true;
} else if (!tagAttributes.containsKey(MARKUPTAG_MANDATORY_ATTRIBUTE.get(markupTagName))) {
// mandatory mark up tag not present
String error = String.format("error: snippet markup: Missing <sub>^</sub><b><i>%s</b></i> tag attribute : <sub>^</sub><b><i>%s</b></i>", markupTagName, MARKUPTAG_MANDATORY_ATTRIBUTE.get(markupTagName));
@@ -1511,7 +1588,7 @@ public class ElementJavadoc {
}
formattedLine.replace(fromIndex, fromIndex + tagActionValue.length(), replacement);
- fromIndex += replacement.length();
+ fromIndex += replacement.length();
codeLine = formattedLine.toString();
}
}
@@ -1545,7 +1622,7 @@ public class ElementJavadoc {
}
private void applyLinkTag(String codeLine, String tagAction, String linkTarget, String tagActionValue, List<SourceLineCharterMapperToHtmlTag> eachCharList) {
-
+
String linkHtmlStartTag = "";
String linkHtmlEndTag = "";
try {
@@ -1555,12 +1632,12 @@ public class ElementJavadoc {
JavaDocSnippetLinkTagFileObject docSnippetLinkTagFileObject = new JavaDocSnippetLinkTagFileObject(fullClassCode);
StringBuilder linkRef = new StringBuilder();
createSnippetMarkupLinkTag(linkRef, docSnippetLinkTagFileObject);
-
+
String link = linkRef.toString();
//replace <code>, becasue of some issue while resolving hyperlink and code in netbeans ide
link = link.replace("<code>", "");
link = link.replace("</code>", "");
-
+
String linkValue = link.replaceAll("\\<.*?>", "");
linkHtmlStartTag = link.substring(0, link.indexOf(linkValue));
linkHtmlEndTag = link.substring(link.indexOf(linkValue) + linkValue.length());
@@ -1571,7 +1648,7 @@ public class ElementJavadoc {
if(linkHtmlStartTag.equals("") || linkHtmlEndTag.equals("")){
return;
}
-
+
if(tagAction.equals("substring")){
int fromIndex = 0;
while (fromIndex != -1) {
@@ -1587,7 +1664,7 @@ public class ElementJavadoc {
fromIndex += tagActionValue.length();
}
}
-
+
} else if(tagAction.equals("regex")){
Pattern p = Pattern.compile(tagActionValue);
Matcher m = p.matcher(codeLine);
@@ -1597,10 +1674,10 @@ public class ElementJavadoc {
startTag.add(0, linkHtmlStartTag);
List<String> endTag = eachCharList.get(t).getEndTag();
endTag.add(linkHtmlEndTag);
- }
}
}
-
+ }
+
}
@@ -1648,7 +1725,7 @@ public class ElementJavadoc {
StringBuilder prjClsPath = new StringBuilder();
String prjSrcPath = cpInfo.getClassPath(ClasspathInfo.PathKind.SOURCE).toString();
prjClsPath.append(prjSrcPath);
-
+
for(ClassPath.Entry cpe : cpInfo.getClassPath(ClasspathInfo.PathKind.COMPILE).entries()){
prjClsPath.append(";");
prjClsPath.append(cpe.getRoot().getFileSystem().getDisplayName());
@@ -1657,7 +1734,7 @@ public class ElementJavadoc {
JavacTask task = (JavacTask) compiler.getTask(null, null, null, opt, null, Arrays.asList(fileObject));
DocTrees docTrees = DocTrees.instance(task);//trees
-
+
Iterable<? extends Element> docClass = task.analyze();
main:
@@ -1988,4 +2065,4 @@ public class ElementJavadoc {
docURL = url;
}
}
-}
\ No newline at end of file
+}
diff --git a/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/MarkupTagProcessor.java b/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/MarkupTagProcessor.java
index 1cdbdc8d3b..2efe5a10c7 100644
--- a/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/MarkupTagProcessor.java
+++ b/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/MarkupTagProcessor.java
@@ -32,7 +32,7 @@ import java.util.TreeMap;
*/
public class MarkupTagProcessor {
- private static final List<String> SUPPORTED_SNIPPET_MARKUP_TAGS = Arrays.asList("highlight", "replace", "link");
+ private static final List<String> SUPPORTED_SNIPPET_MARKUP_TAGS = Arrays.asList("highlight", "replace", "link", "start");
public ProcessedTags process(List<SourceLineMeta> parseResult ){
Map<Integer, List<ApplicableMarkupTag>> markUpTagOnLine = new TreeMap<>();
@@ -78,8 +78,7 @@ public class MarkupTagProcessor {
markupAttribute.remove("region");
Region region = new Region(regionVal, markupAttribute, markUpTag.getTagName());
regionList.add(region);
- List<Region> newRegionList = new ArrayList<>();
- newRegionList.add(region);
+ List<Region> newRegionList = new ArrayList<>(regionList);
regionTagOnLine.put(markUpTag.isTagApplicableToNextLine() ? nextLine : thisLine, newRegionList);
if(!markUpTag.isTagApplicableToNextLine()){
addMarkupTags(thisLine, transformRegionAttributeToMarkupTag(newRegionList), markUpTagOnLine);
@@ -151,7 +150,7 @@ public class MarkupTagProcessor {
}
}
- private class Region{
+ public class Region{
private final String markupTagName;
private final String value;
private final Map<String, String> attributes;
diff --git a/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/SnippetTagCommentParser.java b/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/SnippetTagCommentParser.java
index 0e8ab81aea..905fb0e4f8 100644
--- a/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/SnippetTagCommentParser.java
+++ b/java/java.sourceui/src/org/netbeans/api/java/source/ui/snippet/SnippetTagCommentParser.java
@@ -37,8 +37,16 @@ public class SnippetTagCommentParser {
private static final String JAVA_LANG_SOURCE_LINE_START_PATTERN = "^(.*)(";
private static final String MARKUPTAG_START_PATTERN = "(\\s*@\\s*\\w+.+?))$";
private final SnippetMarkupTagExtractor extractor = new SnippetMarkupTagExtractor();
- private final Pattern markUpPattern = Pattern.compile(JAVA_LANG_SOURCE_LINE_START_PATTERN + "\\Q//\\E"+ MARKUPTAG_START_PATTERN);
+ private final Pattern markUpPattern;
+
+ public SnippetTagCommentParser() {
+ this.markUpPattern = Pattern.compile(JAVA_LANG_SOURCE_LINE_START_PATTERN + "\\Q//\\E" + MARKUPTAG_START_PATTERN);
+ }
+ public SnippetTagCommentParser(String langCommentPattern) {
+ this.markUpPattern = Pattern.compile(JAVA_LANG_SOURCE_LINE_START_PATTERN + langCommentPattern + MARKUPTAG_START_PATTERN);
+ }
+
public List<SourceLineMeta> parse(String snippetDocComment) {
List<SourceLineMeta> fullSourceLineInfo = new ArrayList<>();
Matcher matcher = markUpPattern.matcher("");
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists