Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: b258c149c92c120f2dffb1d8209d006d6f18e1ae (plain) (tree)
1
2
3
4
5
6
7
                                            



                            
                                               
                                                                            






                                                   






                                                                           





                                                                           
                                                                                                        






                                                                  
                                                                             
                                 


                                                                                                                                  










                                                                                
                                                                                                            











                                                                                         
                                                        































                                                                                 
package org.eclipse.cdt.codan.internal.core;

import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.cdt.codan.core.CodanRuntime;
import org.eclipse.cdt.codan.internal.core.model.CodanMarkerProblemReporter;
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;

/**
 * 
 * Application to support headless build
 * 
 * @noextend This class is not intended to be extended by clients.
 * @noinstantiate This class is not intended to be instantiated by clients.
 */
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"); //$NON-NLS-1$
		if (args == null || args.length == 0) {
			help();
			return EXIT_OK;
		}
		extractArguments(args);
		CodanBuilder codanBuilder = new CodanBuilder();
		CodanRuntime runtime = CodanRuntime.getInstance();
		runtime.setProblemReporter(new CodanMarkerProblemReporter() {
			@Override
			public void reportProblem(String id, int severity, IFile file, int lineNumber, int startChar, int endChar,
					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
	}
}

Back to the top