package soot.spl.ifds.headless; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import br.ufal.cideei.handlers.AnalysisArgs; import br.ufal.cideei.handlers.DoAnalysisOnClassPath; /** * This class controls all aspects of the application's execution */ public class Application implements IApplication { /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) */ public Object start(IApplicationContext context) throws Exception { String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); if(args.length<2 || args[0].equals("-help")) { System.out.println("USAGE: <projectname> <analysisclassname> <args>"); System.out.println("Where <args> is a list of boolean flags enabled with +<arg>"); System.out.println("and disabled with -<arg>. Available arguments and defaults:"); AnalysisArgs defaultArgs = AnalysisArgs.headless("",Collections.<String>emptyList()); defaultArgs.print(); return IApplication.EXIT_OK; } String projectName = args[0]; String analysisClassName = args[1]; List<String> argVals = new LinkedList<String>(); for (int i = 2; i < args.length; i++) { String arg = args[i]; if(arg.startsWith("+") || arg.startsWith("-")) argVals.add(arg); else System.err.println("Ignoring invalid argument: "+arg); } System.out.println("Applying analysis to project: " + projectName); try { // Import project description: // IWorkspace workspace = ResourcesPlugin.getWorkspace(); // System.err.println(workspace.getRoot().getLocation()); // IProjectDescription description = // workspace.loadProjectDescription(new // Path(projectPath).append(".project")); IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); project.open(null); IJavaProject javaProject = JavaCore.create(project); AnalysisArgs arg = AnalysisArgs.headless(analysisClassName,argVals); DoAnalysisOnClassPath.applyToProject(javaProject, arg); } catch (Exception e) { System.err.println("Error loading project " + projectName); System.err.println(e.getLocalizedMessage()); } return IApplication.EXIT_OK; } /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#stop() */ public void stop() { // nothing to do } }