1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 06:02:11 +02:00

- added headless launch support (application), based on patch of Francois Rigault

This commit is contained in:
Alena Laskavaia 2009-08-10 18:31:46 +00:00
parent a774350786
commit e93f96dd51
5 changed files with 125 additions and 6 deletions

View file

@ -1,4 +1,4 @@
#Tue Jun 02 17:09:29 EDT 2009 #Mon Aug 10 14:23:53 EDT 2009
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

View file

@ -54,4 +54,19 @@
</category> </category>
</extension> </extension>
<extension
id="application"
point="org.eclipse.core.runtime.applications">
<application
cardinality="singleton-global"
thread="main"
visible="true">
<run
class="org.eclipse.cdt.codan.core.CodanApplication">
</run>
</application>
</extension>
</plugin> </plugin>

View file

@ -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<String> projects = new ArrayList<String>();
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] <project1> <project2> ...");
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
}
}

View file

@ -34,13 +34,17 @@ public class CodanProblemReporter {
return; // skip return; // skip
int severity = problem.getSeverity().intValue(); int severity = problem.getSeverity().intValue();
// Do not put in duplicates // 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) { if (cur != null) {
for (IMarker element : cur) { for (IMarker element : cur) {
int line = ((Integer) element.getAttribute(IMarker.LINE_NUMBER)).intValue(); int line = ((Integer) element
if (line==lineNumber) { .getAttribute(IMarker.LINE_NUMBER)).intValue();
String mesg = (String) element.getAttribute(IMarker.MESSAGE); if (line == lineNumber) {
int sev = ((Integer) element.getAttribute(IMarker.SEVERITY)).intValue(); String mesg = (String) element
.getAttribute(IMarker.MESSAGE);
int sev = ((Integer) element
.getAttribute(IMarker.SEVERITY)).intValue();
if (sev == severity && mesg.equals(message)) if (sev == severity && mesg.equals(message))
return; return;
} }
@ -64,6 +68,7 @@ public class CodanProblemReporter {
file.deleteMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE, false, file.deleteMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE, false,
IResource.DEPTH_ZERO); IResource.DEPTH_ZERO);
} catch (CoreException ce) { } catch (CoreException ce) {
ce.printStackTrace();
} }
} }

View file

@ -22,6 +22,10 @@ public class CodanRuntime {
return problemReporter; return problemReporter;
} }
public void setProblemReporter(CodanProblemReporter reporter) {
problemReporter = reporter;
}
public static CodanRuntime getInstance() { public static CodanRuntime getInstance() {
return instance; return instance;
} }