From 94711d3e76b8c7f1996f771f05178aa6b618fc04 Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Sun, 23 May 2010 02:18:47 +0000 Subject: [PATCH] Added preference for list of exceptions in Statement has no effect checker --- .../internal/checkers/CheckersMessages.java | 2 ++ .../checkers/StatementHasNoEffectChecker.java | 30 ++++++++++++++++--- .../internal/checkers/messages.properties | 2 ++ 3 files changed, 30 insertions(+), 4 deletions(-) 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 5b46ac54ab1..2eff513b4f7 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 @@ -19,6 +19,8 @@ public class CheckersMessages extends NLS { private static final String BUNDLE_NAME = "org.eclipse.cdt.codan.internal.checkers.messages"; //$NON-NLS-1$ public static String NamingConventionFunctionChecker_LabelNamePattern; public static String ReturnChecker_Param0; + public static String StatementHasNoEffectChecker_ParameterExceptions; + public static String StatementHasNoEffectChecker_ParameterExceptionsItem; public static String StatementHasNoEffectChecker_ParameterMacro; static { // initialize resource bundle diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java index 11f5f9370b3..49eab8889c6 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java @@ -41,6 +41,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBinaryExpression; public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { public static final String ER_ID = "org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem"; //$NON-NLS-1$ public static final String PARAM_MACRO_ID = "macro"; //$NON-NLS-1$ + public static final String PARAM_EXCEPT_ARG_LIST = "exceptions"; //$NON-NLS-1$ public void processAst(IASTTranslationUnit ast) { ast.accept(new CheckStmpVisitor()); @@ -61,7 +62,9 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { boolean shouldReportInMacro = shouldReportInMacro(); if (inMacro && !shouldReportInMacro) return PROCESS_SKIP; - reportProblem(ER_ID, stmt, expression.getRawSignature()); + String arg = expression.getRawSignature(); + if (!isFilteredArg(arg)) + reportProblem(ER_ID, stmt, arg); } return PROCESS_SKIP; } @@ -79,7 +82,7 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { private boolean hasNoEffect(IASTExpression e) { if (e instanceof IASTBinaryExpression) { IASTBinaryExpression binExpr = (IASTBinaryExpression) e; - if (isLValue(binExpr)) + if (isPossibleAssignment(binExpr)) return false; switch (binExpr.getOperator()) { case IASTBinaryExpression.op_logicalOr: @@ -127,7 +130,27 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { addPreference(problem, PARAM_MACRO_ID, CheckersMessages.StatementHasNoEffectChecker_ParameterMacro, Boolean.TRUE); + addListPreference( + problem, + PARAM_EXCEPT_ARG_LIST, + CheckersMessages.StatementHasNoEffectChecker_ParameterExceptions, + CheckersMessages.StatementHasNoEffectChecker_ParameterExceptionsItem); + } + /**s + * @param paramExceptArgList + * @param arg + * @return + */ + public boolean isFilteredArg(String arg) { + Object[] arr = (Object[]) getPreference( + getProblemById(ER_ID, getFile()), PARAM_EXCEPT_ARG_LIST); + for (int i = 0; i < arr.length; i++) { + String str = (String) arr[i]; + if (arg.equals(str)) + return true; + } + return false; } /** @@ -139,8 +162,7 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { } @SuppressWarnings("restriction") - public boolean isLValue(IASTBinaryExpression expr) { - + public boolean isPossibleAssignment(IASTBinaryExpression expr) { switch (expr.getOperator()) { case IASTBinaryExpression.op_assign: case IASTBinaryExpression.op_binaryAndAssign: 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 35b8467d51e..a20ffc9fbae 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 @@ -1,3 +1,5 @@ NamingConventionFunctionChecker_LabelNamePattern=Name Pattern ReturnChecker_Param0=Also check functions with implicit return value +StatementHasNoEffectChecker_ParameterExceptions=Exceptions (value of the problem argument) +StatementHasNoEffectChecker_ParameterExceptionsItem=Value of the argument StatementHasNoEffectChecker_ParameterMacro=Report problem in statements that comes from macro expansion