Skip to content

Commit b9db633

Browse files
author
emmanue1
committed
Improve 'CompilerUtil'
1 parent 5cccf13 commit b9db633

File tree

1 file changed

+56
-8
lines changed

1 file changed

+56
-8
lines changed

src/test/java/org/jd/core/v1/compiler/CompilerUtil.java

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,82 @@
1111
import java.io.File;
1212
import java.io.StringWriter;
1313
import java.util.Arrays;
14+
import java.util.List;
1415

1516
public class CompilerUtil {
1617
protected static final File DESTINATION_DIRECTORY = new File("build/test-recompiled");
1718
protected static final String DESTINATION_DIRECTORY_PATH = DESTINATION_DIRECTORY.getAbsolutePath();
1819

19-
public static boolean compile(String javaVersion, JavaFileObject... JavaFileObjects) throws Exception {
20+
public static boolean compile(String preferredJavaVersion, JavaFileObject... javaFileObjects) throws Exception {
2021
boolean compilationSuccess = false;
22+
String javaVersion = getJavaVersion(preferredJavaVersion);
2123

2224
DESTINATION_DIRECTORY.mkdirs();
2325

2426
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
2527
StringWriter writer = new StringWriter();
2628
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
29+
List<String> options = Arrays.asList("-source", javaVersion, "-target", javaVersion, "-d", DESTINATION_DIRECTORY_PATH, "-cp", System.getProperty("java.class.path"));
30+
List<JavaFileObject> compilationUnits = Arrays.asList(javaFileObjects);
2731

2832
try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
29-
Iterable<String> options = Arrays.asList("-source", javaVersion, "-target", javaVersion, "-d", DESTINATION_DIRECTORY_PATH);
30-
Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(JavaFileObjects);
3133
compilationSuccess = compiler.getTask(writer, fileManager, diagnostics, options, null, compilationUnits).call();
3234

33-
for (Diagnostic d : diagnostics.getDiagnostics()) {
34-
if (d.getLineNumber() > 0) {
35-
System.err.print(String.format("%-7s - line %-4d- %s%n", d.getKind(), d.getLineNumber(), d.getMessage(null)));
36-
} else {
37-
System.err.print(String.format("%-7s - - %s%n", d.getKind(), d.getMessage(null)));
35+
if (!diagnostics.getDiagnostics().isEmpty()) {
36+
StringBuilder sb = new StringBuilder();
37+
38+
for (Diagnostic d : diagnostics.getDiagnostics()) {
39+
switch (d.getKind()) {
40+
case NOTE:
41+
case WARNING:
42+
break;
43+
default:
44+
if (d.getLineNumber() > 0) {
45+
sb.append(String.format("%-7s - line %-4d- %s%n", d.getKind(), d.getLineNumber(), d.getMessage(null)));
46+
} else {
47+
sb.append(String.format("%-7s - - %s%n", d.getKind(), d.getMessage(null)));
48+
}
49+
break;
50+
}
51+
}
52+
53+
if (sb.length() > 0) {
54+
System.err.println(compilationUnits.get(0).getName());
55+
System.err.print(sb.toString());
3856
}
3957
}
4058
}
4159

4260
return compilationSuccess;
4361
}
62+
63+
private static String getJavaVersion(String preferredJavaVersion) {
64+
int numericSystemJavaVersion = parseJavaVersion(System.getProperty("java.version"));
65+
66+
if (numericSystemJavaVersion <= 8) {
67+
return preferredJavaVersion;
68+
} else {
69+
int numericPreferredJavaVersion = parseJavaVersion(preferredJavaVersion);
70+
71+
if (numericPreferredJavaVersion < 6) {
72+
return "1.6";
73+
} else {
74+
return preferredJavaVersion;
75+
}
76+
}
77+
}
78+
79+
private static int parseJavaVersion(String javaVersion) {
80+
if(javaVersion.startsWith("1.")) {
81+
javaVersion = javaVersion.substring(2, 3);
82+
} else {
83+
int index = javaVersion.indexOf(".");
84+
85+
if(index != -1) {
86+
javaVersion = javaVersion.substring(0, index);
87+
}
88+
}
89+
90+
return Integer.parseInt(javaVersion);
91+
}
4492
}

0 commit comments

Comments
 (0)