use of org.stjs.generator.MultipleFileGenerationException in project st-js by st-js.
the class AbstractSTJSMojo method execute.
/**
* {@inheritDoc}
*/
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
GenerationDirectory gendir = getGeneratedSourcesDirectory();
long t1 = System.currentTimeMillis();
getLog().info("Generating JavaScript files to " + gendir.getGeneratedSourcesAbsolutePath());
ClassLoader builtProjectClassLoader = getBuiltProjectClassLoader();
GeneratorConfigurationBuilder configBuilder = new GeneratorConfigurationBuilder();
configBuilder.generateArrayHasOwnProperty(generateArrayHasOwnProperty);
configBuilder.generateSourceMap(generateSourceMap);
if (sourceEncoding != null) {
configBuilder.sourceEncoding(sourceEncoding);
}
// configBuilder.allowedPackage("org.stjs.javascript");
configBuilder.allowedPackage("org.junit");
if (allowedPackages != null) {
configBuilder.allowedPackages(allowedPackages);
}
if (annotations != null) {
configBuilder.annotations(annotations);
}
// scan all the packages
for (String sourceRoot : getCompileSourceRoots()) {
File sourceDir = new File(sourceRoot);
Collection<String> packages = accumulatePackages(sourceDir);
configBuilder.allowedPackages(packages);
}
configBuilder.stjsClassLoader(builtProjectClassLoader);
configBuilder.targetFolder(getBuildOutputDirectory());
configBuilder.generationFolder(gendir);
GeneratorConfiguration configuration = configBuilder.build();
Generator generator = new Generator(configuration);
int generatedFiles = 0;
boolean hasFailures = false;
// scan the modified sources
for (String sourceRoot : getCompileSourceRoots()) {
File sourceDir = new File(sourceRoot);
SourceMapping mapping = new SuffixMapping(".java", ".js");
SourceMapping stjsMapping = new SuffixMapping(".java", ".stjs");
List<File> sources = accumulateSources(gendir, sourceDir, mapping, stjsMapping, staleMillis);
for (File source : sources) {
if (source.getName().equals(PACKAGE_INFO_JAVA)) {
getLog().debug("Skipping " + source);
continue;
}
File absoluteSource = new File(sourceDir, source.getPath());
try {
File absoluteTarget = (File) mapping.getTargetFiles(gendir.getGeneratedSourcesAbsolutePath(), source.getPath()).iterator().next();
if (getLog().isDebugEnabled()) {
getLog().debug("Generating " + absoluteTarget);
}
buildContext.removeMessages(absoluteSource);
if (!absoluteTarget.getParentFile().exists() && !absoluteTarget.getParentFile().mkdirs()) {
getLog().error("Cannot create output directory:" + absoluteTarget.getParentFile());
continue;
}
String className = getClassNameForSource(source.getPath());
ClassWithJavascript stjsClass = generator.generateJavascript(className, sourceDir);
if (!(stjsClass instanceof BridgeClass)) {
++generatedFiles;
}
} catch (InclusionScanException e) {
throw new MojoExecutionException("Cannot scan the source directory:" + e, e);
} catch (MultipleFileGenerationException e) {
for (JavascriptFileGenerationException jse : e.getExceptions()) {
buildContext.addMessage(jse.getSourcePosition().getFile(), jse.getSourcePosition().getLine(), jse.getSourcePosition().getColumn(), jse.getMessage(), BuildContext.SEVERITY_ERROR, null);
}
hasFailures = true;
// continue with the next file
} catch (JavascriptFileGenerationException e) {
buildContext.addMessage(e.getSourcePosition().getFile(), e.getSourcePosition().getLine(), e.getSourcePosition().getColumn(), e.getMessage(), BuildContext.SEVERITY_ERROR, null);
hasFailures = true;
// continue with the next file
} catch (Exception e) {
// TODO - maybe should filter more here
buildContext.addMessage(absoluteSource, 1, 1, e.toString(), BuildContext.SEVERITY_ERROR, e);
hasFailures = true;
// throw new MojoExecutionException("Error generating javascript:" + e, e);
}
}
}
generator.close();
long t2 = System.currentTimeMillis();
getLog().info("Generated " + generatedFiles + " JavaScript files in " + (t2 - t1) + " ms");
if (generatedFiles > 0) {
filesGenerated(generator, gendir);
}
if (hasFailures) {
throw new MojoFailureException("Errors generating JavaScript");
}
}
Aggregations