Bug 578919 - [18][javadoc] provide support for reporting invalid
snippets in javadoc
Change-Id: Ieaa0c9da32374dd32b310d6b731a95b066595c75
Signed-off-by: Kalyan Prasad Tatavarthi <kalyan_prasad@in.ibm.com>
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/191104
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java
index b3fbdf0..524ed87 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java
@@ -1507,7 +1507,7 @@
else if (isCode || isLiteral)
handleContentElements(node.fragments(), true);
else if (isSnippet) {
- handleSnippet(node.fragments());
+ handleSnippet(node);
}
else if (handleInheritDoc(node) || handleDocRoot(node)) {
// Handled
@@ -1921,29 +1921,42 @@
}
}
- private void handleSnippet(List<? extends ASTNode> fragments) {
- int fs= fragments.size();
- if (fs > 0) {
- fBuf.append("<pre><code>"); //$NON-NLS-1$
- fBuf.append(BlOCK_TAG_ENTRY_START);
- for(ASTNode fragment : fragments) {
- if (fragment instanceof TextElement) {
- TextElement memberRef= (TextElement) fragment;
- fBuf.append(memberRef.getText());
- } else if (fragment instanceof TagElement) {
- TagElement tagElem= (TagElement) fragment;
- String name= tagElem.getTagName();
- if (TagElement.TAG_HIGHLIGHT.equals(name)) {
- handleSnippetHighlight(tagElem.fragments(), tagElem.tagProperties());
- } else if (TagElement.TAG_REPLACE.equals(name)) {
- handleSnippetReplace(tagElem.fragments(), tagElem.tagProperties());
+ private void handleSnippet(TagElement node) {
+ if (node != null) {
+ Object val = node.getProperty(TagProperty.TAG_PROPERTY_SNIPPET_IS_VALID);
+ if (val instanceof Boolean
+ && ((Boolean)val).booleanValue()) {
+ int fs= node.fragments().size();
+ if (fs > 0) {
+ fBuf.append("<pre><code>"); //$NON-NLS-1$
+ fBuf.append(BlOCK_TAG_ENTRY_START);
+ for(Object fragment : node.fragments()) {
+ if (fragment instanceof TextElement) {
+ TextElement memberRef= (TextElement) fragment;
+ fBuf.append(memberRef.getText());
+ } else if (fragment instanceof TagElement) {
+ TagElement tagElem= (TagElement) fragment;
+ String name= tagElem.getTagName();
+ if (TagElement.TAG_HIGHLIGHT.equals(name)) {
+ handleSnippetHighlight(tagElem.fragments(), tagElem.tagProperties());
+ } else if (TagElement.TAG_REPLACE.equals(name)) {
+ handleSnippetReplace(tagElem.fragments(), tagElem.tagProperties());
+ }
+ }
}
+ fBuf.append(BlOCK_TAG_ENTRY_END);
}
+ } else {
+ handleInvalidSnippet();
}
- fBuf.append(BlOCK_TAG_ENTRY_END);
}
}
+ private void handleInvalidSnippet() {
+ fBuf.append("<pre><code>\n"); //$NON-NLS-1$
+ fBuf.append("<mark>invalid @Snippet</mark>"); //$NON-NLS-1$
+ }
+
private void handleSnippetReplace(List<? extends ASTNode> fragments, List<? extends ASTNode> tagProperties) {
try {
int fs= fragments.size();