blob: 53fea72b03669184d5bebe956e2eb94ef7a80cd0 [file] [log] [blame]
/*
* Copyright (c) 2005, 2010 Borland Software Corporation and others
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Artem Tikhomirov (Borland) - initial API and implementation
*/
package org.eclipse.gmf.tests;
import java.util.ArrayList;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IJavaModelMarker;
/**
* @author artem
*
*/
public class CompileUtil {
public IStatus build(IProject project) {
try {
JobTracker jt = new JobTracker();
jt.start();
project.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
System.err.println("Build of " + project.getName() + " triggered " + jt.getJobsCount() + " jobs");
jt.dump();
jt.freeze();
Utils.dispatchDisplayMessages(jt.getNonEmptyCondition(), 2);
IMarker[] compileErrors = getJavaErrors(project);
if (compileErrors.length > 0) {
StringBuffer sb = new StringBuffer();
sb.append(project.getName()).append(" has compilation problems:\n");
String errorsMsg = formatErrors(sb, compileErrors);
return new Status(Status.ERROR, Plugin.getPluginID(), 0, errorsMsg, null);
}
return Status.OK_STATUS;
} catch (CoreException ex) {
System.err.println("============> CompileUtil.build:");
ex.printStackTrace(System.err);
return ex.getStatus();
} catch (Exception ex) {
ex.printStackTrace(); // record e.g. NPE
return Status.CANCEL_STATUS;
}
}
private IMarker[] collectJavaMarkers(IProject p) throws CoreException {
return p.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE);
}
private IMarker[] getJavaErrors(IProject p) throws CoreException {
return filterSevereMarkers(collectJavaMarkers(p));
}
private IMarker[] filterSevereMarkers(IMarker[] problems) throws CoreException {
ArrayList<IMarker> rv = new ArrayList<IMarker>(problems.length);
for (int i = 0; i < problems.length; i++) {
if (IMarker.SEVERITY_ERROR == ((Integer) problems[i].getAttribute(IMarker.SEVERITY)).intValue()) {
rv.add(problems[i]);
}
}
return rv.toArray(new IMarker[rv.size()]);
}
private String formatErrors(StringBuffer sb, IMarker[] compileErrors) {
for (int i = 0; i < compileErrors.length; i++) {
try {
sb.append(compileErrors[i].getResource().getName());
sb.append(':');
sb.append(compileErrors[i].getAttribute(IMarker.MESSAGE));
} catch (CoreException ex) {
sb.append("--ex:");
sb.append(ex.getMessage());
}
sb.append(",\n");
}
return sb.toString();
}
}