1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

semantic errors problem would not run on build by default

This commit is contained in:
Alena Laskavaia 2011-03-01 02:21:13 +00:00
parent 117fd4a222
commit 1db363d94c
4 changed files with 50 additions and 12 deletions

View file

@ -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 {

View file

@ -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

View file

@ -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);
}

View file

@ -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<IChecker>, 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;