From 1db363d94cd521f699c5d89dbdcb79f9d3fb0ea4 Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Tue, 1 Mar 2011 02:21:13 +0000 Subject: [PATCH] semantic errors problem would not run on build by default --- .../checkers/ProblemBindingChecker.java | 12 +++++++ ...AbstractCheckerWithProblemPreferences.java | 12 +++++++ .../param/LaunchModeProblemPreference.java | 31 +++++++++++++++---- .../codan/internal/core/CheckersRegistry.java | 7 +---- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java index 089dde18d90..71629d975bf 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java @@ -14,6 +14,8 @@ package org.eclipse.cdt.codan.internal.checkers; import org.eclipse.cdt.codan.checkers.CodanCheckersActivator; import org.eclipse.cdt.codan.core.cxx.CxxAstUtils; import org.eclipse.cdt.codan.core.cxx.model.AbstractIndexAstChecker; +import org.eclipse.cdt.codan.core.model.CheckerLaunchMode; +import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; @@ -58,6 +60,16 @@ public class ProblemBindingChecker extends AbstractIndexAstChecker { public boolean runInEditor() { return true; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.codan.core.model.AbstractCheckerWithProblemPreferences#initPreferences(org.eclipse.cdt.codan.core.model.IProblemWorkingCopy) + */ + @Override + public void initPreferences(IProblemWorkingCopy problem) { + super.initPreferences(problem); + // these checkers should not run on full or incremental build + getLaunchModePreference(problem).enableInLaunchModes(CheckerLaunchMode.RUN_AS_YOU_TYPE, CheckerLaunchMode.RUN_ON_DEMAND); + } public void processAst(IASTTranslationUnit ast) { try { diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractCheckerWithProblemPreferences.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractCheckerWithProblemPreferences.java index e2e8234848f..7918996237d 100644 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractCheckerWithProblemPreferences.java +++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractCheckerWithProblemPreferences.java @@ -17,6 +17,7 @@ import org.eclipse.cdt.codan.core.param.BasicProblemPreference; import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference; import org.eclipse.cdt.codan.core.param.IProblemPreference; import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType; +import org.eclipse.cdt.codan.core.param.LaunchModeProblemPreference; import org.eclipse.cdt.codan.core.param.ListProblemPreference; import org.eclipse.cdt.codan.core.param.MapProblemPreference; import org.eclipse.cdt.codan.core.param.RootProblemPreference; @@ -49,6 +50,17 @@ public abstract class AbstractCheckerWithProblemPreferences extends AbstractChec return scope; } + + /** + * @param problem - problem for which preference is extracted + * @return launch mode preference + * @since 2.0 + */ + public LaunchModeProblemPreference getLaunchModePreference(IProblem problem) { + LaunchModeProblemPreference launchModes = getTopLevelPreference(problem).getLaunchModePreference(); + return launchModes; + } + /** * User can scope out some resources for this checker. Checker can use this * call to test if it should run on this resource at all or not. Test should diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/LaunchModeProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/LaunchModeProblemPreference.java index 30e1483d673..3e63faddef1 100644 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/LaunchModeProblemPreference.java +++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/LaunchModeProblemPreference.java @@ -35,18 +35,18 @@ public class LaunchModeProblemPreference extends MapProblemPreference { * constructor */ public LaunchModeProblemPreference() { - } /** * @return true if values has not been set */ @Override - public boolean isDefault(){ + public boolean isDefault() { CheckerLaunchMode[] values = CheckerLaunchMode.values(); for (int i = 0; i < values.length; i++) { CheckerLaunchMode checkerLaunchMode = values[i]; - if (getChildDescriptor(checkerLaunchMode.name())!=null) return false; + if (getChildDescriptor(checkerLaunchMode.name()) != null) + return false; } return true; } @@ -69,7 +69,7 @@ public class LaunchModeProblemPreference extends MapProblemPreference { * @return true if this mode enabled for this preference */ public boolean isRunningInMode(CheckerLaunchMode mode) { - if (getChildDescriptor(mode.name())==null) { + if (getChildDescriptor(mode.name()) == null) { if (mode == CheckerLaunchMode.RUN_ON_INC_BUILD) return isRunningInMode(CheckerLaunchMode.RUN_ON_FULL_BUILD); return true; // default is true @@ -82,6 +82,7 @@ public class LaunchModeProblemPreference extends MapProblemPreference { } /** + * Set a single running mode to a value (if mode is not defined it value assumed to be true!) * @param mode * @param value */ @@ -93,6 +94,24 @@ public class LaunchModeProblemPreference extends MapProblemPreference { } } + /** + * Set modes in the argument list to true, and the rest to false + * @param modes + */ + public void enableInLaunchModes(CheckerLaunchMode... modes) { + CheckerLaunchMode[] all = CheckerLaunchMode.values(); + for (int i = 0; i < all.length; i++) { + CheckerLaunchMode mode = all[i]; + if (getChildDescriptor(mode.name()) == null) { + addLaunchMode(mode, false); + } + } + for (int i = 0; i < modes.length; i++) { + CheckerLaunchMode mode = modes[i]; + setChildValue(mode.name(), true); + } + } + /** * @return true if all modes are enabled (or this is parent mode) */ @@ -112,9 +131,9 @@ public class LaunchModeProblemPreference extends MapProblemPreference { @Override protected IProblemPreference importChildValue(String key, StreamTokenizer tokenizer) throws IOException { IProblemPreference desc = getChildDescriptor(key); - if (desc==null) { + if (desc == null) { CheckerLaunchMode mode = CheckerLaunchMode.valueOf(key); - if (mode==null) + if (mode == null) throw new IllegalArgumentException(key); desc = addLaunchMode(mode, true); } diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegistry.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegistry.java index 01069e43838..206937f6e70 100644 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegistry.java +++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegistry.java @@ -28,7 +28,6 @@ import org.eclipse.cdt.codan.core.model.IProblemCategory; import org.eclipse.cdt.codan.core.model.IProblemProfile; import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; import org.eclipse.cdt.codan.core.param.LaunchModeProblemPreference; -import org.eclipse.cdt.codan.core.param.RootProblemPreference; import org.eclipse.cdt.codan.internal.core.model.CodanProblem; import org.eclipse.cdt.codan.internal.core.model.CodanProblemCategory; import org.eclipse.cdt.codan.internal.core.model.ProblemProfile; @@ -442,11 +441,7 @@ public class CheckersRegistry implements Iterable, ICheckersRegistry { if (problem == null) throw new IllegalArgumentException("Id is not registered"); //$NON-NLS-1$ if (checker instanceof AbstractCheckerWithProblemPreferences) { - RootProblemPreference root = ((AbstractCheckerWithProblemPreferences)checker).getTopLevelPreference(problem); - - LaunchModeProblemPreference pref = root.getLaunchModePreference(); - // XXX: how to set defaults - + LaunchModeProblemPreference pref = ((AbstractCheckerWithProblemPreferences) checker).getLaunchModePreference(problem); if (pref.isRunningInMode(mode)) { enabled = true; break;