diff options
Diffstat (limited to 'org.eclipse.cdt.codan.core/src')
27 files changed, 199 insertions, 48 deletions
diff --git a/org.eclipse.cdt.codan.core/src/CVS/Template b/org.eclipse.cdt.codan.core/src/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/CVS/Template b/org.eclipse.cdt.codan.core/src/org/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Entries b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Entries index fec4197..d3c5192 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Entries +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Entries @@ -1,6 +1,5 @@ /CodanApplication.java/1.2/Sat Aug 22 21:16:48 2009// /CodanCorePlugin.java/1.3/Sat Aug 22 21:16:48 2009// -/CodanPreferencesLoader.java/1.1/Sat Aug 22 21:16:49 2009// /CodanRuntime.java/1.1/Sat Aug 22 21:16:48 2009// /PreferenceConstants.java/1.2/Sat Apr 18 04:01:43 2009// D/builder//// diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractIndexAstChecker.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractIndexAstChecker.java index 2c87b07..d805f2f 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractIndexAstChecker.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/AbstractIndexAstChecker.java @@ -85,12 +85,18 @@ public abstract class AbstractIndexAstChecker extends AbstractChecker implements if (astFile == null) { astFile = file; } - getProblemReporter().reportProblem( - id, - new ProblemLocation(astFile, astLocation - .getStartingLineNumber()), message); + ProblemLocation loc; + if (astLocation.getStartingLineNumber() == astLocation + .getEndingLineNumber()) + loc = new ProblemLocation(astFile, astLocation.getNodeOffset(), + astLocation.getNodeOffset() + astLocation.getNodeLength()); + else + loc = new ProblemLocation(astFile, astLocation + .getStartingLineNumber()); + getProblemReporter().reportProblem(id, loc, message); } + @Override public boolean runInEditor() { return true; } diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Entries b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Entries index 736d312..8635b9d 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Entries +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Entries @@ -1,17 +1,16 @@ /AbstractChecker.java/1.4/Sat Aug 22 21:31:29 2009// -/AbstractIndexAstChecker.java/1.5/Sat Aug 22 21:31:29 2009// +/AbstractIndexAstChecker.java/1.6/Wed Dec 16 21:48:48 2009// /CodanSeverity.java/1.2/Wed Apr 22 01:26:56 2009// /ICAstChecker.java/1.1/Thu Apr 9 12:46:50 2009// -/IChecker.java/1.2/Sat Aug 22 21:31:29 2009// +/IChecker.java/1.3/Wed Dec 16 21:48:48 2009// /ICheckersRegistry.java/1.1/Sat Aug 22 21:16:48 2009// /ICodanAstReconciler.java/1.1/Sat Aug 22 21:16:48 2009// /ICodanBuilder.java/1.1/Sat Aug 22 21:16:48 2009// -/IProblem.java/1.3/Sat Aug 22 21:16:48 2009// -/IProblemCategory.java/1.2/Thu Apr 16 01:46:57 2009// -/IProblemElement.java/1.1/Thu Apr 16 01:46:57 2009// +/IProblem.java/1.4/Wed Dec 16 21:48:48 2009// +/IProblemCategory.java/1.3/Wed Dec 16 21:48:48 2009// +/IProblemElement.java/1.2/Wed Dec 16 21:48:48 2009// /IProblemLocation.java/1.1/Sat Aug 22 21:16:48 2009// -/IProblemProfile.java/1.3/Sat May 9 01:54:38 2009// -/IProblemReporter.java/1.1/Sat Aug 22 21:16:48 2009// +/IProblemProfile.java/1.4/Wed Dec 16 21:48:48 2009// +/IProblemReporter.java/1.2/Wed Dec 16 21:48:48 2009// /ProblemLocation.java/1.1/Sat Aug 22 21:16:48 2009// -/ProblemProfile.java/1.4/Sat Aug 22 21:16:48 2009// D diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IChecker.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IChecker.java index 4f995db..60f7cb2 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IChecker.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IChecker.java @@ -12,9 +12,23 @@ package org.eclipse.cdt.codan.core.model; import org.eclipse.core.resources.IResource; +/** + * Interface that checker must implement. CDT Checker must be able to process a resource. + */ public interface IChecker { - public boolean processResource(IResource resource); + /** + * Main method that checker should implement that actually detects errors + * @param resource - resource to run on + * @return true if need to traverse children + */ + boolean processResource(IResource resource); + /** + * Implement this method to trim down type of resource you are interested in, + * usually it will be c/c++ files only + * @param resource + * @return + */ boolean enabledInContext(IResource resource); /** diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblem.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblem.java index 52cfff2..bbab313 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblem.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblem.java @@ -12,15 +12,38 @@ package org.eclipse.cdt.codan.core.model; import java.util.Collection; +/** + * Interface representing code analysis problem + * + */ public interface IProblem extends IProblemElement { + /** + * Name of the problem - user visible "title", not the message + */ String getName(); + /** + * Unique problem id. Should be qualified by plugin name to maintain uniqueness. + * @return + */ String getId(); + /** + * Is enabled in current context (usually within profile) + * @return true if enabled + */ boolean isEnabled(); + /** + * Get current severity + * @return severity + */ CodanSeverity getSeverity(); + /** + * Message pattern, java patter like 'Variable {0} is never used here' + * @return pattern + */ String getMessagePattern(); void setSeverity(CodanSeverity sev); @@ -31,6 +54,11 @@ public interface IProblem extends IProblemElement { public void setProperty(Object key, Object value); + /** + * Get custom property + * @param property name + * @return property object + */ public Object getProperty(Object key); public Collection<Object> getPropertyKeys(); diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemCategory.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemCategory.java index 45a62a0..cd3de3a 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemCategory.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemCategory.java @@ -10,20 +10,37 @@ *******************************************************************************/ package org.eclipse.cdt.codan.core.model; +/** + * Problem category + * + */ public interface IProblemCategory extends IProblemElement { + /** + * Category name + */ String getName(); + /** + * Unique category id + * @return id + */ String getId(); - Object[] getChildren(); + /** + * Category children (other categories or problems) + * @return + */ + IProblemElement[] getChildren(); /** + * Find problem by id within children recursively * @param id * @return */ IProblem findProblem(String id); /** + * Find category by id within children recursively * @param id * @return */ diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemElement.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemElement.java index b9f7fb8..318f304 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemElement.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemElement.java @@ -11,7 +11,7 @@ package org.eclipse.cdt.codan.core.model; /** - * @author Alena + * Problem category or problem * */ public interface IProblemElement extends Cloneable { diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemProfile.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemProfile.java index 9dc465e..896eb10 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemProfile.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemProfile.java @@ -11,8 +11,10 @@ package org.eclipse.cdt.codan.core.model; /** - * Problem Profile contains tree of categories and problems. Profiles can have - * different categories and different problems set, problems with the same id + * Problem Profile contains tree of categories and problems. For user profile is quick way + * to switch between problems sets depends on task he is doing (i.e. find real bugs, vs doing code style report) + * User can set different profiles in different projects. + * Profiles can have different categories and different problems set, problems with the same id * can have different severities/enablement in different profiles. To obtain * profile use class {@link CheckersRegisry#getResourceProfile, * CheckersRegisry#getDefaultProfile() or CheckersRegisry#getWorkspaceProfile()} diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemReporter.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemReporter.java index 814cc40..059f155 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemReporter.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/IProblemReporter.java @@ -16,6 +16,7 @@ package org.eclipse.cdt.codan.core.model; * */ public interface IProblemReporter { + public static final String GENERIC_CODE_ANALYSIS_MARKER_TYPE = "org.eclipse.cdt.codan.core.codanProblem"; /** * Report a problem with "problemId" id on location determined by "loc", * using problem specific error message customised by args. diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Entries b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Entries index 74cd7a6..49bf43c 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Entries +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Entries @@ -1,4 +1,5 @@ -/CheckersRegisry.java/1.1/Sat Aug 22 21:16:49 2009// -/CodanBuilder.java/1.2/Sat Aug 22 21:31:29 2009// +/CheckersRegisry.java/1.3/Wed Dec 16 21:48:48 2009// +/CodanBuilder.java/1.3/Wed Dec 16 21:48:48 2009// +/CodanPreferencesLoader.java/1.1/Wed Sep 23 23:29:36 2009// /CodeAnlysisNature.java/1.1/Sat Aug 22 21:16:49 2009// D/model//// diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegisry.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegisry.java index 82ace80..5661622 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegisry.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CheckersRegisry.java @@ -16,16 +16,15 @@ import java.util.HashMap; import java.util.Iterator; import org.eclipse.cdt.codan.core.CodanCorePlugin; -import org.eclipse.cdt.codan.core.CodanPreferencesLoader; import org.eclipse.cdt.codan.core.PreferenceConstants; import org.eclipse.cdt.codan.core.model.IChecker; import org.eclipse.cdt.codan.core.model.ICheckersRegistry; import org.eclipse.cdt.codan.core.model.IProblem; import org.eclipse.cdt.codan.core.model.IProblemCategory; import org.eclipse.cdt.codan.core.model.IProblemProfile; -import org.eclipse.cdt.codan.core.model.ProblemProfile; 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; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ProjectScope; @@ -45,6 +44,7 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { private Collection<IChecker> checkers = new ArrayList<IChecker>(); private static CheckersRegisry instance; private HashMap<Object, IProblemProfile> profiles = new HashMap<Object, IProblemProfile>(); + private HashMap<IChecker, Collection<IProblem>> problemList = new HashMap<IChecker, Collection<IProblem>>(); private CheckersRegisry() { instance = this; @@ -136,7 +136,9 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { } } if (!hasRef) { - addProblem(new CodanProblem(id, name), null); + CodanProblem p = new CodanProblem(id, name); + addProblem(p, null); + addRefProblem(checkerObj, p); } } } catch (Exception e) { @@ -184,7 +186,9 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { return elementValue; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#iterator() */ public Iterator<IChecker> iterator() { @@ -197,15 +201,23 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { return instance; } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addChecker(org.eclipse.cdt.codan.core.model.IChecker) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#addChecker(org.eclipse + * .cdt.codan.core.model.IChecker) */ public void addChecker(IChecker checker) { checkers.add(checker); } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addProblem(org.eclipse.cdt.codan.core.model.IProblem, java.lang.String) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#addProblem(org.eclipse + * .cdt.codan.core.model.IProblem, java.lang.String) */ public void addProblem(IProblem p, String category) { IProblemCategory cat = getDefaultProfile().findCategory(category); @@ -214,8 +226,12 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { ((ProblemProfile) getDefaultProfile()).addProblem(p, cat); } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addCategory(org.eclipse.cdt.codan.core.model.IProblemCategory, java.lang.String) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#addCategory(org.eclipse + * .cdt.codan.core.model.IProblemCategory, java.lang.String) */ public void addCategory(IProblemCategory p, String category) { IProblemCategory cat = getDefaultProfile().findCategory(category); @@ -224,21 +240,46 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { ((ProblemProfile) getDefaultProfile()).addCategory(p, cat); } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addRefProblem(org.eclipse.cdt.codan.core.model.IChecker, org.eclipse.cdt.codan.core.model.IProblem) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#addRefProblem(org. + * eclipse.cdt.codan.core.model.IChecker, + * org.eclipse.cdt.codan.core.model.IProblem) */ public void addRefProblem(IChecker c, IProblem p) { + Collection<IProblem> plist = problemList.get(c); + if (plist == null) { + plist = new ArrayList<IProblem>(); + problemList.put(c, plist); + } + plist.add(p); + } + + /** + * Returns list of problems registered for given checker + * @return collection of problems or null + */ + public Collection<IProblem> getRefProblems(IChecker checker) { + return problemList.get(checker); } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getDefaultProfile() + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#getDefaultProfile() */ public IProblemProfile getDefaultProfile() { return profiles.get(DEFAULT); } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getWorkspaceProfile() + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#getWorkspaceProfile() */ public IProblemProfile getWorkspaceProfile() { IProblemProfile wp = profiles.get(ResourcesPlugin.getWorkspace()); @@ -262,8 +303,12 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { profiles.put(element, profile); } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getResourceProfile(org.eclipse.core.resources.IResource) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckersRegistry#getResourceProfile + * (org.eclipse.core.resources.IResource) */ public IProblemProfile getResourceProfile(IResource element) { IProblemProfile prof = profiles.get(element); @@ -296,8 +341,11 @@ public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry { return prof; } - /* (non-Javadoc) - * @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getResourceProfileWorkingCopy(org.eclipse.core.resources.IResource) + /* + * (non-Javadoc) + * + * @seeorg.eclipse.cdt.codan.core.model.ICheckersRegistry# + * getResourceProfileWorkingCopy(org.eclipse.core.resources.IResource) */ public IProblemProfile getResourceProfileWorkingCopy(IResource element) { if (element instanceof IProject) { diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanBuilder.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanBuilder.java index 7d58351..56916b8 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanBuilder.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanBuilder.java @@ -12,6 +12,8 @@ package org.eclipse.cdt.codan.internal.core; import java.io.File; import java.net.URI; +import java.util.Collection; +import java.util.Iterator; import java.util.Map; import org.eclipse.cdt.codan.core.CodanCorePlugin; @@ -20,6 +22,8 @@ import org.eclipse.cdt.codan.core.model.ICAstChecker; import org.eclipse.cdt.codan.core.model.IChecker; import org.eclipse.cdt.codan.core.model.ICodanAstReconciler; import org.eclipse.cdt.codan.core.model.ICodanBuilder; +import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemProfile; import org.eclipse.cdt.codan.core.model.IProblemReporter; import org.eclipse.cdt.codan.internal.core.model.CodanMarkerProblemReporter; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; @@ -122,6 +126,8 @@ public class CodanBuilder extends IncrementalProjectBuilder implements boolean run = false; if (checker.enabledInContext(resource)) run = true; + if (areProblemsForCheckerEnabled(checker, resource)) + run = true; if (run) checker.processResource(resource); } catch (Throwable e) { @@ -161,6 +167,9 @@ public class CodanBuilder extends IncrementalProjectBuilder implements boolean run = false; if (checker.enabledInContext(resource)) run = true; + if (areProblemsForCheckerEnabled(checker, resource)) { + run = true; + } if (run && checker instanceof ICAstChecker && checker.runInEditor()) ((ICAstChecker) checker).processAst(ast); @@ -171,6 +180,30 @@ public class CodanBuilder extends IncrementalProjectBuilder implements } } + /** + * @param checker + * @param resource + * @return + */ + private boolean areProblemsForCheckerEnabled(IChecker checker, + IResource resource) { + IProblemProfile resourceProfile = CheckersRegisry.getInstance() + .getResourceProfile(resource); + Collection<IProblem> refProblems = CheckersRegisry.getInstance() + .getRefProblems(checker); + for (Iterator iterator = refProblems.iterator(); iterator.hasNext();) { + IProblem p = (IProblem) iterator.next(); + // we need to check problem enablement in particular profile + IProblem problem = resourceProfile.findProblem(p.getId()); + if (problem == null) + throw new IllegalArgumentException("Id is not registered"); + if (problem.isEnabled()) + return true; + } + // no problem is enabled for this checker, skip the checker + return false; + } + protected void fullBuild(final IProgressMonitor monitor) throws CoreException { try { diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanPreferencesLoader.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java index 6fd6318..bafff9a 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanPreferencesLoader.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java @@ -8,7 +8,7 @@ * Contributors: * Alena Laskavaia - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.codan.core; +package org.eclipse.cdt.codan.internal.core; import org.eclipse.cdt.codan.core.model.CodanSeverity; import org.eclipse.cdt.codan.core.model.IProblem; diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Entries b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Entries index cf1f6cc..5f7a029 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Entries +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Entries @@ -1,4 +1,5 @@ -/CodanMarkerProblemReporter.java/1.1/Sat Aug 22 21:16:48 2009// +/CodanMarkerProblemReporter.java/1.2/Wed Dec 16 21:48:48 2009// /CodanProblem.java/1.1/Sat Aug 22 21:16:48 2009// -/CodanProblemCategory.java/1.1/Sat Aug 22 21:16:48 2009// +/CodanProblemCategory.java/1.2/Wed Dec 16 21:48:48 2009// +/ProblemProfile.java/1.1/Wed Sep 23 23:29:36 2009// D diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Template b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Template new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CVS/Template diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanMarkerProblemReporter.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanMarkerProblemReporter.java index ebf00c9..a4599c5 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanMarkerProblemReporter.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanMarkerProblemReporter.java @@ -23,7 +23,7 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; public class CodanMarkerProblemReporter implements IProblemReporter { - public static final String GENERIC_CODE_ANALYSIS_MARKER_TYPE = "org.eclipse.cdt.codan.core.codanProblem"; + /* * (non-Javadoc) diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanProblemCategory.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanProblemCategory.java index 289e0fd..fc63480 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanProblemCategory.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/CodanProblemCategory.java @@ -40,8 +40,8 @@ public class CodanProblemCategory implements IProblemCategory, Cloneable { return name; } - public Object[] getChildren() { - return list.toArray(); + public IProblemElement[] getChildren() { + return (IProblemElement[]) list.toArray(new IProblemElement[list.size()]); } public void addChild(IProblemElement p) { diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/ProblemProfile.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/ProblemProfile.java index ae90e76..d2330f1 100644 --- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/ProblemProfile.java +++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/model/ProblemProfile.java @@ -8,12 +8,14 @@ * Contributors: * Alena Laskavaia - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.codan.core.model; +package org.eclipse.cdt.codan.internal.core.model; import java.util.ArrayList; import java.util.Collection; -import org.eclipse.cdt.codan.internal.core.model.CodanProblemCategory; +import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemCategory; +import org.eclipse.cdt.codan.core.model.IProblemProfile; /** * @author Alena |