diff --git a/j2cl-maven-plugin/src/it/annotation-processor-in-reactor/processor/src/main/java/com/example/MyProcessor.java b/j2cl-maven-plugin/src/it/annotation-processor-in-reactor/processor/src/main/java/com/example/MyProcessor.java index a83b1f6e..121e4a40 100644 --- a/j2cl-maven-plugin/src/it/annotation-processor-in-reactor/processor/src/main/java/com/example/MyProcessor.java +++ b/j2cl-maven-plugin/src/it/annotation-processor-in-reactor/processor/src/main/java/com/example/MyProcessor.java @@ -47,6 +47,9 @@ public boolean process(Set annotations, RoundEnvironment Filer filer = processingEnv.getFiler(); elements.stream().filter(e -> e.getKind().isInterface()).forEach(type -> { + + System.out.println("Found annotated type: " + type); + //emit a new class for that type, with no-arg string methods try { ClassName origClassName = ClassName.get((TypeElement) type); @@ -79,7 +82,9 @@ public boolean process(Set annotations, RoundEnvironment } } JavaFile newFile = JavaFile.builder(origClassName.packageName(), builder.build()).build(); + System.out.println("writing: " + origClassName.simpleName() + "_Impl"); newFile.writeTo(filer); + System.out.println("wrote: " + origClassName.simpleName() + "_Impl"); } catch (IOException e) { throw new UncheckedIOException(e); } diff --git a/j2cl-tasks/pom.xml b/j2cl-tasks/pom.xml index 5ff39cf7..c1f9a9db 100644 --- a/j2cl-tasks/pom.xml +++ b/j2cl-tasks/pom.xml @@ -86,7 +86,7 @@ org.eclipse.jdt org.eclipse.jdt.core - 3.34.0 + 3.37.0 org.eclipse.platform @@ -96,6 +96,14 @@ org.eclipse.platform org.eclipse.equinox.common + + org.eclipse.platform + org.eclipse.equinox.preferences + + + org.eclipse.platform + org.eclipse.core.runtime + 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 14d46cd8..fd77f7e5 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 @@ -48,7 +48,7 @@ public String getOutputType() { @Override public String getTaskName() { - return "default"; + return "javac"; } @Override @@ -161,10 +161,7 @@ protected File getGeneratedClassesDir(TaskContext context) { return context.outputPath().toFile(); } - private Set maybeAddInReactorAptProcessor(List reactorProcessors, Set processors) { - if (processors.isEmpty()) { - return Collections.emptySet(); - } + public Set maybeAddInReactorAptProcessor(List reactorProcessors, Set processors) { Set existingProcessors = new HashSet<>(processors); reactorProcessors.forEach(input -> input.getFilesAndHashes().forEach(file -> { try (Stream lines = Files.lines(file.getAbsolutePath())) { diff --git a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/JdtBytecodeTask.java b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/JdtBytecodeTask.java index 0a8191de..fba47458 100644 --- a/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/JdtBytecodeTask.java +++ b/j2cl-tasks/src/main/java/com/vertispan/j2cl/build/provided/JdtBytecodeTask.java @@ -61,7 +61,7 @@ public Task resolve(Project project, Config config) { .stream() //.filter(dependency -> !dependency.isJsZip()) .forEach(dependency -> { - System.out.println("Dependency: " + dependency.getKey()); + //System.out.println("Dependency: " + dependency.getKey()); }); List bytecodeClasspath = scope(project.getDependencies() @@ -142,23 +142,16 @@ public Task resolve(Project project, Config config) { File generatedClassesDir = getGeneratedClassesDir(context); File classOutputDir = context.outputPath().toFile(); - - sourcePaths.forEach(s -> { - System.out.println("Source Path: " + s.getAbsolutePath()); - }); - - classpathDirs.forEach(f -> { - System.out.println("Classpath Dir: " + f.getAbsolutePath()); - }); - - + System.out.println("started : " + project.getKey()); Jdt javac = new Jdt(context, generatedClassesDir, sourcePaths, classpathDirs, classOutputDir, aptProcessors); + System.out.println("finished : " + project.getKey()); + // TODO convention for mapping to original file paths, provide FileInfo out of Inputs instead of Paths, // automatically relativized? List sources = inputSources.getFilesAndHashes() .stream() - .filter(p -> !p.getAbsolutePath().toFile().getName().equals("moduleinfo.java")) + .filter(p -> !p.getAbsolutePath().toFile().getName().equals("module-info.java")) .map(p -> SourceUtils.FileInfo.create(p.getAbsolutePath().toString(), p.getSourcePath().toString())) .collect(Collectors.toUnmodifiableList()); diff --git a/j2cl-tasks/src/main/java/com/vertispan/j2cl/tools/Jdt.java b/j2cl-tasks/src/main/java/com/vertispan/j2cl/tools/Jdt.java new file mode 100644 index 00000000..b745bc7e --- /dev/null +++ b/j2cl-tasks/src/main/java/com/vertispan/j2cl/tools/Jdt.java @@ -0,0 +1,89 @@ +package com.vertispan.j2cl.tools; + +import com.google.j2cl.common.SourceUtils; +import com.vertispan.j2cl.build.task.BuildLog; +import org.eclipse.jdt.core.compiler.batch.BatchCompiler; +import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies; +import org.eclipse.jdt.internal.compiler.batch.Main; + +import javax.lang.model.SourceVersion; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class Jdt { + + private final BuildLog log; + private final List javacOptions; + + public Jdt(BuildLog log, File generatedClassesPath, List sourcePaths, List classpath, File classesDirFile, Set processors) { + this.log = log; + this.javacOptions = new ArrayList<>(Arrays.asList("-encoding", "utf8")); + //this.javacOptions = new ArrayList<>(); + + + + if (generatedClassesPath == null) { + javacOptions.add("-proc:none"); + } + if (SourceVersion.latestSupported().compareTo(SourceVersion.RELEASE_11) >= 0) { + //none + } + javacOptions.add("-11"); + + if (!processors.isEmpty()) { + javacOptions.add("-processor"); + javacOptions.add(String.join(",", processors)); + System.out.println("processors: " + String.join(",", processors)); + + } else { + System.out.println("No processors"); + javacOptions.add("-proc:none"); + } + + javacOptions.add("-sourcepath"); + javacOptions.add(sourcePaths.stream().map(File::getAbsolutePath).collect(Collectors.joining(":"))); + + System.out.println("sourcepath: " + sourcePaths.stream().map(File::getAbsolutePath).collect(Collectors.joining(":"))); + + javacOptions.add("-classpath"); + + System.out.println("classpath: "); + classpath.stream().map(File::getAbsolutePath).forEach(e -> { + //System.out.println(e); + }); + + javacOptions.add(classpath.stream().map(File::getAbsolutePath).collect(Collectors.joining(":"))); + + javacOptions.add("-d"); // -d destination directory + javacOptions.add(classesDirFile.getAbsolutePath()); + javacOptions.add("-s"); //-s destination directory for generated source files + javacOptions.add(generatedClassesPath.getAbsolutePath()); + javacOptions.add("-time"); + javacOptions.add("-XprintProcessorInfo"); + javacOptions.add("-XprintRounds"); + + System.out.println("-D " + classesDirFile.getAbsolutePath()); + System.out.println("-S " + generatedClassesPath.getAbsolutePath()); + + } + + public boolean compile(List modifiedJavaFiles) { + modifiedJavaFiles.forEach(f -> javacOptions.add(f.sourcePath())); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ByteArrayOutputStream errorOutputStream = new ByteArrayOutputStream(); + + boolean result = BatchCompiler.compile(javacOptions.toArray(new String[javacOptions.size()]), new PrintWriter(outputStream), new PrintWriter(errorOutputStream), null); + + log.info(outputStream.toString(Charset.defaultCharset())); + log.error(errorOutputStream.toString(Charset.defaultCharset())); + return result; + } +} diff --git a/j2cl-tasks/src/main/java/com/vertispan/j2cl/tools/JdtCompiler.java b/j2cl-tasks/src/main/java/com/vertispan/j2cl/tools/JdtCompiler.java deleted file mode 100644 index 21747199..00000000 --- a/j2cl-tasks/src/main/java/com/vertispan/j2cl/tools/JdtCompiler.java +++ /dev/null @@ -1,2 +0,0 @@ -package com.vertispan.j2cl.tools;public class JdtCompiler { -}