/**
*
*/
package de.ovgu.cide.typing.internal;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import de.ovgu.cide.typing.internal.manager.TypingExtensionManager;
import de.ovgu.cide.typing.model.DebugTyping;
import de.ovgu.cide.typing.model.ITypingProvider;
/**
* full typecheck of an entire project
*
* @author ckaestne
*
*/
class TypecheckProjectJob extends WorkspaceJob {
private final IProject[] projects;
private TypingManager typingManager;
public TypecheckProjectJob(IProject[] projects, TypingManager manager) {
super("Typechecking Project");
this.projects = projects;
this.typingManager = manager;
}
@Override
public IStatus runInWorkspace(IProgressMonitor monitor)
throws CoreException {
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
for (IProject project : projects)
if (project.isOpen()) {
monitor.subTask("Checking " + project.getName());
// delete old markers
project.deleteMarkers(TypingMarkerFactory.MARKER_TYPE_ID, true,
IResource.DEPTH_INFINITE);
DebugTyping.reset();
long s = System.currentTimeMillis();
List<ITypingProvider> typingProviders = TypingExtensionManager
.getInstance().getTypingProviders(project);
TypingExtensionManager.registerListener(typingProviders,
typingManager.listener);
for (ITypingProvider typingProvider : typingProviders) {
typingProvider.updateAll(monitor);
}
System.out.println("Typing SPL " + project + " in "
+ (System.currentTimeMillis() - s) + " ms");
DebugTyping.print();// debug only
}
// monitor.worked(5);
return Status.OK_STATUS;
}
}