From c38a62017006b9a2410f2f303c9f47a1a43603b4 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 26 Jan 2011 16:57:58 +0000 Subject: [PATCH] Bug 333941: Squiqgly line for missing semicolons. --- .../parser/org/eclipse/cdt/core/parser/IProblem.java | 7 +++++++ .../eclipse/cdt/internal/core/dom/parser/ASTProblem.java | 2 ++ .../core/dom/parser/AbstractGNUSourceCodeParser.java | 3 ++- .../cdt/internal/core/dom/parser/c/GNUCSourceParser.java | 2 +- .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 2 +- .../cdt/internal/core/parser/ParserMessages.properties | 1 + 6 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IProblem.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IProblem.java index 3661b20e67a..e521287347a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IProblem.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IProblem.java @@ -327,6 +327,13 @@ public interface IProblem * Syntax error, detected by the parser. */ public final static int SYNTAX_ERROR = SYNTAX_RELATED | 0x001; + + /** + * Missing semicolon. + * @since 5.3 + */ + public final static int MISSING_SEMICOLON = SYNTAX_RELATED | 0x002; + @Deprecated diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java index c192d023e27..ecc0f263630 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java @@ -168,6 +168,8 @@ public class ASTProblem extends ASTNode implements IASTProblem { ParserMessages.getString("ScannerProblemFactory.error.scanner.badCharacter")); //$NON-NLS-1$ errorMessages.put(new Integer(SYNTAX_ERROR), ParserMessages.getString("ParserProblemFactory.error.syntax.syntaxError")); //$NON-NLS-1$ + errorMessages.put(new Integer(MISSING_SEMICOLON), + ParserMessages.getString("ParserProblemFactory.error.syntax.missingSemicolon")); //$NON-NLS-1$ } /* diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index 7f05a317815..bba0e40222a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -184,6 +184,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { */ protected IToken declarationMark; protected IToken nextToken; + protected IToken lastToken; protected IToken lastTokenFromScanner; protected boolean isCancelled = false; @@ -1866,7 +1867,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (foundSemicolon) return expressionStatement; - throwBacktrack(createProblem(IProblem.SYNTAX_ERROR, calculateEndOffset(expressionStatement), 0), expressionStatement); + throwBacktrack(createProblem(IProblem.MISSING_SEMICOLON, calculateEndOffset(expressionStatement)-1, 1), expressionStatement); return null; // Hint for java-compiler } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 39830109248..39f3f5ce354 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -399,7 +399,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } if (insertSemi) { - IASTProblem problem= createProblem(IProblem.SYNTAX_ERROR, endOffset, 0); + IASTProblem problem= createProblem(IProblem.MISSING_SEMICOLON, endOffset-1, 1); throwBacktrack(problem, simpleDeclaration); } return simpleDeclaration; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 950b0979d57..917e8cbae11 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -2142,7 +2142,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } if (insertSemi) { - IASTProblem problem= createProblem(IProblem.SYNTAX_ERROR, endOffset, 0); + IASTProblem problem= createProblem(IProblem.MISSING_SEMICOLON, endOffset-1, 1); throwBacktrack(problem, simpleDeclaration); } return simpleDeclaration; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties index 0a5d8ce2c8b..807606951ee 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties @@ -43,6 +43,7 @@ ScannerProblemFactory.error.scanner.unexpectedEOF=Unexpected End Of File encount ScannerProblemFactory.error.scanner.badCharacter=Bad character sequence encountered: {0} ParserProblemFactory.error.syntax.syntaxError=Syntax error +ParserProblemFactory.error.syntax.missingSemicolon=Missing '';'' BaseProblemFactory.problemPattern={0} in file: {1}:{2, number, integer}