1 /*
2  * Copyright (c) 2003, 2018, 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 package nsk.jvmti.GetFieldModifiers;
25 
26 import java.io.PrintStream;
27 import java.lang.reflect.Modifier;
28 
29 public class getfldmdf004 {
30 
31     final static int JCK_STATUS_BASE = 95;
32 
33     static {
34         try {
35             System.loadLibrary("getfldmdf004");
36         } catch (UnsatisfiedLinkError ule) {
37             System.err.println("Could not load getfldmdf004 library");
38             System.err.println("java.library.path:"
39                 + System.getProperty("java.library.path"));
40             throw ule;
41         }
42     }
43 
check(int i, int mod)44     native static void check(int i, int mod);
getRes()45     native static int getRes();
46 
main(String args[])47     public static void main(String args[]) {
48         args = nsk.share.jvmti.JVMTITest.commonInit(args);
49 
50         // produce JCK-like exit status.
51         System.exit(run(args, System.out) + JCK_STATUS_BASE);
52     }
53 
54     int field0 = 0;
55     final int field1 = 1;
56     volatile int field2 = 2;
57     transient int field3 = 3;
58     transient final int field4 = 4;
59     transient volatile int field5 = 5;
60 
61     private int field6 = 6;
62     private final int field7 = 7;
63     private volatile int field8 = 8;
64     private transient int field9 = 9;
65     private transient final int field10 = 10;
66     private transient volatile int field11 = 11;
67 
68     public int field12 = 12;
69     public final int field13 = 13;
70     public volatile int field14 = 14;
71     public transient int field15 = 15;
72     public transient final int field16 = 16;
73     public transient volatile int field17 = 17;
74 
75     protected int field18 = 18;
76     protected final int field19 = 19;
77     protected volatile int field20 = 20;
78     protected transient int field21 = 21;
79     protected transient final int field22 = 22;
80     protected transient volatile int field23 = 23;
81 
82     static int field24 = 24;
83     static final int field25 = 25;
84     static volatile int field26 = 26;
85     static transient int field27 = 27;
86     static transient final int field28 = 28;
87     static transient volatile int field29 = 29;
88 
89     static private int field30 = 30;
90     static private final int field31 = 31;
91     static private volatile int field32 = 32;
92     static private transient int field33 = 33;
93     static private transient final int field34 = 34;
94     static private transient volatile int field35 = 35;
95 
96     static public int field36 = 36;
97     static public final int field37 = 37;
98     static public volatile int field38 = 38;
99     static public transient int field39 = 39;
100     static public transient final int field40 = 40;
101     static public transient volatile int field41 = 41;
102 
103     static protected int field42 = 42;
104     static protected final int field43 = 43;
105     static protected volatile int field44 = 44;
106     static protected transient int field45 = 45;
107     static protected transient final int field46 = 46;
108     static protected transient volatile int field47 = 47;
109 
run(String args[], PrintStream out)110     public static int run(String args[], PrintStream out) {
111         check(0, 0);
112         check(1, Modifier.FINAL);
113         check(2, Modifier.VOLATILE);
114         check(3, Modifier.TRANSIENT);
115         check(4, Modifier.TRANSIENT | Modifier.FINAL);
116         check(5, Modifier.TRANSIENT | Modifier.VOLATILE);
117 
118         check(6, Modifier.PRIVATE);
119         check(7, Modifier.PRIVATE | Modifier.FINAL);
120         check(8, Modifier.PRIVATE | Modifier.VOLATILE);
121         check(9, Modifier.PRIVATE | Modifier.TRANSIENT);
122         check(10, Modifier.PRIVATE | Modifier.TRANSIENT | Modifier.FINAL);
123         check(11, Modifier.PRIVATE | Modifier.TRANSIENT | Modifier.VOLATILE);
124 
125         check(12, Modifier.PUBLIC);
126         check(13, Modifier.PUBLIC | Modifier.FINAL);
127         check(14, Modifier.PUBLIC | Modifier.VOLATILE);
128         check(15, Modifier.PUBLIC | Modifier.TRANSIENT);
129         check(16, Modifier.PUBLIC | Modifier.TRANSIENT | Modifier.FINAL);
130         check(17, Modifier.PUBLIC | Modifier.TRANSIENT | Modifier.VOLATILE);
131 
132         check(18, Modifier.PROTECTED);
133         check(19, Modifier.PROTECTED | Modifier.FINAL);
134         check(20, Modifier.PROTECTED | Modifier.VOLATILE);
135         check(21, Modifier.PROTECTED | Modifier.TRANSIENT);
136         check(22, Modifier.PROTECTED | Modifier.TRANSIENT | Modifier.FINAL);
137         check(23, Modifier.PROTECTED | Modifier.TRANSIENT | Modifier.VOLATILE);
138 
139         check(24, Modifier.STATIC);
140         check(25, Modifier.STATIC | Modifier.FINAL);
141         check(26, Modifier.STATIC | Modifier.VOLATILE);
142         check(27, Modifier.STATIC | Modifier.TRANSIENT);
143         check(28, Modifier.STATIC | Modifier.TRANSIENT | Modifier.FINAL);
144         check(29, Modifier.STATIC | Modifier.TRANSIENT | Modifier.VOLATILE);
145 
146         check(30, Modifier.STATIC | Modifier.PRIVATE);
147         check(31, Modifier.STATIC | Modifier.PRIVATE | Modifier.FINAL);
148         check(32, Modifier.STATIC | Modifier.PRIVATE | Modifier.VOLATILE);
149         check(33, Modifier.STATIC | Modifier.PRIVATE | Modifier.TRANSIENT);
150         check(34, Modifier.STATIC | Modifier.PRIVATE | Modifier.TRANSIENT |
151                   Modifier.FINAL);
152         check(35, Modifier.STATIC | Modifier.PRIVATE | Modifier.TRANSIENT |
153                   Modifier.VOLATILE);
154 
155         check(36, Modifier.STATIC | Modifier.PUBLIC);
156         check(37, Modifier.STATIC | Modifier.PUBLIC | Modifier.FINAL);
157         check(38, Modifier.STATIC | Modifier.PUBLIC | Modifier.VOLATILE);
158         check(39, Modifier.STATIC | Modifier.PUBLIC | Modifier.TRANSIENT);
159         check(40, Modifier.STATIC | Modifier.PUBLIC | Modifier.TRANSIENT |
160                   Modifier.FINAL);
161         check(41, Modifier.STATIC | Modifier.PUBLIC | Modifier.TRANSIENT |
162                   Modifier.VOLATILE);
163 
164         check(42, Modifier.STATIC | Modifier.PROTECTED);
165         check(43, Modifier.STATIC | Modifier.PROTECTED | Modifier.FINAL);
166         check(44, Modifier.STATIC | Modifier.PROTECTED | Modifier.VOLATILE);
167         check(45, Modifier.STATIC | Modifier.PROTECTED | Modifier.TRANSIENT);
168         check(46, Modifier.STATIC | Modifier.PROTECTED | Modifier.TRANSIENT |
169                   Modifier.FINAL);
170         check(47, Modifier.STATIC | Modifier.PROTECTED | Modifier.TRANSIENT |
171                   Modifier.VOLATILE);
172 
173         return getRes();
174     }
175 }
176