Search in sources :

Example 1 with JavaOptions

use of net.morimekta.providence.generator.format.java.JavaOptions in project providence by morimekta.

the class BaseGenerateSourcesMojo method executeInternal.

boolean executeInternal(IncludeExcludeFileSelector includeDirs, File outputDir, IncludeExcludeFileSelector inputSelector, String defaultInputIncludes, boolean testCompile) throws MojoExecutionException, MojoFailureException {
    Set<File> inputFiles = ProvidenceInput.getInputFiles(project, inputSelector, defaultInputIncludes, print_debug, getLog());
    if (inputFiles.isEmpty()) {
        return false;
    }
    if (!outputDir.exists()) {
        if (!outputDir.mkdirs()) {
            throw new MojoExecutionException("Unable to create target directory " + outputDir);
        }
    }
    TreeSet<File> includes = new TreeSet<>();
    File workingDir = new File(buildDir, testCompile ? "providence-test" : "providence");
    File[] deleteFiles = workingDir.listFiles();
    if (!workingDir.exists()) {
        if (!workingDir.mkdirs()) {
            throw new MojoExecutionException("Unable to create working directory " + workingDir);
        }
    } else if (deleteFiles != null) {
        StreamSupport.<File>stream(Spliterators.spliterator(deleteFiles, Spliterator.DISTINCT | Spliterator.IMMUTABLE), false).forEach(File::delete);
    }
    Set<Artifact> resolvedArtifacts = new HashSet<>();
    for (Dependency dep : dependencies) {
        if (testCompile || !TEST.equalsIgnoreCase(dep.getScope())) {
            resolveDependency(dep, includes, workingDir, resolvedArtifacts);
        }
    }
    if (includeDirs != null) {
        DirectoryScanner includeScanner = new DirectoryScanner();
        includeScanner.setIncludes(includeDirs.getIncludes());
        if (includeDirs.getExcludes() != null) {
            includeScanner.setExcludes(includeDirs.getExcludes());
        }
        includeScanner.setBasedir(project.getBasedir());
        includeScanner.scan();
        for (String dir : includeScanner.getIncludedDirectories()) {
            includes.add(new File(project.getBasedir(), dir));
        }
        for (String dir : includeScanner.getExcludedDirectories()) {
            includes.remove(new File(project.getBasedir(), dir));
        }
    }
    FileManager fileManager = new FileManager(outputDir);
    ProgramParser parser = new ThriftProgramParser(require_field_id, require_enum_value, allow_language_reserved_names);
    TypeLoader loader = new TypeLoader(includes, parser);
    if (print_debug) {
        inputFiles.stream().filter(Objects::nonNull).map(file -> {
            try {
                return file.getAbsoluteFile().getCanonicalPath();
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }).sorted().forEach(f -> getLog().info("Compiling: " + f));
    }
    JavaOptions javaOptions = new JavaOptions();
    javaOptions.android = android;
    javaOptions.jackson = jackson;
    javaOptions.rw_binary = rw_binary;
    javaOptions.hazelcast_portable = hazelcast_portable;
    javaOptions.generated_annotation_version = generated_annotation_version;
    javaOptions.public_constructors = public_constructors;
    GeneratorOptions generatorOptions = new GeneratorOptions();
    generatorOptions.generator_program_name = "providence-maven-plugin";
    generatorOptions.program_version = getVersionString();
    GeneratorFactory factory = new JavaGeneratorFactory();
    Generator generator = new JavaGenerator(fileManager, generatorOptions, javaOptions);
    Path base = project.getBasedir().toPath().toAbsolutePath();
    if (project.getParent() != null && project.getParent().getBasedir() != null) {
        // Only replace with parent if parent is a parent directory of this.
        Path parentBase = project.getParent().getBasedir().toPath().toAbsolutePath();
        if (base.toString().startsWith(parentBase.toString())) {
            base = parentBase;
        }
    }
    for (File in : inputFiles) {
        ProgramTypeRegistry registry;
        try {
            registry = loader.load(in);
        } catch (SerializerException e) {
            // ParseException is a SerializerException. And serialize exceptions can come from
            // failing to make sense of constant definitions.
            getLog().error("    ============ >> PROVIDENCE << ============");
            getLog().error("");
            Arrays.stream(e.asString().split("\r?\n")).forEach(l -> getLog().error(l));
            getLog().error("");
            getLog().error("    ============ << PROVIDENCE >> ============");
            throw new MojoFailureException("Failed to parse thrift file: " + in.getName(), e);
        } catch (IOException e) {
            throw new MojoExecutionException("Failed to read thrift file: " + in.getName(), e);
        }
        try {
            if (skipIfMissingNamespace && registry.getProgram().getNamespaceForLanguage(factory.generatorName()) == null) {
                getLog().warn("Skipping (no " + factory.generatorName() + " namespace) " + base.relativize(in.toPath()));
                continue;
            }
            generator.generate(registry);
        } catch (GeneratorException e) {
            throw new MojoFailureException("Failed to generate program: " + registry.getProgram().getProgramName(), e);
        } catch (IOException e) {
            throw new MojoExecutionException("Failed to write program file: " + registry.getProgram().getProgramName(), e);
        }
    }
    try {
        generator.generateGlobal(loader.getProgramRegistry(), inputFiles);
    } catch (GeneratorException e) {
        throw new MojoFailureException("Failed to generate global", e);
    } catch (IOException e) {
        throw new MojoExecutionException("Failed to write global file", e);
    }
    return compileOutput;
}
Also used : Arrays(java.util.Arrays) BufferedInputStream(java.io.BufferedInputStream) ArtifactResolutionRequest(org.apache.maven.artifact.resolver.ArtifactResolutionRequest) Spliterators(java.util.Spliterators) Parameter(org.apache.maven.plugins.annotations.Parameter) IncludeExcludeFileSelector(org.codehaus.plexus.components.io.fileselectors.IncludeExcludeFileSelector) MavenProject(org.apache.maven.project.MavenProject) Strings(net.morimekta.util.Strings) Artifact(org.apache.maven.artifact.Artifact) Path(java.nio.file.Path) ZipEntry(java.util.zip.ZipEntry) ProgramTypeRegistry(net.morimekta.providence.reflect.util.ProgramTypeRegistry) GeneratorException(net.morimekta.providence.generator.GeneratorException) Set(java.util.Set) JavaGeneratorFactory(net.morimekta.providence.generator.format.java.JavaGeneratorFactory) ArtifactResolver(org.apache.maven.artifact.resolver.ArtifactResolver) UncheckedIOException(java.io.UncheckedIOException) Objects(java.util.Objects) List(java.util.List) FileManager(net.morimekta.providence.generator.util.FileManager) ThriftProgramParser(net.morimekta.providence.reflect.parser.ThriftProgramParser) GeneratorOptions(net.morimekta.providence.generator.GeneratorOptions) Spliterator(java.util.Spliterator) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings) AbstractMojo(org.apache.maven.plugin.AbstractMojo) ZipInputStream(java.util.zip.ZipInputStream) Generator(net.morimekta.providence.generator.Generator) Dependency(org.apache.maven.model.Dependency) Component(org.apache.maven.plugins.annotations.Component) ProvidenceInput(net.morimekta.providence.maven.util.ProvidenceInput) ProgramParser(net.morimekta.providence.reflect.parser.ProgramParser) ArtifactResolutionResult(org.apache.maven.artifact.resolver.ArtifactResolutionResult) TreeSet(java.util.TreeSet) BufferedOutputStream(java.io.BufferedOutputStream) HashSet(java.util.HashSet) ArtifactRepository(org.apache.maven.artifact.repository.ArtifactRepository) ProvidenceDependency(net.morimekta.providence.maven.util.ProvidenceDependency) StreamSupport(java.util.stream.StreamSupport) IOUtils(net.morimekta.util.io.IOUtils) Properties(java.util.Properties) JavaOptions(net.morimekta.providence.generator.format.java.JavaOptions) Files(java.nio.file.Files) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) GeneratorFactory(net.morimekta.providence.generator.GeneratorFactory) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) File(java.io.File) ReflectionUtils(net.morimekta.providence.reflect.util.ReflectionUtils) MojoFailureException(org.apache.maven.plugin.MojoFailureException) Paths(java.nio.file.Paths) RepositorySystem(org.apache.maven.repository.RepositorySystem) JavaGenerator(net.morimekta.providence.generator.format.java.JavaGenerator) DirectoryScanner(org.codehaus.plexus.util.DirectoryScanner) SerializerException(net.morimekta.providence.serializer.SerializerException) TypeLoader(net.morimekta.providence.reflect.TypeLoader) InputStream(java.io.InputStream) ThriftProgramParser(net.morimekta.providence.reflect.parser.ThriftProgramParser) ProgramParser(net.morimekta.providence.reflect.parser.ProgramParser) TypeLoader(net.morimekta.providence.reflect.TypeLoader) JavaGenerator(net.morimekta.providence.generator.format.java.JavaGenerator) JavaGeneratorFactory(net.morimekta.providence.generator.format.java.JavaGeneratorFactory) GeneratorOptions(net.morimekta.providence.generator.GeneratorOptions) ProgramTypeRegistry(net.morimekta.providence.reflect.util.ProgramTypeRegistry) TreeSet(java.util.TreeSet) DirectoryScanner(org.codehaus.plexus.util.DirectoryScanner) GeneratorException(net.morimekta.providence.generator.GeneratorException) ThriftProgramParser(net.morimekta.providence.reflect.parser.ThriftProgramParser) HashSet(java.util.HashSet) Path(java.nio.file.Path) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) MojoFailureException(org.apache.maven.plugin.MojoFailureException) Dependency(org.apache.maven.model.Dependency) ProvidenceDependency(net.morimekta.providence.maven.util.ProvidenceDependency) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) SerializerException(net.morimekta.providence.serializer.SerializerException) Artifact(org.apache.maven.artifact.Artifact) FileManager(net.morimekta.providence.generator.util.FileManager) JavaGeneratorFactory(net.morimekta.providence.generator.format.java.JavaGeneratorFactory) GeneratorFactory(net.morimekta.providence.generator.GeneratorFactory) JavaOptions(net.morimekta.providence.generator.format.java.JavaOptions) File(java.io.File) Generator(net.morimekta.providence.generator.Generator) JavaGenerator(net.morimekta.providence.generator.format.java.JavaGenerator)

Aggregations

SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)1 BufferedInputStream (java.io.BufferedInputStream)1 BufferedOutputStream (java.io.BufferedOutputStream)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 UncheckedIOException (java.io.UncheckedIOException)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 Paths (java.nio.file.Paths)1 Arrays (java.util.Arrays)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Objects (java.util.Objects)1 Properties (java.util.Properties)1 Set (java.util.Set)1 Spliterator (java.util.Spliterator)1 Spliterators (java.util.Spliterators)1