Index: editor/libsrc/org/netbeans/editor/ext/java/JCTokenProcessor.java =================================================================== @@ -1321,6 +1321,9 @@ case JavaTokenContext.LINE_COMMENT_ID: +// <> Issue 50774 + case JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER_ID: +// Issue 50774 // Skip line comment break; Index: editor/libsrc/org/netbeans/editor/ext/java/JavaCompletionQuery.java =================================================================== @@ -133,6 +133,9 @@ break; case JavaTokenContext.LINE_COMMENT_ID: +// <> Issue 50774 + case JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER_ID: +// Issue 50774 errState = true; break; } Index: editor/libsrc/org/netbeans/editor/ext/java/JavaFormatSupport.java =================================================================== @@ -51,6 +51,9 @@ TokenID tokenID = token.getTokenID(); return (token.getTokenContextPath() == tokenContextPath && (tokenID == JavaTokenContext.LINE_COMMENT +// <> Issue 50774 + || tokenID == JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER +// Issue 50774 || tokenID == JavaTokenContext.BLOCK_COMMENT)); } Index: editor/libsrc/org/netbeans/editor/ext/java/JavaFormatter.java =================================================================== @@ -327,6 +327,9 @@ switch (imp.getToken().getTokenID().getNumericID()) { case JavaTokenContext.BLOCK_COMMENT_ID: case JavaTokenContext.LINE_COMMENT_ID: +// <> Issue 50774 + case JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER_ID: +// Issue 50774 break; // comments are ignored case JavaTokenContext.RBRACKET_ID: Index: editor/libsrc/org/netbeans/editor/ext/java/JavaSettingsDefaults.java =================================================================== @@ -239,6 +272,13 @@ case JavaTokenContext.ANNOTATION_ID: // JDK 1.5 annotations return new Coloring(null, new Color(0, 111, 0), null); +// <> Issue 50774 + case JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER_ID: + // Should use better colors, my first test using error colors worked ok, will get better ones later + return new Coloring(boldFont, Coloring.FONT_MODE_APPLY_STYLE, new Color(156,90,180), null); +// Tor's suggestion, but it does not really work on a yello highlight line +// return new Coloring(null, new Color(0xFF, 0xFF, 0xFF), new Color(0, 0, 0xCC)); +// Issue 50774 } } else { // printing set Index: editor/libsrc/org/netbeans/editor/ext/java/JavaSyntax.java =================================================================== @@ -58,6 +58,13 @@ private static final int ISI_DOUBLE_EXP = 31; // double number private static final int ISI_HEX = 32; // hex number private static final int ISA_DOT = 33; // after '.' +// <> Issue 50774 + private static final int ISI_LINE_COMMENT_MARKER = 100; // Inside line comment marker, such as TODO +// Issue 50774 + +// <> Issue 50774 + protected int commentHightlightMarkerLength; +// Issue 50774 private boolean isJava15 = true; @@ -206,9 +213,24 @@ case '\n': state = INIT; return JavaTokenContext.LINE_COMMENT; +// <> Issue 50774 + default: + commentHightlightMarkerLength = matchCommentHighlightMarker(buffer, offset, stopOffset); + if (commentHightlightMarkerLength != -1) { + state = ISI_LINE_COMMENT_MARKER; + return JavaTokenContext.LINE_COMMENT; + } +// Issue 50774 } break; +// <> Issue 50774 + case ISI_LINE_COMMENT_MARKER: + offset += commentHightlightMarkerLength; + state = ISI_LINE_COMMENT; + return JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER; +// Issue 50774 + case ISI_BLOCK_COMMENT: switch (actChar) { case '*': @@ -1328,5 +1350,21 @@ return null; } } - +// <> Issue 50774 + /* + * Cloning logic syle of matchKeyword. + * I'm cheating here by doing look ahead on the buffer + * This is most likely not legal in general, but I'm checking boundary conditions. + * We just need to make sure that the tokens we check for do not have \n really. + */ + public static int matchCommentHighlightMarker(char[] buffer, int start, int endOfBuffer) { + // "TODO".length() + if (start + 4 <= endOfBuffer) { + if (buffer[start++] == 'T' && buffer[start++] == 'O' && buffer[start++] == 'D' && buffer[start++] == 'O') { + return 4; + } + } + return -1; + } +// Issue 50774 } Index: editor/libsrc/org/netbeans/editor/ext/java/JavaSyntaxSupport.java =================================================================== @@ -55,11 +55,17 @@ private static final TokenID[] COMMENT_TOKENS = new TokenID[] { JavaTokenContext.LINE_COMMENT, +// <> Issue 50774 + JavaTokenContext.LINE_COMMENT, +// Issue 50774 JavaTokenContext.BLOCK_COMMENT }; private static final TokenID[] BRACKET_SKIP_TOKENS = new TokenID[] { JavaTokenContext.LINE_COMMENT, +// <> Issue 50774 + JavaTokenContext.LINE_COMMENT, +// Issue 50774 JavaTokenContext.BLOCK_COMMENT, JavaTokenContext.CHAR_LITERAL, JavaTokenContext.STRING_LITERAL Index: editor/libsrc/org/netbeans/editor/ext/java/JavaTokenContext.java =================================================================== @@ -42,7 +42,11 @@ public static final int WHITESPACE_ID = ERRORS_ID + 1; public static final int IDENTIFIER_ID = WHITESPACE_ID + 1; public static final int LINE_COMMENT_ID = IDENTIFIER_ID + 1; - public static final int BLOCK_COMMENT_ID = LINE_COMMENT_ID + 1; +// <> Issue 50774 + public static final int LINE_COMMENT_HIGHLIGHT_MARKER_ID = LINE_COMMENT_ID + 1; + public static final int BLOCK_COMMENT_ID = LINE_COMMENT_HIGHLIGHT_MARKER_ID + 1; +// public static final int BLOCK_COMMENT_ID = LINE_COMMENT_ID + 1; +// Issue 50774 public static final int CHAR_LITERAL_ID = BLOCK_COMMENT_ID + 1; public static final int STRING_LITERAL_ID = CHAR_LITERAL_ID + 1; public static final int INT_LITERAL_ID = STRING_LITERAL_ID + 1; @@ -207,6 +211,12 @@ public static final BaseTokenID LINE_COMMENT = new BaseTokenID("line-comment", LINE_COMMENT_ID); // NOI18N +// <> Issue 50774 + /** Comment with the '// TODO' prefix */ + public static final BaseTokenID LINE_COMMENT_HIGHLIGHT_MARKER + = new BaseTokenID("line-comment-highlight-marker", LINE_COMMENT_HIGHLIGHT_MARKER_ID); +// Issue 50774 + /** Block comment */ public static final BaseTokenID BLOCK_COMMENT = new BaseTokenID("block-comment", BLOCK_COMMENT_ID); // NOI18N Index: editor/src/org/netbeans/modules/editor/java/BracketCompletion.java =================================================================== @@ -112,7 +112,11 @@ if (token.getTokenID() == JavaTokenContext.LPAREN) { if (parDepth == 0) { // could be a 'for (' token = token.getPrevious(); - while(token !=null && (token.getTokenID() == JavaTokenContext.WHITESPACE || token.getTokenID() == JavaTokenContext.BLOCK_COMMENT || token.getTokenID() == JavaTokenContext.LINE_COMMENT)) { + while(token !=null && (token.getTokenID() == JavaTokenContext.WHITESPACE || token.getTokenID() == JavaTokenContext.BLOCK_COMMENT || token.getTokenID() == JavaTokenContext.LINE_COMMENT +// <> Issue 50774 + || token.getTokenID() == JavaTokenContext.LINE_COMMENT_HIGHLIGHT_MARKER +// Issue 50774 + )) { token = token.getPrevious(); } if (token.getTokenID() == JavaTokenContext.FOR) {