# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /home/matthias/NetBeansProjects/core-main # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: db.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java --- db.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java Base (BASE) +++ db.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java Locally Modified (Based On LOCAL) @@ -239,6 +239,9 @@ case '/': state = State.INIT; return factory.createToken(SQLTokenId.BLOCK_COMMENT); + case '*': + state = State.ISA_STAR_IN_BLOCK_COMMENT; + break; default: state = State.ISI_BLOCK_COMMENT; break; Index: db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java --- db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java Base (BASE) +++ db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java Locally Modified (Based On LOCAL) @@ -114,6 +114,51 @@ assertTokens(seq, SQLTokenId.INCOMPLETE_STRING); } + /** + * Check correct handling of multiline comments (bug #216174) + * + * @throws Exception + */ + public void testMultiLineComment() throws Exception { + TokenSequence seq = getTokenSequence("/**/\n" + + "select * from test;"); + assertTokens(seq, SQLTokenId.BLOCK_COMMENT, SQLTokenId.WHITESPACE, + SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, + SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, + SQLTokenId.IDENTIFIER, SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE); + seq = getTokenSequence("/****/\n" + + "select * from test;"); + assertTokens(seq, SQLTokenId.BLOCK_COMMENT, SQLTokenId.WHITESPACE, + SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, + SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, + SQLTokenId.IDENTIFIER, SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE); + // Bug #216174: The following sequences led to only one token + seq = getTokenSequence("/***/\n" + + "select * from test;"); + assertTokens(seq, SQLTokenId.BLOCK_COMMENT, SQLTokenId.WHITESPACE, + SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, + SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, + SQLTokenId.IDENTIFIER, SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE); + seq = getTokenSequence("/*****/\n" + + "select * from test;"); + assertTokens(seq, SQLTokenId.BLOCK_COMMENT, SQLTokenId.WHITESPACE, + SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, + SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, + SQLTokenId.IDENTIFIER, SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE); + seq = getTokenSequence("/*** Test **/\n" + + "select * from test;"); + assertTokens(seq, SQLTokenId.BLOCK_COMMENT, SQLTokenId.WHITESPACE, + SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, + SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, + SQLTokenId.IDENTIFIER, SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE); + seq = getTokenSequence("/*** \n* Test\n **/\n" + + "select * from test;"); + assertTokens(seq, SQLTokenId.BLOCK_COMMENT, SQLTokenId.WHITESPACE, + SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, + SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, + SQLTokenId.IDENTIFIER, SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE); + } + private static TokenSequence getTokenSequence(String sql) throws BadLocationException { Document doc = new ModificationTextDocument(); doc.insertString(0, sql, null);