Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/langtools/test/tools/javadoc/CompletionError.java
32285 views
1
/*
2
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
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 8135307
27
* @summary Check that CompletionFailures for missing classes are not incorrectly passed to
28
* the javadoc API clients.
29
* @modules jdk.javadoc
30
* @run main CompletionError
31
*/
32
33
import java.io.File;
34
import java.net.URI;
35
import java.nio.file.Files;
36
import java.nio.file.Paths;
37
import java.util.Arrays;
38
import java.util.List;
39
40
import javax.tools.JavaCompiler;
41
import javax.tools.JavaFileObject;
42
import javax.tools.SimpleJavaFileObject;
43
import javax.tools.ToolProvider;
44
45
import com.sun.javadoc.*;
46
import com.sun.tools.javadoc.Main;
47
48
public class CompletionError extends Doclet
49
{
50
private static final String template =
51
"public class CompletionErrorAuxiliary #extends CompletionErrorMissing# #implements CompletionErrorIntfMissing# {" +
52
" #public CompletionErrorMissing tf;#" +
53
" #public CompletionErrorMissing tm() { return null; }#" +
54
" #public void tm(CompletionErrorMissing m) {}#" +
55
" #public void tm() throws CompletionErrorExcMissing {}#" +
56
" #public <T extends CompletionErrorMissing> void tm() {}#" +
57
" public String toString() { return null; }" +
58
"}";
59
60
public static void main(String[] args) throws Exception {
61
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
62
String[] templateParts = template.split("#");
63
int sources = templateParts.length / 2;
64
for (int source = 0; source < sources; source++) {
65
StringBuilder testSource = new StringBuilder();
66
for (int i = 0; i < templateParts.length; i += 2) {
67
testSource.append(templateParts[i]);
68
if (i == 2 * source) {
69
testSource.append(templateParts[i + 1]);
70
}
71
}
72
test = 0;
73
testsDone = false;
74
while (!testsDone) {
75
List<JavaSource> fileObjects =
76
Arrays.asList(new JavaSource("CompletionErrorAuxiliary", testSource.toString()),
77
new JavaSource("CompletionErrorMissing", "public class CompletionErrorMissing {}"),
78
new JavaSource("CompletionErrorIntfMissing", "public interface CompletionErrorIntfMissing {}"),
79
new JavaSource("CompletionErrorExcMissing", "public class CompletionErrorExcMissing extends Exception {}"));
80
Boolean result = compiler.getTask(null, null, null, Arrays.asList("-d", "."), null, fileObjects).call();
81
if (!result)
82
throw new Error();
83
for (String delete : new String[] {"CompletionErrorMissing.class", "CompletionErrorIntfMissing.class", "CompletionErrorExcMissing.class"}) {
84
Files.delete(Paths.get(delete));
85
}
86
// run javadoc:
87
if (Main.execute("javadoc", "CompletionError", CompletionError.class.getClassLoader(),
88
"-classpath", ".",
89
System.getProperty("test.src", ".") + File.separatorChar + "CompletionError.java") != 0)
90
throw new Error();
91
}
92
}
93
}
94
95
private static int test;
96
private static boolean testsDone;
97
98
public static boolean start(com.sun.javadoc.RootDoc root) {
99
ClassDoc aux = root.classNamed("CompletionErrorAuxiliary");
100
if (aux == null)
101
throw new AssertionError("Cannot find CompletionErrorAuxiliary");
102
103
FieldDoc tf = findField(aux, "tf");
104
MethodDoc tm = findMethod(aux, "tm");
105
MethodDoc cm = findMethod(aux, "toString");
106
switch (test) {
107
case 0: aux.superclass(); break;
108
case 1: aux.superclassType(); break;
109
case 2: aux.interfaces(); break;
110
case 3: aux.interfaceTypes(); break;
111
case 4: if (tf != null) tf.type(); break;
112
case 5: if (tm != null) tm.overriddenClass(); break;
113
case 6: if (tm != null) tm.overriddenMethod(); break;
114
case 7: if (tm != null) tm.overriddenType(); break;
115
case 8:
116
if (tm != null) {
117
for (Parameter p : tm.parameters()) {
118
p.type();
119
}
120
}
121
break;
122
case 9: if (tm != null) tm.receiverType(); break;
123
case 10: if (tm != null) tm.returnType(); break;
124
case 11: if (tm != null) tm.thrownExceptionTypes(); break;
125
case 12: if (tm != null) tm.thrownExceptions(); break;
126
case 13:
127
if (tm != null) {
128
for (TypeVariable tv : tm.typeParameters()) {
129
tv.bounds();
130
}
131
}
132
break;
133
case 14: if (cm != null) cm.overriddenClass(); break;
134
case 15: if (cm != null) cm.overriddenMethod(); break;
135
case 16: if (cm != null) cm.overriddenType(); testsDone = true; break;
136
default:
137
throw new IllegalStateException("Unrecognized test!");
138
}
139
test++;
140
return true;
141
}
142
143
private static MethodDoc findMethod(ClassDoc cd, String name) {
144
for (MethodDoc m : cd.methods()) {
145
if (name.equals(m.name()))
146
return m;
147
}
148
149
return null;
150
}
151
152
private static FieldDoc findField(ClassDoc cd, String name) {
153
for (FieldDoc m : cd.fields()) {
154
if (name.equals(m.name()))
155
return m;
156
}
157
158
return null;
159
}
160
161
static class JavaSource extends SimpleJavaFileObject {
162
final String source;
163
164
public JavaSource(String name, String source) {
165
super(URI.create("myfo:/" + name + ".java"), JavaFileObject.Kind.SOURCE);
166
this.source = source;
167
}
168
169
@Override
170
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
171
return source;
172
}
173
}
174
}
175
176