author | jjg |
Wed, 29 Oct 2014 17:25:23 -0700 | |
changeset 27319 | 030080f03e4f |
parent 10456 | 22e3243c8a81 |
child 30730 | d3ce7619db2c |
permissions | -rw-r--r-- |
10453
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
1 |
/* |
27319
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
2 |
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. |
10453
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
4 |
* |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
8 |
* |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
13 |
* accompanied this code). |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
14 |
* |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
18 |
* |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
21 |
* questions. |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
22 |
*/ |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
23 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
24 |
/* |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
25 |
* @test |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
26 |
* @bug 7079713 |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
27 |
* @summary javac hangs when compiling a class that references a cyclically inherited class |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
28 |
* @run main TestCircularClassfile |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
29 |
*/ |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
30 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
31 |
import java.io.*; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
32 |
import java.net.URI; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
33 |
import java.util.Arrays; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
34 |
import javax.tools.JavaCompiler; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
35 |
import javax.tools.JavaFileObject; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
36 |
import javax.tools.SimpleJavaFileObject; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
37 |
import javax.tools.StandardJavaFileManager; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
38 |
import javax.tools.StandardLocation; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
39 |
import javax.tools.ToolProvider; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
40 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
41 |
import com.sun.source.util.JavacTask; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
42 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
43 |
public class TestCircularClassfile { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
44 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
45 |
enum SourceKind { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
46 |
A_EXTENDS_B("class B {} class A extends B { void m() {} }"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
47 |
B_EXTENDS_A("class A { void m() {} } class B extends A {}"); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
48 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
49 |
String sourceStr; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
50 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
51 |
private SourceKind(String sourceStr) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
52 |
this.sourceStr = sourceStr; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
53 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
54 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
55 |
SimpleJavaFileObject getSource() { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
56 |
return new SimpleJavaFileObject(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
57 |
@Override |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
58 |
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
59 |
return sourceStr; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
60 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
61 |
}; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
62 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
63 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
64 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
65 |
enum TestKind { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
66 |
REPLACE_A("A.class"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
67 |
REPLACE_B("B.class"); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
68 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
69 |
String targetClass; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
70 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
71 |
private TestKind(String targetClass) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
72 |
this.targetClass = targetClass; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
73 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
74 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
75 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
76 |
enum ClientKind { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
77 |
METHOD_CALL1("A a = null; a.m();"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
78 |
METHOD_CALL2("B b = null; b.m();"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
79 |
CONSTR_CALL1("new A();"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
80 |
CONSTR_CALL2("new B();"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
81 |
ASSIGN1("A a = null; B b = a;"), |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
82 |
ASSIGN2("B b = null; A a = b;"); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
83 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
84 |
String mainMethod; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
85 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
86 |
private ClientKind(String mainMethod) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
87 |
this.mainMethod = mainMethod; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
88 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
89 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
90 |
SimpleJavaFileObject getSource() { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
91 |
return new SimpleJavaFileObject(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
92 |
@Override |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
93 |
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
94 |
return "class Test { public static void main(String[] args) { #M } }" |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
95 |
.replace("#M", mainMethod); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
96 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
97 |
}; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
98 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
99 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
100 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
101 |
public static void main(String... args) throws Exception { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
102 |
JavaCompiler comp = ToolProvider.getSystemJavaCompiler(); |
27319
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
103 |
try (StandardJavaFileManager fm = comp.getStandardFileManager(null, null, null)) { |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
104 |
int count = 0; |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
105 |
for (SourceKind sk1 : SourceKind.values()) { |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
106 |
for (SourceKind sk2 : SourceKind.values()) { |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
107 |
for (TestKind tk : TestKind.values()) { |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
108 |
for (ClientKind ck : ClientKind.values()) { |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
109 |
new TestCircularClassfile("sub_"+count++, sk1, sk2, tk, ck).check(comp, fm); |
030080f03e4f
8062348: langtools tests should close file manager (group 1)
jjg
parents:
10456
diff
changeset
|
110 |
} |
10453
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
111 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
112 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
113 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
114 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
115 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
116 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
117 |
static String workDir = System.getProperty("user.dir"); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
118 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
119 |
String destPath; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
120 |
SourceKind sk1; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
121 |
SourceKind sk2; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
122 |
TestKind tk; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
123 |
ClientKind ck; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
124 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
125 |
TestCircularClassfile(String destPath, SourceKind sk1, SourceKind sk2, TestKind tk, ClientKind ck) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
126 |
this.destPath = destPath; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
127 |
this.sk1 = sk1; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
128 |
this.sk2 = sk2; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
129 |
this.tk = tk; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
130 |
this.ck = ck; |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
131 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
132 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
133 |
void check(JavaCompiler comp, StandardJavaFileManager fm) throws Exception { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
134 |
//step 1: compile first source code in the test subfolder |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
135 |
File destDir = new File(workDir, destPath); destDir.mkdir(); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
136 |
//output dir must be set explicitly as we are sharing the fm (see bug 7026941) |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
137 |
fm.setLocation(javax.tools.StandardLocation.CLASS_OUTPUT, Arrays.asList(destDir)); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
138 |
JavacTask ct = (JavacTask)comp.getTask(null, fm, null, |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
139 |
null, null, Arrays.asList(sk1.getSource())); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
140 |
ct.generate(); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
141 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
142 |
//step 2: compile second source code in a temp folder |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
143 |
File tmpDir = new File(destDir, "tmp"); tmpDir.mkdir(); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
144 |
//output dir must be set explicitly as we are sharing the fm (see bug 7026941) |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
145 |
fm.setLocation(javax.tools.StandardLocation.CLASS_OUTPUT, Arrays.asList(tmpDir)); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
146 |
ct = (JavacTask)comp.getTask(null, fm, null, |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
147 |
null, null, Arrays.asList(sk2.getSource())); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
148 |
ct.generate(); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
149 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
150 |
//step 3: move a classfile from the temp folder to the test subfolder |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
151 |
File fileToMove = new File(tmpDir, tk.targetClass); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
152 |
File target = new File(destDir, tk.targetClass); |
10456
22e3243c8a81
7086071: tools/javac/7079713/TestCircularClassfile.java fails on windows
jjh
parents:
10453
diff
changeset
|
153 |
target.delete(); |
10453
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
154 |
boolean success = fileToMove.renameTo(target); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
155 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
156 |
if (!success) { |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
157 |
throw new AssertionError("error when moving file " + tk.targetClass); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
158 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
159 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
160 |
//step 4: compile the client class against the classes in the test subfolder |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
161 |
//input/output dir must be set explicitly as we are sharing the fm (see bug 7026941) |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
162 |
fm.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(destDir)); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
163 |
fm.setLocation(StandardLocation.CLASS_PATH, Arrays.asList(destDir)); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
164 |
ct = (JavacTask)comp.getTask(null, fm, null, |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
165 |
null, null, Arrays.asList(ck.getSource())); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
166 |
|
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
167 |
ct.generate(); |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
168 |
} |
41fe3e16698a
7079713: javac hangs when compiling a class that references a cyclically inherited class
mcimadamore
parents:
diff
changeset
|
169 |
} |