diff --git a/build-caching/src/main/java/com/vertispan/j2cl/build/Project.java b/build-caching/src/main/java/com/vertispan/j2cl/build/Project.java index f25ebeb1..53822eca 100644 --- a/build-caching/src/main/java/com/vertispan/j2cl/build/Project.java +++ b/build-caching/src/main/java/com/vertispan/j2cl/build/Project.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -27,9 +28,7 @@ public class Project implements com.vertispan.j2cl.build.task.Project { private File jar; - private Optional isAPT = Optional.empty(); - - private Set processors = new HashSet<>(); + private Set processors; public Project(String key) { this.key = key; @@ -99,53 +98,35 @@ public boolean isJsZip() { return isJsZip; } - /* - * This is a bit of a hack, but it's the only way to know if a jar contains APT processors - * Note: isAPT() must be called before getProcessors - */ @Override - public boolean isAPT() { - if (isAPT.isEmpty()) { + public File getJar() { + return jar; + } + + public void setJar(File jar) { + this.jar = jar; + } + + @Override + public Set getProcessors() { + if (processors == null) { if (jar == null || isJsZip() || hasSourcesMapped()) { - isAPT = Optional.of(false); - return false; + processors = Collections.emptySet(); } else if (jar.exists()) { + processors = new HashSet<>(); try (ZipFile zipFile = new ZipFile(jar)) { ZipEntry entry = zipFile.getEntry("META-INF/services/javax.annotation.processing.Processor"); if (entry != null) { - this.isAPT = Optional.of(true); - try (InputStreamReader inputStreamReader = new InputStreamReader(zipFile.getInputStream(entry), StandardCharsets.UTF_8); BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) { bufferedReader.lines().forEach(line -> processors.add(line.trim())); - if (!processors.isEmpty()) { - this.isAPT = Optional.of(true); - } - } catch (IOException e) { - throw new RuntimeException(e); } - } else { - this.isAPT = Optional.of(false); } } catch (IOException e) { throw new RuntimeException(e); } } } - return isAPT.get(); - } - - @Override - public File getJar() { - return jar; - } - - public void setJar(File jar) { - this.jar = jar; - } - - @Override - public Set getProcessors() { return processors; } } diff --git a/build-caching/src/main/java/com/vertispan/j2cl/build/task/Project.java b/build-caching/src/main/java/com/vertispan/j2cl/build/task/Project.java index 896d872e..061fdc08 100644 --- a/build-caching/src/main/java/com/vertispan/j2cl/build/task/Project.java +++ b/build-caching/src/main/java/com/vertispan/j2cl/build/task/Project.java @@ -21,9 +21,7 @@ public interface Project { * @return true if this project should only be used for its JS content, false otherwise */ boolean isJsZip(); - - boolean isAPT(); - + File getJar(); /** diff --git a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/BytecodeTask.java b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/BytecodeTask.java index ee69c861..14d46cd8 100644 --- a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/BytecodeTask.java +++ b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/BytecodeTask.java @@ -81,7 +81,7 @@ public Task resolve(Project project, Config config) { List bytecodeClasspath = scope(project.getDependencies() .stream() - .filter(dependency -> !dependency.getProject().isAPT()).collect(Collectors.toSet()), + .filter(dependency -> dependency.getProject().getProcessors().isEmpty()).collect(Collectors.toSet()), com.vertispan.j2cl.build.task.Dependency.Scope.COMPILE) .stream() .map(inputs(OutputTypes.BYTECODE)) @@ -101,7 +101,7 @@ public Task resolve(Project project, Config config) { project.getDependencies() .stream() .map(d -> d.getProject()) - .filter(Project::isAPT) + .filter(p -> !p.getProcessors().isEmpty()) .forEach(p -> { processors.addAll(p.getProcessors()); extraClasspath.add(p.getJar()); diff --git a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/J2clTask.java b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/J2clTask.java index cc032950..0018e5af 100644 --- a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/J2clTask.java +++ b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/J2clTask.java @@ -43,7 +43,7 @@ public Task resolve(Project project, Config config) { // From our classpath, j2cl is only interested in our compile classpath's bytecode List classpathHeaders = scope(project.getDependencies().stream() - .filter(dep -> !dep.getProject().isAPT()) + .filter(dep -> dep.getProject().getProcessors().isEmpty()) .collect(Collectors.toSet()), com.vertispan.j2cl.build.task.Dependency.Scope.COMPILE) .stream() .map(inputs(OutputTypes.STRIPPED_BYTECODE_HEADERS)) diff --git a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/TurbineTask.java b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/TurbineTask.java index 2a217f95..07eb6da0 100644 --- a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/TurbineTask.java +++ b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/TurbineTask.java @@ -52,7 +52,7 @@ public Task resolve(Project project, Config config) { List extraClasspath = config.getExtraClasspath(); List compileClasspath = scope(project.getDependencies().stream() - .filter(dep -> !dep.getProject().isAPT()) + .filter(dep -> dep.getProject().getProcessors().isEmpty()) .collect(Collectors.toSet()), Dependency.Scope.COMPILE) .stream() .map(p -> input(p, OutputTypes.STRIPPED_BYTECODE_HEADERS))