package fr.inria.diverse.k3.sample.fr.inria.diverse.k3.sample.loadXtendModelFromXtend;
import java.io.File;
import java.util.List;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtend.core.compiler.batch.XtendBatchCompiler;
import org.eclipse.xtext.diagnostics.Severity;
import org.eclipse.xtext.validation.Issue;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
public class MyXtendBatchCompiler extends XtendBatchCompiler{
private ResourceSet resourceSet;
public ResourceSet getResourceSet() {
return resourceSet;
}
private final static class SeverityFilter implements Predicate<Issue> {
private static final SeverityFilter WARNING = new SeverityFilter(Severity.WARNING);
private static final SeverityFilter ERROR = new SeverityFilter(Severity.ERROR);
private Severity severity;
private SeverityFilter(Severity severity) {
this.severity = severity;
}
public boolean apply(Issue issue) {
return this.severity == issue.getSeverity();
}
}
public boolean compile() {
try {
resourceSet = resourceSetProvider.get();
File classDirectory = createTempDir("classes");
// install a type provider without index lookup for the first phase
installJvmTypeProvider(resourceSet, classDirectory, true);
loadXtendFiles(resourceSet);
File sourceDirectory = createStubs(resourceSet);
if (!preCompileStubs(sourceDirectory, classDirectory)) {
//log.debug("Compilation of stubs and existing Java code had errors. This is expected and usually is not a probblem.");
}
// install a fresh type provider for the second phase, so we clear all previously cached classes and misses.
installJvmTypeProvider(resourceSet, classDirectory, false);
EcoreUtil.resolveAll(resourceSet);
List<Issue> issues = validate(resourceSet);
Iterable<Issue> errors = Iterables.filter(issues, SeverityFilter.ERROR);
Iterable<Issue> warnings = Iterables.filter(issues, SeverityFilter.WARNING);
reportIssues(Iterables.concat(errors, warnings));
if (!Iterables.isEmpty(errors)) {
return false;
}
//generateJavaFiles(resourceSet);
} finally {
if (isDeleteTempDirectory()) {
deleteTmpFolders();
}
}
return true;
}
}