Skip to content

Commit 1db3c5f

Browse files
authored
Merge pull request #120 from trentjeff/main
support for -proc:only compiler option
2 parents 61246fa + 34580bb commit 1db3c5f

5 files changed

Lines changed: 49 additions & 10 deletions

File tree

jOOR-java-8/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<groupId>org.jooq</groupId>
1313
<artifactId>joor-java-8</artifactId>
14-
<version>0.9.14</version>
14+
<version>0.9.14.2</version>
1515
<packaging>bundle</packaging>
1616

1717
<name>jOOR</name>

jOOR-java-8/src/main/java/org/joor/Compile.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,19 @@ static Class<?> compile(String className, String content, CompileOptions compile
9595
options.addAll(Arrays.asList("-classpath", classpath.toString()));
9696
}
9797

98-
CompilationTask task = compiler.getTask(out, fileManager, null, options, null, files);
98+
CompilationTask task = compiler.getTask(out, fileManager, compileOptions.diagnosticListener, options, null, files);
9999

100100
if (!compileOptions.processors.isEmpty())
101101
task.setProcessors(compileOptions.processors);
102102

103103
task.call();
104104

105-
if (fileManager.isEmpty())
105+
if (fileManager.isEmpty()) {
106+
if (compileOptions.hasOption("-proc:only")) {
107+
return null;
108+
}
106109
throw new ReflectException("Compilation error: " + out);
110+
}
107111

108112
Class<?> result = null;
109113

jOOR-java-8/src/main/java/org/joor/CompileOptions.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.util.List;
2222

2323
import javax.annotation.processing.Processor;
24+
import javax.tools.DiagnosticListener;
25+
import javax.tools.JavaFileObject;
2426

2527
/**
2628
* @author Lukas Eder
@@ -29,6 +31,7 @@ public final class CompileOptions {
2931

3032
final List<? extends Processor> processors;
3133
final List<String> options;
34+
DiagnosticListener<JavaFileObject> diagnosticListener;
3235

3336
public CompileOptions() {
3437
this(
@@ -60,5 +63,20 @@ public final CompileOptions options(String... newOptions) {
6063
public final CompileOptions options(List<String> newOptions) {
6164
return new CompileOptions(processors, newOptions);
6265
}
66+
67+
public boolean hasOption(String opt) {
68+
for (String option : options) {
69+
if (option.equalsIgnoreCase(opt)) {
70+
return true;
71+
}
72+
}
73+
return false;
74+
}
75+
76+
public CompileOptions withDiagnosticListener(DiagnosticListener<JavaFileObject> listener) {
77+
this.diagnosticListener = listener;
78+
return this;
79+
}
80+
6381
}
6482

jOOR-java-8/src/main/java/org/joor/Reflect.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Arrays;
2727
import java.util.LinkedHashMap;
2828
import java.util.Map;
29+
import java.util.Objects;
2930
import java.util.Optional;
3031

3132
/**
@@ -198,7 +199,7 @@ public static Reflect onClass(String name, ClassLoader classLoader) throws Refle
198199
* @return A wrapped class object, to be used for further reflection.
199200
*/
200201
public static Reflect onClass(Class<?> clazz) {
201-
return new Reflect(clazz);
202+
return Objects.isNull(clazz) ? null : new Reflect(clazz);
202203
}
203204

204205
/**

jOOR-java-8/src/test/java/org/joor/test/CompileOptionsTest.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313
*/
1414
package org.joor.test;
1515

16-
import java.io.Serializable;
1716
import java.util.Collections;
1817

19-
20-
21-
import java.util.HashSet;
18+
import java.util.Locale;
2219
import java.util.Set;
23-
import java.util.function.Supplier;
20+
import java.util.concurrent.atomic.AtomicReference;
2421

2522
import javax.annotation.processing.Completion;
2623
import javax.annotation.processing.ProcessingEnvironment;
@@ -31,11 +28,11 @@
3128
import javax.lang.model.element.Element;
3229
import javax.lang.model.element.ExecutableElement;
3330
import javax.lang.model.element.TypeElement;
31+
import javax.tools.Diagnostic;
3432

3533
import org.joor.CompileOptions;
3634
import org.joor.Reflect;
3735
import org.joor.ReflectException;
38-
import org.junit.Assert;
3936
import org.junit.Test;
4037

4138
import static org.junit.Assert.*;
@@ -159,6 +156,7 @@ public SourceVersion getSupportedSourceVersion() {
159156

160157
@Override
161158
public void init(ProcessingEnvironment processingEnv) {
159+
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "running " + getClass().getName());
162160
}
163161

164162
@Override
@@ -178,6 +176,24 @@ public Iterable<? extends Completion> getCompletions(Element element, Annotation
178176
return Collections.emptyList();
179177
}
180178
}
179+
180+
/**
181+
* -proc:only is a standard option and should be supported.
182+
* see https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
183+
*/
184+
@Test
185+
public void testProcOnlyWithDiagnostics() {
186+
AtomicReference<String> diagMessage = new AtomicReference<>();
187+
Object result = Reflect.compile("p.D", "package p; public class D extends B {} class B {}",
188+
new CompileOptions().options("-proc:only")
189+
.processors(new AProcessor())
190+
.withDiagnosticListener(diagnostic -> {
191+
diagMessage.set(diagnostic.getMessage(Locale.ENGLISH));
192+
}));
193+
assertNull(result);
194+
assertNotNull(diagMessage.get());
195+
}
196+
181197
}
182198

183199
@interface A {}

0 commit comments

Comments
 (0)