diff --git a/codan/org.eclipse.cdt.codan.core/.settings/org.eclipse.jdt.core.prefs b/codan/org.eclipse.cdt.codan.core/.settings/org.eclipse.jdt.core.prefs index 26314eab25b..4452aeeb4a3 100644 --- a/codan/org.eclipse.cdt.codan.core/.settings/org.eclipse.jdt.core.prefs +++ b/codan/org.eclipse.cdt.codan.core/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,4 @@ -#Tue Jun 02 17:09:29 EDT 2009 +#Mon Aug 10 14:23:53 EDT 2009 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 diff --git a/codan/org.eclipse.cdt.codan.core/plugin.xml b/codan/org.eclipse.cdt.codan.core/plugin.xml index 3c594aa859e..64d7402159f 100644 --- a/codan/org.eclipse.cdt.codan.core/plugin.xml +++ b/codan/org.eclipse.cdt.codan.core/plugin.xml @@ -53,5 +53,20 @@ + + + + + + + + + diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanApplication.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanApplication.java new file mode 100644 index 00000000000..5f04cb63c4f --- /dev/null +++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanApplication.java @@ -0,0 +1,95 @@ +package org.eclipse.cdt.codan.core; + +import java.util.ArrayList; +import java.util.Collection; + +import org.eclipse.cdt.codan.core.builder.CodanBuilder; +import org.eclipse.cdt.codan.core.model.CodanProblemReporter; +import org.eclipse.cdt.codan.core.model.CodanRuntime; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.equinox.app.IApplication; +import org.eclipse.equinox.app.IApplicationContext; + +public class CodanApplication implements IApplication { + private Collection projects = new ArrayList(); + private boolean verbose = false; + private boolean all = false; + + public Object start(IApplicationContext context) throws Exception { + String[] args = (String[]) context.getArguments().get( + "application.args"); + if (args == null || args.length == 0) { + help(); + return EXIT_OK; + } + extractArguments(args); + CodanBuilder codanBuilder = new CodanBuilder(); + CodanRuntime runtime = CodanRuntime.getInstance(); + runtime.setProblemReporter(new CodanProblemReporter() { + @Override + public void reportProblem(String id, IFile file, int lineNumber, + String message) { + System.out.println(file.getLocation() + ":" + lineNumber + ": " + + message); + } + }); + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + if (all) { + log("Launching analysis on workspace"); + root.accept(codanBuilder.new CodanResourceVisitor()); + } else { + for (String project : projects) { + log("Launching analysis on project " + project); + IProject wProject = root.getProject(project); + if (!wProject.exists()) { + System.err.println("Error: project " + project + + " does not exist"); + continue; + } + wProject.accept(codanBuilder.new CodanResourceVisitor()); + } + } + return EXIT_OK; + } + + /** + * @param string + */ + private void log(String string) { + if (verbose) + System.err.println(string); + } + + /** + * @param args + */ + private void extractArguments(String[] args) { + for (int i = 0; i < args.length; i++) { + String string = args[i]; + if (string.equals("-verbose")) { + verbose = true; + } else if (string.equals("-all")) { + all = true; + } else { + projects.add(string); + } + } + } + + /** + * + */ + private void help() { + System.out.println("Usage: [options] ..."); + System.out.println("Options:"); + System.out.println(" -all - run on all projects in workspace"); + System.out.println(" -verbose - print extra build information"); + } + + public void stop() { + // nothing + } +} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanProblemReporter.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanProblemReporter.java index 7b5bb830ccd..84dffad37d9 100644 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanProblemReporter.java +++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanProblemReporter.java @@ -34,13 +34,17 @@ public class CodanProblemReporter { return; // skip int severity = problem.getSeverity().intValue(); // Do not put in duplicates - IMarker[] cur = file.findMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE, false, IResource.DEPTH_ZERO); + IMarker[] cur = file.findMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE, + false, IResource.DEPTH_ZERO); if (cur != null) { for (IMarker element : cur) { - int line = ((Integer) element.getAttribute(IMarker.LINE_NUMBER)).intValue(); - if (line==lineNumber) { - String mesg = (String) element.getAttribute(IMarker.MESSAGE); - int sev = ((Integer) element.getAttribute(IMarker.SEVERITY)).intValue(); + int line = ((Integer) element + .getAttribute(IMarker.LINE_NUMBER)).intValue(); + if (line == lineNumber) { + String mesg = (String) element + .getAttribute(IMarker.MESSAGE); + int sev = ((Integer) element + .getAttribute(IMarker.SEVERITY)).intValue(); if (sev == severity && mesg.equals(message)) return; } @@ -64,6 +68,7 @@ public class CodanProblemReporter { file.deleteMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE, false, IResource.DEPTH_ZERO); } catch (CoreException ce) { + ce.printStackTrace(); } } diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanRuntime.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanRuntime.java index 13f8926afb1..d7b3be7462f 100644 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanRuntime.java +++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/model/CodanRuntime.java @@ -22,6 +22,10 @@ public class CodanRuntime { return problemReporter; } + public void setProblemReporter(CodanProblemReporter reporter) { + problemReporter = reporter; + } + public static CodanRuntime getInstance() { return instance; }