6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112 8028545 8000961 8030610 8028546 8188870
27 * @summary Check interpretation of -target and -source options
28 * @modules java.compiler
29 * jdk.compiler
30 * @run main Versions
31 */
32
33 import java.io.*;
34 import java.nio.*;
35 import java.nio.channels.*;
36
37 import javax.tools.JavaCompiler;
38 import javax.tools.ToolProvider;
39 import javax.tools.JavaFileObject;
40 import javax.tools.StandardJavaFileManager;
41 import java.util.List;
42 import java.util.ArrayList;
43 import java.util.Arrays;
44
45
46 public class Versions {
53 genSourceFiles();
54 failedCases = 0;
55 }
56
57 public static void main(String... args) throws IOException {
58 Versions versions = new Versions();
59 versions.run();
60 }
61
62 void run() {
63
64 String TC = "";
65 System.out.println("Version.java: Starting");
66
67 check("54.0");
68 check("54.0", "-source 1.6");
69 check("54.0", "-source 1.7");
70 check("54.0", "-source 1.8");
71 check("54.0", "-source 1.9");
72 check("54.0", "-source 1.10");
73
74 check_source_target("50.0", "6", "6");
75 check_source_target("51.0", "6", "7");
76 check_source_target("51.0", "7", "7");
77 check_source_target("52.0", "6", "8");
78 check_source_target("52.0", "7", "8");
79 check_source_target("52.0", "8", "8");
80 check_source_target("53.0", "6", "9");
81 check_source_target("53.0", "7", "9");
82 check_source_target("53.0", "8", "9");
83 check_source_target("53.0", "9", "9");
84 check_source_target("54.0", "6", "10");
85 check_source_target("54.0", "7", "10");
86 check_source_target("54.0", "8", "10");
87 check_source_target("54.0", "9", "10");
88 check_source_target("54.0", "10", "10");
89
90 checksrc16("-source 1.6");
91 checksrc16("-source 6");
92 checksrc16("-source 1.6", "-target 1.6");
93 checksrc16("-source 6", "-target 6");
94 checksrc17("-source 1.7");
95 checksrc17("-source 7");
96 checksrc17("-source 1.7", "-target 1.7");
97 checksrc17("-source 7", "-target 7");
98 checksrc18("-source 1.8");
99 checksrc18("-source 8");
100 checksrc18("-source 1.8", "-target 1.8");
101 checksrc18("-source 8", "-target 8");
102 checksrc19("-source 1.9");
103 checksrc19("-source 9");
104 checksrc19("-source 1.9", "-target 1.9");
105 checksrc19("-source 9", "-target 9");
106 checksrc110();
107 checksrc110("-source 1.10");
108 checksrc110("-source 10");
109 checksrc110("-source 1.10", "-target 1.10");
110 checksrc110("-source 10", "-target 10");
111 checksrc110("-target 1.10");
112 checksrc110("-target 10");
113
114 fail("-source 7", "-target 1.6", "Base.java");
115 fail("-source 8", "-target 1.6", "Base.java");
116 fail("-source 8", "-target 1.7", "Base.java");
117 fail("-source 9", "-target 1.7", "Base.java");
118 fail("-source 9", "-target 1.8", "Base.java");
119 fail("-source 10", "-target 1.7", "Base.java");
120 fail("-source 10", "-target 1.8", "Base.java");
121
122 fail("-source 1.5", "-target 1.5", "Base.java");
123 fail("-source 1.4", "-target 1.4", "Base.java");
124 fail("-source 1.3", "-target 1.3", "Base.java");
125 fail("-source 1.2", "-target 1.2", "Base.java");
126
127 if (failedCases > 0) {
128 System.err.println("failedCases = " + String.valueOf(failedCases));
129 throw new Error("Test failed");
130 }
131
132 }
133
134 protected void printargs(String fname,String... args) {
135 System.out.printf("test: %s", fname);
136 for (String onearg : args) {
137 System.out.printf(" %s", onearg);
138 }
139 System.out.printf("\n", fname);
140 }
141
142 protected void check_source_target(String... args) {
143 printargs("check_source_target", args);
144 check_target(args[0], args[1], args[2]);
145 check_target(args[0], "1." + args[1], args[2]);
146 }
147
148 protected void check_target(String... args) {
149 check(args[0], "-source " + args[1], "-target " + args[2]);
150 check(args[0], "-source " + args[1], "-target 1." + args[2]);
151 }
152
153 protected void check(String major, String... args) {
154 printargs("check", args);
155 List<String> jcargs = new ArrayList<String>();
156 jcargs.add("-Xlint:-options");
157
158 // add in args conforming to List requrements of JavaCompiler
159 for (String onearg : args) {
160 String[] fields = onearg.split(" ");
161 for (String onefield : fields) {
162 jcargs.add(onefield);
163 }
164 }
165
166 boolean creturn = compile("Base.java", jcargs);
167 if (!creturn) {
168 // compilation errors note and return.. assume no class file
169 System.err.println("check: Compilation Failed");
170 System.err.println("\t classVersion:\t" + major);
171 System.err.println("\t arguments:\t" + jcargs);
172 failedCases++;
173
174 } else if (!checkClassFileVersion("Base.class", major)) {
175 failedCases++;
190 protected void checksrc17(String... args) {
191 printargs("checksrc17", args);
192 int asize = args.length;
193 String[] newargs = new String[asize+1];
194 System.arraycopy(args, 0, newargs,0 , asize);
195 newargs[asize] = "New17.java";
196 pass(newargs);
197 newargs[asize] = "New18.java";
198 fail(newargs);
199 }
200
201 protected void checksrc18(String... args) {
202 printargs("checksrc18", args);
203 int asize = args.length;
204 String[] newargs = new String[asize+1];
205 System.arraycopy(args, 0, newargs,0 , asize);
206 newargs[asize] = "New17.java";
207 pass(newargs);
208 newargs[asize] = "New18.java";
209 pass(newargs);
210 }
211
212 protected void checksrc19(String... args) {
213 printargs("checksrc19", args);
214 checksrc18(args);
215 }
216
217 protected void checksrc110(String... args) {
218 printargs("checksrc110", args);
219 checksrc19(args);
220 }
221
222 protected void pass(String... args) {
223 printargs("pass", args);
224
225 List<String> jcargs = new ArrayList<String>();
226 jcargs.add("-Xlint:-options");
227
228 // add in args conforming to List requrements of JavaCompiler
229 for (String onearg : args) {
230 String[] fields = onearg.split(" ");
231 for (String onefield : fields) {
232 jcargs.add(onefield);
233 }
234 }
235
236 // empty list is error
237 if (jcargs.isEmpty()) {
238 System.err.println("error: test error in pass() - No arguments");
239 System.err.println("\t arguments:\t" + jcargs);
326 protected void genSourceFiles() throws IOException{
327 /* Create a file that executes with all supported versions. */
328 writeSourceFile("Base.java","public class Base { }\n");
329
330 /*
331 * Create a file with a new feature in 1.7, not in 1.6 : "<>"
332 */
333 writeSourceFile("New17.java",
334 "import java.util.List;\n" +
335 "import java.util.ArrayList;\n" +
336 "class New17 { List<String> s = new ArrayList<>(); }\n"
337 );
338
339 /*
340 * Create a file with a new feature in 1.8, not in 1.7 : lambda
341 */
342 writeSourceFile("New18.java",
343 "public class New18 { \n" +
344 " void m() { \n" +
345 " new Thread(() -> { }); \n" +
346 " } \n" +
347 "} \n"
348 );
349
350 }
351
352 protected boolean checkClassFileVersion
353 (String filename,String classVersionNumber) {
354 ByteBuffer bb = ByteBuffer.allocate(1024);
355 try (FileChannel fc = new FileInputStream(filename).getChannel()) {
356 bb.clear();
357 if (fc.read(bb) < 0)
358 throw new IOException("Could not read from file : " + filename);
359 bb.flip();
360 int minor = bb.getShort(4);
361 int major = bb.getShort(6);
362 String fileVersion = major + "." + minor;
363 if (fileVersion.equals(classVersionNumber)) {
364 return true;
365 } else {
|
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112 8028545 8000961 8030610 8028546 8188870 8173382
27 * @summary Check interpretation of -target and -source options
28 * @modules java.compiler
29 * jdk.compiler
30 * @run main Versions
31 */
32
33 import java.io.*;
34 import java.nio.*;
35 import java.nio.channels.*;
36
37 import javax.tools.JavaCompiler;
38 import javax.tools.ToolProvider;
39 import javax.tools.JavaFileObject;
40 import javax.tools.StandardJavaFileManager;
41 import java.util.List;
42 import java.util.ArrayList;
43 import java.util.Arrays;
44
45
46 public class Versions {
53 genSourceFiles();
54 failedCases = 0;
55 }
56
57 public static void main(String... args) throws IOException {
58 Versions versions = new Versions();
59 versions.run();
60 }
61
62 void run() {
63
64 String TC = "";
65 System.out.println("Version.java: Starting");
66
67 check("54.0");
68 check("54.0", "-source 1.6");
69 check("54.0", "-source 1.7");
70 check("54.0", "-source 1.8");
71 check("54.0", "-source 1.9");
72 check("54.0", "-source 1.10");
73 check("54.0", "-source 11");
74
75 check_source_target(true, "50.0", "6", "6");
76 check_source_target(true, "51.0", "6", "7");
77 check_source_target(true, "51.0", "7", "7");
78 check_source_target(true, "52.0", "6", "8");
79 check_source_target(true, "52.0", "7", "8");
80 check_source_target(true, "52.0", "8", "8");
81 check_source_target(true, "53.0", "6", "9");
82 check_source_target(true, "53.0", "7", "9");
83 check_source_target(true, "53.0", "8", "9");
84 check_source_target(true, "53.0", "9", "9");
85 check_source_target(true, "54.0", "6", "10");
86 check_source_target(true, "54.0", "7", "10");
87 check_source_target(true, "54.0", "8", "10");
88 check_source_target(true, "54.0", "9", "10");
89 check_source_target(true, "54.0", "10", "10");
90 check_source_target(false, "54.0", "11", "11");
91
92 checksrc16("-source 1.6");
93 checksrc16("-source 6");
94 checksrc16("-source 1.6", "-target 1.6");
95 checksrc16("-source 6", "-target 6");
96 checksrc17("-source 1.7");
97 checksrc17("-source 7");
98 checksrc17("-source 1.7", "-target 1.7");
99 checksrc17("-source 7", "-target 7");
100 checksrc18("-source 1.8");
101 checksrc18("-source 8");
102 checksrc18("-source 1.8", "-target 1.8");
103 checksrc18("-source 8", "-target 8");
104 checksrc19("-source 1.9");
105 checksrc19("-source 9");
106 checksrc19("-source 1.9", "-target 1.9");
107 checksrc19("-source 9", "-target 9");
108 checksrc110();
109 checksrc110("-source 1.10");
110 checksrc110("-source 10");
111 checksrc110("-source 1.10", "-target 1.10");
112 checksrc110("-source 10", "-target 10");
113 checksrc111("-source 11");
114 checksrc111("-source 11", "-target 11");
115 checksrc111("-target 11");
116
117 fail("-source 7", "-target 1.6", "Base.java");
118 fail("-source 8", "-target 1.6", "Base.java");
119 fail("-source 8", "-target 1.7", "Base.java");
120 fail("-source 9", "-target 1.7", "Base.java");
121 fail("-source 9", "-target 1.8", "Base.java");
122 fail("-source 10", "-target 1.7", "Base.java");
123 fail("-source 10", "-target 1.8", "Base.java");
124 fail("-source 11", "-target 1.9", "Base.java");
125 fail("-source 11", "-target 1.10", "Base.java");
126
127 fail("-source 1.5", "-target 1.5", "Base.java");
128 fail("-source 1.4", "-target 1.4", "Base.java");
129 fail("-source 1.3", "-target 1.3", "Base.java");
130 fail("-source 1.2", "-target 1.2", "Base.java");
131
132 if (failedCases > 0) {
133 System.err.println("failedCases = " + String.valueOf(failedCases));
134 throw new Error("Test failed");
135 }
136
137 }
138
139 protected void printargs(String fname,String... args) {
140 System.out.printf("test: %s", fname);
141 for (String onearg : args) {
142 System.out.printf(" %s", onearg);
143 }
144 System.out.printf("\n", fname);
145 }
146
147 protected void check_source_target(boolean dotOne, String... args) {
148 printargs("check_source_target", args);
149 check_target(dotOne, args[0], args[1], args[2]);
150 if (dotOne) {
151 check_target(dotOne, args[0], "1." + args[1], args[2]);
152 }
153 }
154
155 protected void check_target(boolean dotOne, String... args) {
156 check(args[0], "-source " + args[1], "-target " + args[2]);
157 if (dotOne) {
158 check(args[0], "-source " + args[1], "-target 1." + args[2]);
159 }
160 }
161
162 protected void check(String major, String... args) {
163 printargs("check", args);
164 List<String> jcargs = new ArrayList<>();
165 jcargs.add("-Xlint:-options");
166
167 // add in args conforming to List requrements of JavaCompiler
168 for (String onearg : args) {
169 String[] fields = onearg.split(" ");
170 for (String onefield : fields) {
171 jcargs.add(onefield);
172 }
173 }
174
175 boolean creturn = compile("Base.java", jcargs);
176 if (!creturn) {
177 // compilation errors note and return.. assume no class file
178 System.err.println("check: Compilation Failed");
179 System.err.println("\t classVersion:\t" + major);
180 System.err.println("\t arguments:\t" + jcargs);
181 failedCases++;
182
183 } else if (!checkClassFileVersion("Base.class", major)) {
184 failedCases++;
199 protected void checksrc17(String... args) {
200 printargs("checksrc17", args);
201 int asize = args.length;
202 String[] newargs = new String[asize+1];
203 System.arraycopy(args, 0, newargs,0 , asize);
204 newargs[asize] = "New17.java";
205 pass(newargs);
206 newargs[asize] = "New18.java";
207 fail(newargs);
208 }
209
210 protected void checksrc18(String... args) {
211 printargs("checksrc18", args);
212 int asize = args.length;
213 String[] newargs = new String[asize+1];
214 System.arraycopy(args, 0, newargs,0 , asize);
215 newargs[asize] = "New17.java";
216 pass(newargs);
217 newargs[asize] = "New18.java";
218 pass(newargs);
219 newargs[asize] = "New110.java";
220 fail(newargs);
221 }
222
223 protected void checksrc19(String... args) {
224 printargs("checksrc19", args);
225 checksrc18(args);
226 }
227
228 protected void checksrc110(String... args) {
229 printargs("checksrc110", args);
230 int asize = args.length;
231 String[] newargs = new String[asize+1];
232 System.arraycopy(args, 0, newargs,0 , asize);
233 newargs[asize] = "New17.java";
234 pass(newargs);
235 newargs[asize] = "New18.java";
236 pass(newargs);
237 newargs[asize] = "New110.java";
238 pass(newargs);
239 }
240
241 protected void checksrc111(String... args) {
242 printargs("checksrc111", args);
243 checksrc110(args);
244 }
245
246 protected void pass(String... args) {
247 printargs("pass", args);
248
249 List<String> jcargs = new ArrayList<String>();
250 jcargs.add("-Xlint:-options");
251
252 // add in args conforming to List requrements of JavaCompiler
253 for (String onearg : args) {
254 String[] fields = onearg.split(" ");
255 for (String onefield : fields) {
256 jcargs.add(onefield);
257 }
258 }
259
260 // empty list is error
261 if (jcargs.isEmpty()) {
262 System.err.println("error: test error in pass() - No arguments");
263 System.err.println("\t arguments:\t" + jcargs);
350 protected void genSourceFiles() throws IOException{
351 /* Create a file that executes with all supported versions. */
352 writeSourceFile("Base.java","public class Base { }\n");
353
354 /*
355 * Create a file with a new feature in 1.7, not in 1.6 : "<>"
356 */
357 writeSourceFile("New17.java",
358 "import java.util.List;\n" +
359 "import java.util.ArrayList;\n" +
360 "class New17 { List<String> s = new ArrayList<>(); }\n"
361 );
362
363 /*
364 * Create a file with a new feature in 1.8, not in 1.7 : lambda
365 */
366 writeSourceFile("New18.java",
367 "public class New18 { \n" +
368 " void m() { \n" +
369 " new Thread(() -> { }); \n" +
370 " } \n" +
371 "} \n"
372 );
373
374 /*
375 * Create a file with a new feature in 1.10, not in 1.9 : var
376 */
377 writeSourceFile("New110.java",
378 "public class New110 { \n" +
379 " void m() { \n" +
380 " var tmp = new Thread(() -> { }); \n" +
381 " } \n" +
382 "} \n"
383 );
384
385 }
386
387 protected boolean checkClassFileVersion
388 (String filename,String classVersionNumber) {
389 ByteBuffer bb = ByteBuffer.allocate(1024);
390 try (FileChannel fc = new FileInputStream(filename).getChannel()) {
391 bb.clear();
392 if (fc.read(bb) < 0)
393 throw new IOException("Could not read from file : " + filename);
394 bb.flip();
395 int minor = bb.getShort(4);
396 int major = bb.getShort(6);
397 String fileVersion = major + "." + minor;
398 if (fileVersion.equals(classVersionNumber)) {
399 return true;
400 } else {
|