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 <72914639+mishrasand...@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 <akhilesh.s.si...@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-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists