Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/langtools/tools/javap/T4501661.java
41144 views
1
/*
2
* Copyright (c) 2008, 2016, 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
import java.io.*;
25
import java.util.*;
26
27
/*
28
* @test
29
* @bug 4501661
30
* @summary disallow mixing -public, -private, and -protected
31
* @modules jdk.jdeps/com.sun.tools.javap
32
*/
33
public class T4501661 {
34
public static void main(String... args) throws Exception {
35
new T4501661().run();
36
}
37
38
void run() throws Exception {
39
File javaFile = writeTestFile();
40
File classFile = compileTestFile(javaFile);
41
boolean[] values = { false, true };
42
for (boolean pack : values) {
43
for (boolean priv : values) {
44
for (boolean prot : values) {
45
for (boolean publ : values) {
46
test(pack, priv, prot, publ, classFile);
47
}
48
}
49
}
50
}
51
52
if (errors > 0)
53
throw new Exception(errors + " errors found");
54
}
55
56
void test(boolean pack, boolean priv, boolean prot, boolean publ, File classFile) {
57
List<String> args = new ArrayList<String>();
58
if (pack)
59
args.add("-package");
60
if (priv)
61
args.add("-private");
62
if (prot)
63
args.add("-protected");
64
if (publ)
65
args.add("-public");
66
boolean expectOK = (args.size() <= 1);
67
args.add(classFile.getPath());
68
String out = javap(args, expectOK);
69
if (out == null)
70
return;
71
if (!priv && !prot && !publ)
72
checkNone(out, "private");
73
if (prot)
74
checkNone(out, "private", "package");
75
if (publ)
76
checkNone(out, "private", "package", "protected");
77
}
78
79
File writeTestFile() throws IOException {
80
File f = new File("Test.java");
81
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)));
82
out.println("abstract class Test { ");
83
out.println(" public void public_m() { }");
84
out.println(" protected void protected_m() { }");
85
out.println(" private void private_m() { }");
86
out.println(" void package_m() { }");
87
out.println("}");
88
out.close();
89
return f;
90
}
91
92
File compileTestFile(File f) {
93
int rc = com.sun.tools.javac.Main.compile(new String[] { "-g", f.getPath() });
94
if (rc != 0)
95
throw new Error("compilation failed. rc=" + rc);
96
String path = f.getPath();
97
return new File(path.substring(0, path.length() - 5) + ".class");
98
}
99
100
String javap(List<String> args, boolean expectOK) {
101
StringWriter sw = new StringWriter();
102
PrintWriter pw = new PrintWriter(sw);
103
int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
104
System.err.println(args);
105
System.err.println(sw);
106
if (expectOK) {
107
if (rc == 0)
108
return sw.toString();
109
else
110
error("javap failed unexpectedly; rc=" + rc + "\n" + sw);
111
} else {
112
if (rc == 0)
113
error("javap succeeded unexpectedly");
114
}
115
return null;
116
}
117
118
void checkNone(String log, String... words) {
119
for (String word: words) {
120
if (log.indexOf(word) != -1)
121
error("\"" + word + "\" unexpectedly found in output");
122
}
123
}
124
125
void error(String msg) {
126
System.err.println("error: " + msg);
127
errors++;
128
}
129
130
int errors;
131
}
132
133