diff options
author | Markus Schorn | 2009-06-22 13:44:54 +0000 |
---|---|---|
committer | Markus Schorn | 2009-06-22 13:44:54 +0000 |
commit | c48dff14d70c32964ba442052e8b00e16a19cd92 (patch) | |
tree | d9e4c18c2cfe411bac1916b3c02874b1964eb3e7 /core/org.eclipse.cdt.core | |
parent | f36c6d3c70e26b17c814275064aa56167f7e67b1 (diff) | |
download | org.eclipse.cdt-c48dff14d70c32964ba442052e8b00e16a19cd92.tar.gz org.eclipse.cdt-c48dff14d70c32964ba442052e8b00e16a19cd92.tar.xz org.eclipse.cdt-c48dff14d70c32964ba442052e8b00e16a19cd92.zip |
getSyntax() does not work correctly with newlines, bug 280175
Diffstat (limited to 'core/org.eclipse.cdt.core')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java index 0117daefe1f..e3e32bb477e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java @@ -319,23 +319,28 @@ public abstract class ASTNode implements IASTNode { char[] txt= lr.getUnpreprocessedSignature(total); Lexer lex= new Lexer(txt, (LexerOptions) tu.getAdapter(LexerOptions.class), ILexerLog.NULL, null); try { - Token result= lex.nextToken(); - if (result.getType() == IToken.tEND_OF_INPUT) - return null; - - Token last= result; - for(;;) { - int offset= last.getOffset() + adjustment; - int endOffset= last.getEndOffset() + adjustment; - last.setOffset(offset, endOffset); - + Token result= null; + Token last= null; + for(;;) { Token t= lex.nextToken(); - if (t.getType() == IToken.tEND_OF_INPUT) + switch (t.getType()) { + case IToken.tEND_OF_INPUT: + return result; + case Lexer.tNEWLINE: break; - last.setNext(t); - last= t; + default: + int offset= t.getOffset() + adjustment; + int endOffset= t.getEndOffset() + adjustment; + t.setOffset(offset, endOffset); + if (last == null) { + result= last= t; + } else { + last.setNext(t); + last= t; + } + break; + } } - return result; } catch (OffsetLimitReachedException e) { // does not happen without using content assist limit } |