|
1 /* |
|
2 * Copyright 1998-2006 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
|
20 * CA 95054 USA or visit www.sun.com if you need additional information or |
|
21 * have any questions. |
|
22 */ |
|
23 |
|
24 /* |
|
25 * @test |
|
26 * @bug 4109894 4239646 4785453 |
|
27 * @summary Verify that class modifiers bits written into class |
|
28 * file are correct, including those within InnerClasses attributes. |
|
29 * @author John Rose (jrose). Entered as a regression test by Bill Maddox (maddox). |
|
30 * |
|
31 * @compile/ref=ClassModifiers.out -XDstdout -XDdumpmodifiers=ci ClassModifiers.java |
|
32 * |
|
33 */ |
|
34 |
|
35 class T { |
|
36 //all "protected" type members are transformed to "public" |
|
37 //all "private" type members are transformed to package-scope |
|
38 //all "static" type members are transformed to non-static |
|
39 |
|
40 //a class is one of {,public,private,protected}x{,static}x{,abstract,final} |
|
41 //all of these 24 combinations are legal |
|
42 //all of these 24 combinations generate distinct InnerClasses modifiers |
|
43 //transformed class modifiers can be {,public}x{,abstract,final} |
|
44 //thus, each of the next 6 groups of 4 have identical transformed modifiers |
|
45 |
|
46 class iC{} |
|
47 static class iSC{} |
|
48 private class iVC{} |
|
49 static private class iSVC{} |
|
50 |
|
51 final class iFC{} |
|
52 static final class iSFC{} |
|
53 final private class iFVC{} |
|
54 static final private class iSFVC{} |
|
55 |
|
56 abstract class iAC{} |
|
57 static abstract class iSAC{} |
|
58 abstract private class iAVC{} |
|
59 static abstract private class iSAVC{} |
|
60 |
|
61 protected class iRC{} |
|
62 static protected class iSRC{} |
|
63 public class iUC{} |
|
64 static public class iSUC{} |
|
65 |
|
66 final protected class iFRC{} |
|
67 static final protected class iSFRC{} |
|
68 final public class iFUC{} |
|
69 static final public class iSFUC{} |
|
70 |
|
71 abstract protected class iARC{} |
|
72 static abstract protected class iSARC{} |
|
73 abstract public class iAUC{} |
|
74 static abstract public class iSAUC{} |
|
75 |
|
76 //all interface members are automatically "static" whether marked so or not |
|
77 //all interfaces are automatically "abstract" whether marked so or not |
|
78 //thus, interface modifiers are only distinguished by access permissions |
|
79 //thus, each of the next 4 groups of 4 classes have identical modifiers |
|
80 interface iI{} |
|
81 static interface iSI{} |
|
82 abstract interface iAI{} |
|
83 static abstract interface iSAI{} |
|
84 |
|
85 protected interface iRI{} |
|
86 static protected interface iSRI{} |
|
87 abstract protected interface iARI{} |
|
88 static abstract protected interface iSARI{} |
|
89 |
|
90 private interface iVI{} |
|
91 static private interface iSVI{} |
|
92 abstract private interface iAVI{} |
|
93 static abstract private interface iSAVI{} |
|
94 |
|
95 public interface iUI{} |
|
96 static public interface iSUI{} |
|
97 abstract public interface iAUI{} |
|
98 static abstract public interface iSAUI{} |
|
99 } |
|
100 |
|
101 interface U { |
|
102 //no members can be "protected" or "private" |
|
103 |
|
104 //all type members are automatically "public" whether marked so or not |
|
105 //all type members are automatically "static" whether marked so or not |
|
106 //thus, each of the next 3 groups of 4 classes have identical modifiers |
|
107 class jC{} |
|
108 static class jSC{} |
|
109 public class jUC{} |
|
110 static public class jSUC{} |
|
111 |
|
112 final class jFC{} |
|
113 static final class jSFC{} |
|
114 final public class jFUC{} |
|
115 static final public class jSFUC{} |
|
116 |
|
117 abstract class jAC{} |
|
118 static abstract class jSAC{} |
|
119 abstract public class jAUC{} |
|
120 static abstract public class jSAUC{} |
|
121 |
|
122 //all interface members are automatically "static" whether marked so or not |
|
123 //all interfaces are automatically "abstract" whether marked so or not |
|
124 //thus, all 8 of the following classes have identical modifiers: |
|
125 interface jI{} |
|
126 static interface jSI{} |
|
127 abstract interface jAI{} |
|
128 static abstract interface jSAI{} |
|
129 public interface jUI{} |
|
130 static public interface jSUI{} |
|
131 abstract public interface jAUI{} |
|
132 static abstract public interface jSAUI{} |
|
133 } |