diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/CheckersMessages.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/CheckersMessages.java index 58b5e0bd872..0ea327df271 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/CheckersMessages.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/CheckersMessages.java @@ -24,6 +24,7 @@ public class CheckersMessages extends NLS { public static String GenericParameter_ParameterExceptionsItem; public static String StatementHasNoEffectChecker_ParameterMacro; public static String SuggestedParenthesisChecker_SuggestParanthesesAroundNot; + public static String SuspiciousSemicolonChecker_ParamElse; public static String ProblemBindingChecker_Candidates; diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/SuspiciousSemicolonChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/SuspiciousSemicolonChecker.java index 3ea61391943..4996a0517b4 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/SuspiciousSemicolonChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/SuspiciousSemicolonChecker.java @@ -11,6 +11,8 @@ package org.eclipse.cdt.codan.internal.checkers; import org.eclipse.cdt.codan.core.cxx.model.AbstractIndexAstChecker; +import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTIfStatement; @@ -21,7 +23,8 @@ import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; public class SuspiciousSemicolonChecker extends AbstractIndexAstChecker { - private static final String ER_ID = "org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem"; //$NON-NLS-1$ + public static final String ER_ID = "org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem"; //$NON-NLS-1$ + public static final String PARAM_ELSE = "else"; //$NON-NLS-1$ public void processAst(IASTTranslationUnit ast) { ast.accept(new ASTVisitor() { @@ -34,6 +37,10 @@ public class SuspiciousSemicolonChecker extends AbstractIndexAstChecker { if (statement instanceof IASTIfStatement) { IASTStatement thenStmt = ((IASTIfStatement) statement) .getThenClause(); + IASTStatement elseStmt = ((IASTIfStatement) statement) + .getElseClause(); + if (elseStmt != null && doNotReportIfElse() == true) + return PROCESS_CONTINUE; if (thenStmt instanceof IASTNullStatement && noMacroInvolved(thenStmt)) { reportProblem(ER_ID, thenStmt, (Object) null); @@ -44,6 +51,10 @@ public class SuspiciousSemicolonChecker extends AbstractIndexAstChecker { }); } + protected boolean doNotReportIfElse() { + final IProblem pt = getProblemById(ER_ID, getFile()); + return (Boolean) getPreference(pt, PARAM_ELSE); + } protected boolean noMacroInvolved(IASTStatement node) { IASTNodeSelector nodeSelector = node.getTranslationUnit() @@ -54,4 +65,11 @@ public class SuspiciousSemicolonChecker extends AbstractIndexAstChecker { 1); return macro == null; } + + public void initPreferences(IProblemWorkingCopy problem) { + super.initPreferences(problem); + addPreference(problem, PARAM_ELSE, + CheckersMessages.SuspiciousSemicolonChecker_ParamElse, + Boolean.FALSE); + } } diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/messages.properties b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/messages.properties index 149a3b1952d..3562b8fc74f 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/messages.properties +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/messages.properties @@ -15,5 +15,6 @@ GenericParameter_ParameterExceptions=Exceptions (value of the problem argument) GenericParameter_ParameterExceptionsItem=Value of the argument StatementHasNoEffectChecker_ParameterMacro=Report problem in statements that comes from macro expansion SuggestedParenthesisChecker_SuggestParanthesesAroundNot=Suggest parenthesis around not operator +SuspiciousSemicolonChecker_ParamElse=Do not report an error if 'else' exists ProblemBindingChecker_Candidates=Candidates are: \ No newline at end of file