< prev index next >
test/langtools/tools/javac/classfiles/ClassVersionChecker.java
Print this page
*** 33,88 ****
import java.io.*;
import java.nio.*;
import java.util.*;
import java.util.regex.*;
public class ClassVersionChecker {
int errors;
! String[] jdk = {"", "1.6", "1.7", "1.8", "1.9", "1.10", "11", "12"};
File javaFile = null;
public static void main(String[] args) throws Throwable {
new ClassVersionChecker().run();
}
void run() throws Exception {
writeTestFile();
! /* Rules applicable for -source and -target combinations
* 1. If both empty, version num is for the current release
! * 2. If source is not empty and target is empty, version is based on source
* 3. If both non-empty, version is based on target
*/
!
! /* -source (0=>empty,1=>1.2,...) X -target (0=>empty,1=>1.2,...)
! * ver[0][0] => no -source or -target was given
! * -1 => invalid combinations
! */
! int[][] ver =
! {{56, -1, -1, -1, -1, -1, -1, -1},
! {56, 50, 51, 52, 53, 54, 55, 56},
! {56, -1, 51, 52, 53, 54, 55, 56},
! {56, -1, -1, 52, 53, 54, 55, 56},
! {56, -1, -1, -1, 53, 54, 55, 56},
! {56, -1, -1, -1, -1, 54, 55, 56}};
!
! // Loop to run all possible combinations of source/target values
! for (int i = 0; i< ver.length; i++) {
! for (int j = 0 ; j< ver[i].length; j++) {
! if(ver[i][j] != -1) {
! logMsg("Index values for i = " + i + " j = " + j);
! logMsg("Running for src = " + jdk[i] + " target = "+jdk[j] +" expected = " + ver[i][j]);
! test(i,j, ver[i][j]);
}
}
}
if (errors > 0)
throw new Exception(errors + " errors found");
}
! void test (int i, int j, int expected) {
File classFile = compileTestFile(i, j, javaFile);
short majorVer = getMajorVersion(classFile);
checkVersion(majorVer, expected);
}
--- 33,111 ----
import java.io.*;
import java.nio.*;
import java.util.*;
import java.util.regex.*;
+ /*
+ * If not explicitly specified the latest source and latest target
+ * values are the defaults. If explicitly specified, the target value
+ * has to be greater than or equal to the source value.
+ */
public class ClassVersionChecker {
+ private static enum Version {
+ SIX("6", 50),
+ SEVEN("7", 51),
+ EIGHT("8", 52),
+ NINE("9", 53),
+ TEN("10", 54),
+ ELEVEN("11", 55),
+ TWELVE("12", 56);
+
+ private Version(String release, int classFileVer) {
+ this.release = release;
+ this.classFileVer = classFileVer;
+ }
+ private final String release;
+ private final int classFileVer;
+
+ String release() {return release;}
+ int classFileVer() {return classFileVer;}
+ }
+
+ static final Version CURRENT;
+ static {
+ Version[] versions = Version.values();
+ int index = versions.length;
+ CURRENT = versions[index - 1];
+ }
int errors;
!
File javaFile = null;
public static void main(String[] args) throws Throwable {
new ClassVersionChecker().run();
}
void run() throws Exception {
writeTestFile();
! /*
! * Rules applicable for -source and -target combinations:
* 1. If both empty, version num is for the current release
! * 2. If source is not empty and target is empty, version is
! * based on the current release
* 3. If both non-empty, version is based on target
*/
! test("", "", CURRENT.classFileVer());
! for (Version source : Version.values()) {
! test(source.release(), "", CURRENT.classFileVer()); // no target
! for (Version target : Version.values()) {
! if (target.compareTo(source) < 0)
! continue; // Target < source not a valid set of arguments
! else {
! logMsg("Running for src = " + source + " target = "+ target +
! " expected = " + target.classFileVer());
! test(source.release(), target.release(), target.classFileVer());
}
}
}
if (errors > 0)
throw new Exception(errors + " errors found");
}
! void test (String i, String j, int expected) {
File classFile = compileTestFile(i, j, javaFile);
short majorVer = getMajorVersion(classFile);
checkVersion(majorVer, expected);
}
*** 95,113 ****
} catch (IOException ioe) {
error("IOException while creating Test.java" + ioe);
}
}
! File compileTestFile(int i , int j, File f) {
int rc = -1;
// Src and target are empty
! if (i == 0 && j == 0 ) {
rc = compile("-g", f.getPath());
! } else if( j == 0 ) { // target is empty
! rc = compile("-source", jdk[i], "-g", f.getPath());
} else {
! rc = compile("-source", jdk[i], "-target", jdk[j], "-g", f.getPath());
}
if (rc != 0)
throw new Error("compilation failed. rc=" + rc);
String path = f.getPath();
return new File(path.substring(0, path.length() - 5) + ".class");
--- 118,136 ----
} catch (IOException ioe) {
error("IOException while creating Test.java" + ioe);
}
}
! File compileTestFile(String i , String j, File f) {
int rc = -1;
// Src and target are empty
! if (i.isEmpty() && j.isEmpty() ) {
rc = compile("-g", f.getPath());
! } else if( j.isEmpty()) { // target is empty
! rc = compile("-source", i, "-g", f.getPath());
} else {
! rc = compile("-source", i, "-target", j, "-g", f.getPath());
}
if (rc != 0)
throw new Error("compilation failed. rc=" + rc);
String path = f.getPath();
return new File(path.substring(0, path.length() - 5) + ".class");
< prev index next >