xref: /aosp_15_r20/art/test/064-field-access/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2008 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker import other.PublicClass;
18*795d594fSAndroid Build Coastguard Worker import java.lang.reflect.Field;
19*795d594fSAndroid Build Coastguard Worker import java.lang.reflect.InvocationTargetException;
20*795d594fSAndroid Build Coastguard Worker import java.lang.reflect.Method;
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker /*
23*795d594fSAndroid Build Coastguard Worker  * Test field access through reflection.
24*795d594fSAndroid Build Coastguard Worker  */
25*795d594fSAndroid Build Coastguard Worker public class Main {
main(String[] args)26*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
27*795d594fSAndroid Build Coastguard Worker     System.loadLibrary(args[0]);
28*795d594fSAndroid Build Coastguard Worker 
29*795d594fSAndroid Build Coastguard Worker     SubClass.main(null);
30*795d594fSAndroid Build Coastguard Worker 
31*795d594fSAndroid Build Coastguard Worker     try {
32*795d594fSAndroid Build Coastguard Worker       GetNonexistent.main(null);
33*795d594fSAndroid Build Coastguard Worker       System.out.println("Not expected to succeed");
34*795d594fSAndroid Build Coastguard Worker     } catch (VerifyError fe) {
35*795d594fSAndroid Build Coastguard Worker       // dalvik
36*795d594fSAndroid Build Coastguard Worker       System.out.println("Got expected failure");
37*795d594fSAndroid Build Coastguard Worker     } catch (NoSuchFieldError nsfe) {
38*795d594fSAndroid Build Coastguard Worker       // reference
39*795d594fSAndroid Build Coastguard Worker       System.out.println("Got expected failure");
40*795d594fSAndroid Build Coastguard Worker     }
41*795d594fSAndroid Build Coastguard Worker 
42*795d594fSAndroid Build Coastguard Worker     try {
43*795d594fSAndroid Build Coastguard Worker       Class<?> c = Class.forName("SubClassUsingInaccessibleField");
44*795d594fSAndroid Build Coastguard Worker       Object o = c.newInstance();
45*795d594fSAndroid Build Coastguard Worker       c.getMethod("test").invoke(o, null);
46*795d594fSAndroid Build Coastguard Worker     } catch (InvocationTargetException ite) {
47*795d594fSAndroid Build Coastguard Worker       if (ite.getCause() instanceof IllegalAccessError) {
48*795d594fSAndroid Build Coastguard Worker         System.out.println("Got expected failure");
49*795d594fSAndroid Build Coastguard Worker       } else {
50*795d594fSAndroid Build Coastguard Worker         System.out.println("Got unexpected failure " + ite.getCause());
51*795d594fSAndroid Build Coastguard Worker       }
52*795d594fSAndroid Build Coastguard Worker     } catch (Exception e) {
53*795d594fSAndroid Build Coastguard Worker       System.out.println("Got unexpected failure " + e);
54*795d594fSAndroid Build Coastguard Worker     }
55*795d594fSAndroid Build Coastguard Worker 
56*795d594fSAndroid Build Coastguard Worker     try {
57*795d594fSAndroid Build Coastguard Worker       new GetInstanceFieldOnUninitializedThis();
58*795d594fSAndroid Build Coastguard Worker       // We actually allow this for app compat.
59*795d594fSAndroid Build Coastguard Worker       // System.out.println("Unexpectedly constructed GetInstanceFieldOnUninitializedThis");
60*795d594fSAndroid Build Coastguard Worker       System.out.println("GetInstanceFieldOnUninitializedThis allowed for app compat");
61*795d594fSAndroid Build Coastguard Worker     } catch (VerifyError expected) {
62*795d594fSAndroid Build Coastguard Worker       System.out.println("Got the correct but unexpected failure (should allow for app compat)");
63*795d594fSAndroid Build Coastguard Worker     } catch (Exception e) {
64*795d594fSAndroid Build Coastguard Worker       System.out.println("Got unexpected failure " + e);
65*795d594fSAndroid Build Coastguard Worker     }
66*795d594fSAndroid Build Coastguard Worker 
67*795d594fSAndroid Build Coastguard Worker     try {
68*795d594fSAndroid Build Coastguard Worker       new PutInstanceFieldOnUninitializedThisViaSubClass();
69*795d594fSAndroid Build Coastguard Worker       System.out.println("Unexpectedly constructed PutInstanceFieldOnUninitializedThisViaSubClass");
70*795d594fSAndroid Build Coastguard Worker     } catch (VerifyError expected) {
71*795d594fSAndroid Build Coastguard Worker       System.out.println("Got expected failure");
72*795d594fSAndroid Build Coastguard Worker     } catch (Exception e) {
73*795d594fSAndroid Build Coastguard Worker       System.out.println("Got unexpected failure " + e);
74*795d594fSAndroid Build Coastguard Worker     }
75*795d594fSAndroid Build Coastguard Worker 
76*795d594fSAndroid Build Coastguard Worker     OOMEOnNullAccess.main(args);
77*795d594fSAndroid Build Coastguard Worker   }
78*795d594fSAndroid Build Coastguard Worker 
79*795d594fSAndroid Build Coastguard Worker   /*
80*795d594fSAndroid Build Coastguard Worker    * Get the field specified by "field" from "obj".
81*795d594fSAndroid Build Coastguard Worker    *
82*795d594fSAndroid Build Coastguard Worker    * "type" determines which "get" call is made, e.g. 'B' turns into
83*795d594fSAndroid Build Coastguard Worker    * field.getByte().
84*795d594fSAndroid Build Coastguard Worker    *
85*795d594fSAndroid Build Coastguard Worker    * The "expectedException" must match the class of the exception thrown,
86*795d594fSAndroid Build Coastguard Worker    * or be null if no exception was expected.
87*795d594fSAndroid Build Coastguard Worker    *
88*795d594fSAndroid Build Coastguard Worker    * On success, the boxed value retrieved is returned.
89*795d594fSAndroid Build Coastguard Worker    */
getValue(Field field, Object obj, char type, Class<?> expectedException)90*795d594fSAndroid Build Coastguard Worker   public Object getValue(Field field, Object obj, char type,
91*795d594fSAndroid Build Coastguard Worker       Class<?> expectedException) {
92*795d594fSAndroid Build Coastguard Worker     Object result = null;
93*795d594fSAndroid Build Coastguard Worker     try {
94*795d594fSAndroid Build Coastguard Worker       switch (type) {
95*795d594fSAndroid Build Coastguard Worker         case 'Z':
96*795d594fSAndroid Build Coastguard Worker           result = field.getBoolean(obj);
97*795d594fSAndroid Build Coastguard Worker           break;
98*795d594fSAndroid Build Coastguard Worker         case 'B':
99*795d594fSAndroid Build Coastguard Worker           result = field.getByte(obj);
100*795d594fSAndroid Build Coastguard Worker           break;
101*795d594fSAndroid Build Coastguard Worker         case 'S':
102*795d594fSAndroid Build Coastguard Worker           result = field.getShort(obj);
103*795d594fSAndroid Build Coastguard Worker           break;
104*795d594fSAndroid Build Coastguard Worker         case 'C':
105*795d594fSAndroid Build Coastguard Worker           result = field.getChar(obj);
106*795d594fSAndroid Build Coastguard Worker           break;
107*795d594fSAndroid Build Coastguard Worker         case 'I':
108*795d594fSAndroid Build Coastguard Worker           result = field.getInt(obj);
109*795d594fSAndroid Build Coastguard Worker           break;
110*795d594fSAndroid Build Coastguard Worker         case 'J':
111*795d594fSAndroid Build Coastguard Worker           result = field.getLong(obj);
112*795d594fSAndroid Build Coastguard Worker           break;
113*795d594fSAndroid Build Coastguard Worker         case 'F':
114*795d594fSAndroid Build Coastguard Worker           result = field.getFloat(obj);
115*795d594fSAndroid Build Coastguard Worker           break;
116*795d594fSAndroid Build Coastguard Worker         case 'D':
117*795d594fSAndroid Build Coastguard Worker           result = field.getDouble(obj);
118*795d594fSAndroid Build Coastguard Worker           break;
119*795d594fSAndroid Build Coastguard Worker         case 'L':
120*795d594fSAndroid Build Coastguard Worker           result = field.get(obj);
121*795d594fSAndroid Build Coastguard Worker           break;
122*795d594fSAndroid Build Coastguard Worker         default:
123*795d594fSAndroid Build Coastguard Worker           throw new RuntimeException("bad type '" + type + "'");
124*795d594fSAndroid Build Coastguard Worker       }
125*795d594fSAndroid Build Coastguard Worker 
126*795d594fSAndroid Build Coastguard Worker       /* success; expected? */
127*795d594fSAndroid Build Coastguard Worker       if (expectedException != null) {
128*795d594fSAndroid Build Coastguard Worker         System.out.println("ERROR: call succeeded for field " + field +
129*795d594fSAndroid Build Coastguard Worker             " with a read of type '" + type +
130*795d594fSAndroid Build Coastguard Worker             "', was expecting " + expectedException);
131*795d594fSAndroid Build Coastguard Worker         Thread.dumpStack();
132*795d594fSAndroid Build Coastguard Worker       }
133*795d594fSAndroid Build Coastguard Worker     } catch (Exception ex) {
134*795d594fSAndroid Build Coastguard Worker       if (expectedException == null) {
135*795d594fSAndroid Build Coastguard Worker         System.out.println("ERROR: call failed unexpectedly: "
136*795d594fSAndroid Build Coastguard Worker             + ex.getClass());
137*795d594fSAndroid Build Coastguard Worker         ex.printStackTrace(System.out);
138*795d594fSAndroid Build Coastguard Worker       } else {
139*795d594fSAndroid Build Coastguard Worker         if (!expectedException.equals(ex.getClass())) {
140*795d594fSAndroid Build Coastguard Worker           System.out.println("ERROR: incorrect exception: wanted "
141*795d594fSAndroid Build Coastguard Worker               + expectedException.getName() + ", got "
142*795d594fSAndroid Build Coastguard Worker               + ex.getClass());
143*795d594fSAndroid Build Coastguard Worker           ex.printStackTrace(System.out);
144*795d594fSAndroid Build Coastguard Worker         }
145*795d594fSAndroid Build Coastguard Worker       }
146*795d594fSAndroid Build Coastguard Worker     }
147*795d594fSAndroid Build Coastguard Worker 
148*795d594fSAndroid Build Coastguard Worker     return result;
149*795d594fSAndroid Build Coastguard Worker   }
150*795d594fSAndroid Build Coastguard Worker 
startJit()151*795d594fSAndroid Build Coastguard Worker   static native void startJit();
stopJit()152*795d594fSAndroid Build Coastguard Worker   static native void stopJit();
waitForCompilation()153*795d594fSAndroid Build Coastguard Worker   static native void waitForCompilation();
154*795d594fSAndroid Build Coastguard Worker }
155*795d594fSAndroid Build Coastguard Worker 
156*795d594fSAndroid Build Coastguard Worker /*
157*795d594fSAndroid Build Coastguard Worker  * Local class with some fields.
158*795d594fSAndroid Build Coastguard Worker  */
159*795d594fSAndroid Build Coastguard Worker class SamePackage {
160*795d594fSAndroid Build Coastguard Worker   public boolean samePackagePublicBooleanInstanceField = true;
161*795d594fSAndroid Build Coastguard Worker   public byte samePackagePublicByteInstanceField = 2;
162*795d594fSAndroid Build Coastguard Worker   public char samePackagePublicCharInstanceField = 3;
163*795d594fSAndroid Build Coastguard Worker   public short samePackagePublicShortInstanceField = 4;
164*795d594fSAndroid Build Coastguard Worker   public int samePackagePublicIntInstanceField = 5;
165*795d594fSAndroid Build Coastguard Worker   public long samePackagePublicLongInstanceField = 6;
166*795d594fSAndroid Build Coastguard Worker   public float samePackagePublicFloatInstanceField = 7.0f;
167*795d594fSAndroid Build Coastguard Worker   public double samePackagePublicDoubleInstanceField = 8.0;
168*795d594fSAndroid Build Coastguard Worker   public Object samePackagePublicObjectInstanceField = "9";
169*795d594fSAndroid Build Coastguard Worker 
170*795d594fSAndroid Build Coastguard Worker   protected boolean samePackageProtectedBooleanInstanceField = true;
171*795d594fSAndroid Build Coastguard Worker   protected byte samePackageProtectedByteInstanceField = 10;
172*795d594fSAndroid Build Coastguard Worker   protected char samePackageProtectedCharInstanceField = 11;
173*795d594fSAndroid Build Coastguard Worker   protected short samePackageProtectedShortInstanceField = 12;
174*795d594fSAndroid Build Coastguard Worker   protected int samePackageProtectedIntInstanceField = 13;
175*795d594fSAndroid Build Coastguard Worker   protected long samePackageProtectedLongInstanceField = 14;
176*795d594fSAndroid Build Coastguard Worker   protected float samePackageProtectedFloatInstanceField = 15.0f;
177*795d594fSAndroid Build Coastguard Worker   protected double samePackageProtectedDoubleInstanceField = 16.0;
178*795d594fSAndroid Build Coastguard Worker   protected Object samePackageProtectedObjectInstanceField = "17";
179*795d594fSAndroid Build Coastguard Worker 
180*795d594fSAndroid Build Coastguard Worker   private boolean samePackagePrivateBooleanInstanceField = true;
181*795d594fSAndroid Build Coastguard Worker   private byte samePackagePrivateByteInstanceField = 18;
182*795d594fSAndroid Build Coastguard Worker   private char samePackagePrivateCharInstanceField = 19;
183*795d594fSAndroid Build Coastguard Worker   private short samePackagePrivateShortInstanceField = 20;
184*795d594fSAndroid Build Coastguard Worker   private int samePackagePrivateIntInstanceField = 21;
185*795d594fSAndroid Build Coastguard Worker   private long samePackagePrivateLongInstanceField = 22;
186*795d594fSAndroid Build Coastguard Worker   private float samePackagePrivateFloatInstanceField = 23.0f;
187*795d594fSAndroid Build Coastguard Worker   private double samePackagePrivateDoubleInstanceField = 24.0;
188*795d594fSAndroid Build Coastguard Worker   private Object samePackagePrivateObjectInstanceField = "25";
189*795d594fSAndroid Build Coastguard Worker 
190*795d594fSAndroid Build Coastguard Worker   /* package */ boolean samePackagePackageBooleanInstanceField = true;
191*795d594fSAndroid Build Coastguard Worker   /* package */ byte samePackagePackageByteInstanceField = 26;
192*795d594fSAndroid Build Coastguard Worker   /* package */ char samePackagePackageCharInstanceField = 27;
193*795d594fSAndroid Build Coastguard Worker   /* package */ short samePackagePackageShortInstanceField = 28;
194*795d594fSAndroid Build Coastguard Worker   /* package */ int samePackagePackageIntInstanceField = 29;
195*795d594fSAndroid Build Coastguard Worker   /* package */ long samePackagePackageLongInstanceField = 30;
196*795d594fSAndroid Build Coastguard Worker   /* package */ float samePackagePackageFloatInstanceField = 31.0f;
197*795d594fSAndroid Build Coastguard Worker   /* package */ double samePackagePackageDoubleInstanceField = 32.0;
198*795d594fSAndroid Build Coastguard Worker   /* package */ Object samePackagePackageObjectInstanceField = "33";
199*795d594fSAndroid Build Coastguard Worker 
200*795d594fSAndroid Build Coastguard Worker   public static boolean samePackagePublicBooleanStaticField = true;
201*795d594fSAndroid Build Coastguard Worker   public static byte samePackagePublicByteStaticField = 34;
202*795d594fSAndroid Build Coastguard Worker   public static char samePackagePublicCharStaticField = 35;
203*795d594fSAndroid Build Coastguard Worker   public static short samePackagePublicShortStaticField = 36;
204*795d594fSAndroid Build Coastguard Worker   public static int samePackagePublicIntStaticField = 37;
205*795d594fSAndroid Build Coastguard Worker   public static long samePackagePublicLongStaticField = 38;
206*795d594fSAndroid Build Coastguard Worker   public static float samePackagePublicFloatStaticField = 39.0f;
207*795d594fSAndroid Build Coastguard Worker   public static double samePackagePublicDoubleStaticField = 40.0;
208*795d594fSAndroid Build Coastguard Worker   public static Object samePackagePublicObjectStaticField = "41";
209*795d594fSAndroid Build Coastguard Worker 
210*795d594fSAndroid Build Coastguard Worker   protected static boolean samePackageProtectedBooleanStaticField = true;
211*795d594fSAndroid Build Coastguard Worker   protected static byte samePackageProtectedByteStaticField = 42;
212*795d594fSAndroid Build Coastguard Worker   protected static char samePackageProtectedCharStaticField = 43;
213*795d594fSAndroid Build Coastguard Worker   protected static short samePackageProtectedShortStaticField = 44;
214*795d594fSAndroid Build Coastguard Worker   protected static int samePackageProtectedIntStaticField = 45;
215*795d594fSAndroid Build Coastguard Worker   protected static long samePackageProtectedLongStaticField = 46;
216*795d594fSAndroid Build Coastguard Worker   protected static float samePackageProtectedFloatStaticField = 47.0f;
217*795d594fSAndroid Build Coastguard Worker   protected static double samePackageProtectedDoubleStaticField = 48.0;
218*795d594fSAndroid Build Coastguard Worker   protected static Object samePackageProtectedObjectStaticField = "49";
219*795d594fSAndroid Build Coastguard Worker 
220*795d594fSAndroid Build Coastguard Worker   private static boolean samePackagePrivateBooleanStaticField = true;
221*795d594fSAndroid Build Coastguard Worker   private static byte samePackagePrivateByteStaticField = 50;
222*795d594fSAndroid Build Coastguard Worker   private static char samePackagePrivateCharStaticField = 51;
223*795d594fSAndroid Build Coastguard Worker   private static short samePackagePrivateShortStaticField = 52;
224*795d594fSAndroid Build Coastguard Worker   private static int samePackagePrivateIntStaticField = 53;
225*795d594fSAndroid Build Coastguard Worker   private static long samePackagePrivateLongStaticField = 54;
226*795d594fSAndroid Build Coastguard Worker   private static float samePackagePrivateFloatStaticField = 55.0f;
227*795d594fSAndroid Build Coastguard Worker   private static double samePackagePrivateDoubleStaticField = 56.0;
228*795d594fSAndroid Build Coastguard Worker   private static Object samePackagePrivateObjectStaticField = "57";
229*795d594fSAndroid Build Coastguard Worker 
230*795d594fSAndroid Build Coastguard Worker   /* package */ static boolean samePackagePackageBooleanStaticField = true;
231*795d594fSAndroid Build Coastguard Worker   /* package */ static byte samePackagePackageByteStaticField = 58;
232*795d594fSAndroid Build Coastguard Worker   /* package */ static char samePackagePackageCharStaticField = 59;
233*795d594fSAndroid Build Coastguard Worker   /* package */ static short samePackagePackageShortStaticField = 60;
234*795d594fSAndroid Build Coastguard Worker   /* package */ static int samePackagePackageIntStaticField = 61;
235*795d594fSAndroid Build Coastguard Worker   /* package */ static long samePackagePackageLongStaticField = 62;
236*795d594fSAndroid Build Coastguard Worker   /* package */ static float samePackagePackageFloatStaticField = 63.0f;
237*795d594fSAndroid Build Coastguard Worker   /* package */ static double samePackagePackageDoubleStaticField = 64.0;
238*795d594fSAndroid Build Coastguard Worker   /* package */ static Object samePackagePackageObjectStaticField = "65";
239*795d594fSAndroid Build Coastguard Worker 
samePublicMethod()240*795d594fSAndroid Build Coastguard Worker   public void samePublicMethod() { }
sameProtectedMethod()241*795d594fSAndroid Build Coastguard Worker   protected void sameProtectedMethod() { }
samePrivateMethod()242*795d594fSAndroid Build Coastguard Worker   private void samePrivateMethod() { }
samePackageMethod()243*795d594fSAndroid Build Coastguard Worker   /* package */ void samePackageMethod() { }
244*795d594fSAndroid Build Coastguard Worker }
245*795d594fSAndroid Build Coastguard Worker 
246*795d594fSAndroid Build Coastguard Worker /*
247*795d594fSAndroid Build Coastguard Worker  * This is a sub-class of other.PublicClass, which should be allowed to access
248*795d594fSAndroid Build Coastguard Worker  * the various protected fields declared by other.PublicClass and its parent
249*795d594fSAndroid Build Coastguard Worker  * other.ProtectedClass.
250*795d594fSAndroid Build Coastguard Worker  */
251*795d594fSAndroid Build Coastguard Worker class SubClass extends PublicClass {
252*795d594fSAndroid Build Coastguard Worker   /*
253*795d594fSAndroid Build Coastguard Worker    * Perform the various tests.
254*795d594fSAndroid Build Coastguard Worker    *
255*795d594fSAndroid Build Coastguard Worker    * localInst.getValue() is performed using an instance of Main as the
256*795d594fSAndroid Build Coastguard Worker    * source of the reflection call.  otherInst.getValue() uses a subclass
257*795d594fSAndroid Build Coastguard Worker    * of OtherPackage as the source.
258*795d594fSAndroid Build Coastguard Worker    */
main(String[] args)259*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
260*795d594fSAndroid Build Coastguard Worker     SubClass subOther = new SubClass();
261*795d594fSAndroid Build Coastguard Worker     subOther.doDirectTests();
262*795d594fSAndroid Build Coastguard Worker     subOther.doReflectionTests();
263*795d594fSAndroid Build Coastguard Worker   }
264*795d594fSAndroid Build Coastguard Worker 
check(boolean b)265*795d594fSAndroid Build Coastguard Worker   private static void check(boolean b) {
266*795d594fSAndroid Build Coastguard Worker     if (!b) {
267*795d594fSAndroid Build Coastguard Worker       throw new Error("Test failed");
268*795d594fSAndroid Build Coastguard Worker     }
269*795d594fSAndroid Build Coastguard Worker   }
270*795d594fSAndroid Build Coastguard Worker 
doDirectTests()271*795d594fSAndroid Build Coastguard Worker   public void doDirectTests() {
272*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicBooleanInstanceField == true);
273*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicByteInstanceField == 2);
274*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicCharInstanceField == 3);
275*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicShortInstanceField == 4);
276*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicIntInstanceField == 5);
277*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicLongInstanceField == 6);
278*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicFloatInstanceField == 7.0f);
279*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicDoubleInstanceField == 8.0);
280*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicObjectInstanceField == "9");
281*795d594fSAndroid Build Coastguard Worker 
282*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedBooleanInstanceField == true);
283*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedByteInstanceField == 10);
284*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedCharInstanceField == 11);
285*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedShortInstanceField == 12);
286*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedIntInstanceField == 13);
287*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedLongInstanceField == 14);
288*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedFloatInstanceField == 15.0f);
289*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedDoubleInstanceField == 16.0);
290*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedObjectInstanceField == "17");
291*795d594fSAndroid Build Coastguard Worker 
292*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateBooleanInstanceField == true);
293*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateByteInstanceField == 18);
294*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateCharInstanceField == 19);
295*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateShortInstanceField == 20);
296*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateIntInstanceField == 21);
297*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateLongInstanceField == 22);
298*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateFloatInstanceField == 23.0f);
299*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateDoubleInstanceField == 24.0);
300*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateObjectInstanceField == "25");
301*795d594fSAndroid Build Coastguard Worker 
302*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageBooleanInstanceField == true);
303*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageByteInstanceField == 26);
304*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageCharInstanceField == 27);
305*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageShortInstanceField == 28);
306*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageIntInstanceField == 29);
307*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageLongInstanceField == 30);
308*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageFloatInstanceField == 31.0f);
309*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageDoubleInstanceField == 32.0);
310*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageObjectInstanceField == "33");
311*795d594fSAndroid Build Coastguard Worker 
312*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicBooleanStaticField == true);
313*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicByteStaticField == 34);
314*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicCharStaticField == 35);
315*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicShortStaticField == 36);
316*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicIntStaticField == 37);
317*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicLongStaticField == 38);
318*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicFloatStaticField == 39.0f);
319*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicDoubleStaticField == 40.0);
320*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassPublicObjectStaticField == "41");
321*795d594fSAndroid Build Coastguard Worker 
322*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedBooleanStaticField == true);
323*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedByteStaticField == 42);
324*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedCharStaticField == 43);
325*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedShortStaticField == 44);
326*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedIntStaticField == 45);
327*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedLongStaticField == 46);
328*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedFloatStaticField == 47.0f);
329*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedDoubleStaticField == 48.0);
330*795d594fSAndroid Build Coastguard Worker     check(otherProtectedClassProtectedObjectStaticField == "49");
331*795d594fSAndroid Build Coastguard Worker 
332*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateBooleanStaticField == true);
333*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateByteStaticField == 50);
334*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateCharStaticField == 51);
335*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateShortStaticField == 52);
336*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateIntStaticField == 53);
337*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateLongStaticField == 54);
338*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateFloatStaticField == 55.0f);
339*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateDoubleStaticField == 56.0);
340*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPrivateObjectStaticField == "57");
341*795d594fSAndroid Build Coastguard Worker 
342*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageBooleanStaticField == true);
343*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageByteStaticField == 58);
344*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageCharStaticField == 59);
345*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageShortStaticField == 60);
346*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageIntStaticField == 61);
347*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageLongStaticField == 62);
348*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageFloatStaticField == 63.0f);
349*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageDoubleStaticField == 64.0);
350*795d594fSAndroid Build Coastguard Worker     // check(otherProtectedClassPackageObjectStaticField == "65");
351*795d594fSAndroid Build Coastguard Worker 
352*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicBooleanInstanceField == true);
353*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicByteInstanceField == -2);
354*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicCharInstanceField == (char)-3);
355*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicShortInstanceField == -4);
356*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicIntInstanceField == -5);
357*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicLongInstanceField == -6);
358*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicFloatInstanceField == -7.0f);
359*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicDoubleInstanceField == -8.0);
360*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicObjectInstanceField == "-9");
361*795d594fSAndroid Build Coastguard Worker 
362*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedBooleanInstanceField == true);
363*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedByteInstanceField == -10);
364*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedCharInstanceField == (char)-11);
365*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedShortInstanceField == -12);
366*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedIntInstanceField == -13);
367*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedLongInstanceField == -14);
368*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedFloatInstanceField == -15.0f);
369*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedDoubleInstanceField == -16.0);
370*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedObjectInstanceField == "-17");
371*795d594fSAndroid Build Coastguard Worker 
372*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateBooleanInstanceField == true);
373*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateByteInstanceField == -18);
374*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateCharInstanceField == (char)-19);
375*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateShortInstanceField == -20);
376*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateIntInstanceField == -21);
377*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateLongInstanceField == -22);
378*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateFloatInstanceField == -23.0f);
379*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateDoubleInstanceField == -24.0);
380*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateObjectInstanceField == "-25");
381*795d594fSAndroid Build Coastguard Worker 
382*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageBooleanInstanceField == true);
383*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageByteInstanceField == -26);
384*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageCharInstanceField == (char)-27);
385*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageShortInstanceField == -28);
386*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageIntInstanceField == -29);
387*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageLongInstanceField == -30);
388*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageFloatInstanceField == -31.0f);
389*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageDoubleInstanceField == -32.0);
390*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageObjectInstanceField == "-33");
391*795d594fSAndroid Build Coastguard Worker 
392*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicBooleanStaticField == true);
393*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicByteStaticField == -34);
394*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicCharStaticField == (char)-35);
395*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicShortStaticField == -36);
396*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicIntStaticField == -37);
397*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicLongStaticField == -38);
398*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicFloatStaticField == -39.0f);
399*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicDoubleStaticField == -40.0);
400*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassPublicObjectStaticField == "-41");
401*795d594fSAndroid Build Coastguard Worker 
402*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedBooleanStaticField == true);
403*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedByteStaticField == -42);
404*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedCharStaticField == (char)-43);
405*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedShortStaticField == -44);
406*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedIntStaticField == -45);
407*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedLongStaticField == -46);
408*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedFloatStaticField == -47.0f);
409*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedDoubleStaticField == -48.0);
410*795d594fSAndroid Build Coastguard Worker     check(otherPublicClassProtectedObjectStaticField == "-49");
411*795d594fSAndroid Build Coastguard Worker 
412*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateBooleanStaticField == true);
413*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateByteStaticField == -50);
414*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateCharStaticField == (char)-51);
415*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateShortStaticField == -52);
416*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateIntStaticField == -53);
417*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateLongStaticField == -54);
418*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateFloatStaticField == -55.0f);
419*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateDoubleStaticField == -56.0);
420*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPrivateObjectStaticField == "-57");
421*795d594fSAndroid Build Coastguard Worker 
422*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageBooleanStaticField == true);
423*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageByteStaticField == -58);
424*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageCharStaticField == (char)-59);
425*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageShortStaticField == -60);
426*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageIntStaticField == -61);
427*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageLongStaticField == -62);
428*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageFloatStaticField == -63.0f);
429*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageDoubleStaticField == -64.0);
430*795d594fSAndroid Build Coastguard Worker     // check(otherPublicClassPackageObjectStaticField == "-65");
431*795d594fSAndroid Build Coastguard Worker 
432*795d594fSAndroid Build Coastguard Worker     SamePackage s = new SamePackage();
433*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicBooleanInstanceField == true);
434*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicByteInstanceField == 2);
435*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicCharInstanceField == 3);
436*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicShortInstanceField == 4);
437*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicIntInstanceField == 5);
438*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicLongInstanceField == 6);
439*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicFloatInstanceField == 7.0f);
440*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicDoubleInstanceField == 8.0);
441*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePublicObjectInstanceField == "9");
442*795d594fSAndroid Build Coastguard Worker 
443*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedBooleanInstanceField == true);
444*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedByteInstanceField == 10);
445*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedCharInstanceField == 11);
446*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedShortInstanceField == 12);
447*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedIntInstanceField == 13);
448*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedLongInstanceField == 14);
449*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedFloatInstanceField == 15.0f);
450*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedDoubleInstanceField == 16.0);
451*795d594fSAndroid Build Coastguard Worker     check(s.samePackageProtectedObjectInstanceField == "17");
452*795d594fSAndroid Build Coastguard Worker 
453*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateBooleanInstanceField == true);
454*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateByteInstanceField == 18);
455*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateCharInstanceField == 19);
456*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateShortInstanceField == 20);
457*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateIntInstanceField == 21);
458*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateLongInstanceField == 22);
459*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateFloatInstanceField == 23.0f);
460*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateDoubleInstanceField == 24.0);
461*795d594fSAndroid Build Coastguard Worker     // check(s.samePackagePrivateObjectInstanceField == "25");
462*795d594fSAndroid Build Coastguard Worker 
463*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageBooleanInstanceField == true);
464*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageByteInstanceField == 26);
465*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageCharInstanceField == 27);
466*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageShortInstanceField == 28);
467*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageIntInstanceField == 29);
468*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageLongInstanceField == 30);
469*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageFloatInstanceField == 31.0f);
470*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageDoubleInstanceField == 32.0);
471*795d594fSAndroid Build Coastguard Worker     check(s.samePackagePackageObjectInstanceField == "33");
472*795d594fSAndroid Build Coastguard Worker 
473*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicBooleanStaticField == true);
474*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicByteStaticField == 34);
475*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicCharStaticField == 35);
476*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicShortStaticField == 36);
477*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicIntStaticField == 37);
478*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicLongStaticField == 38);
479*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicFloatStaticField == 39.0f);
480*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicDoubleStaticField == 40.0);
481*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePublicObjectStaticField == "41");
482*795d594fSAndroid Build Coastguard Worker 
483*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedBooleanStaticField == true);
484*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedByteStaticField == 42);
485*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedCharStaticField == 43);
486*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedShortStaticField == 44);
487*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedIntStaticField == 45);
488*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedLongStaticField == 46);
489*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedFloatStaticField == 47.0f);
490*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedDoubleStaticField == 48.0);
491*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackageProtectedObjectStaticField == "49");
492*795d594fSAndroid Build Coastguard Worker 
493*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateBooleanStaticField == true);
494*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateByteStaticField == 50);
495*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateCharStaticField == 51);
496*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateShortStaticField == 52);
497*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateIntStaticField == 53);
498*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateLongStaticField == 54);
499*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateFloatStaticField == 55.0f);
500*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateDoubleStaticField == 56.0);
501*795d594fSAndroid Build Coastguard Worker     // check(SamePackage.samePackagePrivateObjectStaticField == "57");
502*795d594fSAndroid Build Coastguard Worker 
503*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageBooleanStaticField == true);
504*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageByteStaticField == 58);
505*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageCharStaticField == 59);
506*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageShortStaticField == 60);
507*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageIntStaticField == 61);
508*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageLongStaticField == 62);
509*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageFloatStaticField == 63.0f);
510*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageDoubleStaticField == 64.0);
511*795d594fSAndroid Build Coastguard Worker     check(SamePackage.samePackagePackageObjectStaticField == "65");
512*795d594fSAndroid Build Coastguard Worker   }
513*795d594fSAndroid Build Coastguard Worker 
compatibleTypes(char srcType, char dstType)514*795d594fSAndroid Build Coastguard Worker   private static boolean compatibleTypes(char srcType, char dstType) {
515*795d594fSAndroid Build Coastguard Worker     switch (dstType) {
516*795d594fSAndroid Build Coastguard Worker       case 'Z':
517*795d594fSAndroid Build Coastguard Worker       case 'C':
518*795d594fSAndroid Build Coastguard Worker       case 'B':
519*795d594fSAndroid Build Coastguard Worker         return srcType == dstType;
520*795d594fSAndroid Build Coastguard Worker       case 'S':
521*795d594fSAndroid Build Coastguard Worker         return srcType == 'B' || srcType == 'S';
522*795d594fSAndroid Build Coastguard Worker       case 'I':
523*795d594fSAndroid Build Coastguard Worker         return srcType == 'B' || srcType == 'C' || srcType == 'S' || srcType == 'I';
524*795d594fSAndroid Build Coastguard Worker       case 'J':
525*795d594fSAndroid Build Coastguard Worker         return srcType == 'B' || srcType == 'C' || srcType == 'S' || srcType == 'I' ||
526*795d594fSAndroid Build Coastguard Worker         srcType == 'J';
527*795d594fSAndroid Build Coastguard Worker       case 'F':
528*795d594fSAndroid Build Coastguard Worker         return srcType == 'B' || srcType == 'C' || srcType == 'S' || srcType == 'I' ||
529*795d594fSAndroid Build Coastguard Worker         srcType == 'J' || srcType == 'F';
530*795d594fSAndroid Build Coastguard Worker       case 'D':
531*795d594fSAndroid Build Coastguard Worker         return srcType == 'B' || srcType == 'C' || srcType == 'S' || srcType == 'I' ||
532*795d594fSAndroid Build Coastguard Worker         srcType == 'J' || srcType == 'F' || srcType == 'D';
533*795d594fSAndroid Build Coastguard Worker       case 'L':
534*795d594fSAndroid Build Coastguard Worker         return true;
535*795d594fSAndroid Build Coastguard Worker       default:
536*795d594fSAndroid Build Coastguard Worker         throw new Error("Unexpected type char " + dstType);
537*795d594fSAndroid Build Coastguard Worker     }
538*795d594fSAndroid Build Coastguard Worker   }
539*795d594fSAndroid Build Coastguard Worker 
doReflectionTests()540*795d594fSAndroid Build Coastguard Worker   public void doReflectionTests() {
541*795d594fSAndroid Build Coastguard Worker     String typeChars = "ZBCSIJFDL";
542*795d594fSAndroid Build Coastguard Worker     String fieldNameForTypeChar[] = {
543*795d594fSAndroid Build Coastguard Worker         "Boolean",
544*795d594fSAndroid Build Coastguard Worker         "Byte",
545*795d594fSAndroid Build Coastguard Worker         "Char",
546*795d594fSAndroid Build Coastguard Worker         "Short",
547*795d594fSAndroid Build Coastguard Worker         "Int",
548*795d594fSAndroid Build Coastguard Worker         "Long",
549*795d594fSAndroid Build Coastguard Worker         "Float",
550*795d594fSAndroid Build Coastguard Worker         "Double",
551*795d594fSAndroid Build Coastguard Worker         "Object"
552*795d594fSAndroid Build Coastguard Worker     };
553*795d594fSAndroid Build Coastguard Worker 
554*795d594fSAndroid Build Coastguard Worker     Main localInst = new Main();
555*795d594fSAndroid Build Coastguard Worker     SamePackage samePkgInst = new SamePackage();
556*795d594fSAndroid Build Coastguard Worker     PublicClass otherPkgInst = new PublicClass();
557*795d594fSAndroid Build Coastguard Worker     Object plainObj = new Object();
558*795d594fSAndroid Build Coastguard Worker 
559*795d594fSAndroid Build Coastguard Worker     for (int round = 0; round < 3; round++) {
560*795d594fSAndroid Build Coastguard Worker       Object validInst;
561*795d594fSAndroid Build Coastguard Worker       Field[] fields;
562*795d594fSAndroid Build Coastguard Worker       Method[] methods;
563*795d594fSAndroid Build Coastguard Worker       boolean same_package = false;
564*795d594fSAndroid Build Coastguard Worker       boolean protected_class = false;
565*795d594fSAndroid Build Coastguard Worker       switch (round) {
566*795d594fSAndroid Build Coastguard Worker         case 0:
567*795d594fSAndroid Build Coastguard Worker           validInst = new SamePackage();
568*795d594fSAndroid Build Coastguard Worker           fields = SamePackage.class.getDeclaredFields();
569*795d594fSAndroid Build Coastguard Worker           check(fields.length == 72);
570*795d594fSAndroid Build Coastguard Worker           methods = SamePackage.class.getDeclaredMethods();
571*795d594fSAndroid Build Coastguard Worker           check(methods.length == 4);
572*795d594fSAndroid Build Coastguard Worker           same_package = true;
573*795d594fSAndroid Build Coastguard Worker           break;
574*795d594fSAndroid Build Coastguard Worker         case 1:
575*795d594fSAndroid Build Coastguard Worker           validInst = new PublicClass();
576*795d594fSAndroid Build Coastguard Worker           fields = PublicClass.class.getDeclaredFields();
577*795d594fSAndroid Build Coastguard Worker           check(fields.length == 72);
578*795d594fSAndroid Build Coastguard Worker           methods = PublicClass.class.getDeclaredMethods();
579*795d594fSAndroid Build Coastguard Worker           check(methods.length == 4);
580*795d594fSAndroid Build Coastguard Worker           break;
581*795d594fSAndroid Build Coastguard Worker         default:
582*795d594fSAndroid Build Coastguard Worker           validInst = new PublicClass();
583*795d594fSAndroid Build Coastguard Worker           fields = PublicClass.class.getSuperclass().getDeclaredFields();
584*795d594fSAndroid Build Coastguard Worker           check(fields.length == 72);
585*795d594fSAndroid Build Coastguard Worker           methods = PublicClass.class.getSuperclass().getDeclaredMethods();
586*795d594fSAndroid Build Coastguard Worker           check(methods.length == 4);
587*795d594fSAndroid Build Coastguard Worker           protected_class = true;
588*795d594fSAndroid Build Coastguard Worker           break;
589*795d594fSAndroid Build Coastguard Worker       }
590*795d594fSAndroid Build Coastguard Worker       for (Field f : fields) {
591*795d594fSAndroid Build Coastguard Worker         char typeChar = '?';
592*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < fieldNameForTypeChar.length; i++) {
593*795d594fSAndroid Build Coastguard Worker           if (f.getName().contains(fieldNameForTypeChar[i])) {
594*795d594fSAndroid Build Coastguard Worker             typeChar = typeChars.charAt(i);
595*795d594fSAndroid Build Coastguard Worker             break;
596*795d594fSAndroid Build Coastguard Worker           }
597*795d594fSAndroid Build Coastguard Worker         }
598*795d594fSAndroid Build Coastguard Worker         // Check access or lack of to field.
599*795d594fSAndroid Build Coastguard Worker         Class<?> subClassAccessExceptionClass = null;
600*795d594fSAndroid Build Coastguard Worker         if ((f.getName().contains("Private") ||
601*795d594fSAndroid Build Coastguard Worker             (!same_package && f.getName().contains("Package")) ||
602*795d594fSAndroid Build Coastguard Worker             (!same_package && f.getName().contains("Protected"))) &&
603*795d594fSAndroid Build Coastguard Worker             !(protected_class && f.getName().contains("Public"))) {
604*795d594fSAndroid Build Coastguard Worker           subClassAccessExceptionClass = IllegalAccessException.class;
605*795d594fSAndroid Build Coastguard Worker         }
606*795d594fSAndroid Build Coastguard Worker         Class<?> mainClassAccessExceptionClass = null;
607*795d594fSAndroid Build Coastguard Worker         if ((f.getName().contains("Private") ||
608*795d594fSAndroid Build Coastguard Worker             (!same_package && f.getName().contains("Package")) ||
609*795d594fSAndroid Build Coastguard Worker             (!same_package && f.getName().contains("Protected"))) &&
610*795d594fSAndroid Build Coastguard Worker             !(protected_class && f.getName().contains("Public"))) {
611*795d594fSAndroid Build Coastguard Worker           mainClassAccessExceptionClass = IllegalAccessException.class;
612*795d594fSAndroid Build Coastguard Worker         }
613*795d594fSAndroid Build Coastguard Worker 
614*795d594fSAndroid Build Coastguard Worker         this.getValue(f, validInst, typeChar, subClassAccessExceptionClass);
615*795d594fSAndroid Build Coastguard Worker         localInst.getValue(f, validInst, typeChar, mainClassAccessExceptionClass);
616*795d594fSAndroid Build Coastguard Worker 
617*795d594fSAndroid Build Coastguard Worker         // Check things that can get beyond the IllegalAccessException.
618*795d594fSAndroid Build Coastguard Worker         if (subClassAccessExceptionClass == null) {
619*795d594fSAndroid Build Coastguard Worker           // Check NPE.
620*795d594fSAndroid Build Coastguard Worker           Class<?> npeClass = null;
621*795d594fSAndroid Build Coastguard Worker           if (!f.getName().contains("Static")) {
622*795d594fSAndroid Build Coastguard Worker             npeClass = NullPointerException.class;
623*795d594fSAndroid Build Coastguard Worker           }
624*795d594fSAndroid Build Coastguard Worker 
625*795d594fSAndroid Build Coastguard Worker           this.getValue(f, null, typeChar, npeClass);
626*795d594fSAndroid Build Coastguard Worker           if (mainClassAccessExceptionClass == null) {
627*795d594fSAndroid Build Coastguard Worker             localInst.getValue(f, null, typeChar, npeClass);
628*795d594fSAndroid Build Coastguard Worker           }
629*795d594fSAndroid Build Coastguard Worker 
630*795d594fSAndroid Build Coastguard Worker           // Check access of wrong field type for valid instance.
631*795d594fSAndroid Build Coastguard Worker           for (int i = 0; i < typeChars.length(); i++) {
632*795d594fSAndroid Build Coastguard Worker             char otherChar = typeChars.charAt(i);
633*795d594fSAndroid Build Coastguard Worker             Class<?> illArgClass = compatibleTypes(typeChar, otherChar) ?
634*795d594fSAndroid Build Coastguard Worker                 null : IllegalArgumentException.class;
635*795d594fSAndroid Build Coastguard Worker             this.getValue(f, validInst, otherChar, illArgClass);
636*795d594fSAndroid Build Coastguard Worker             if (mainClassAccessExceptionClass == null) {
637*795d594fSAndroid Build Coastguard Worker               localInst.getValue(f, validInst, otherChar, illArgClass);
638*795d594fSAndroid Build Coastguard Worker             }
639*795d594fSAndroid Build Coastguard Worker           }
640*795d594fSAndroid Build Coastguard Worker 
641*795d594fSAndroid Build Coastguard Worker           if (!f.getName().contains("Static")) {
642*795d594fSAndroid Build Coastguard Worker             // Wrong object.
643*795d594fSAndroid Build Coastguard Worker             this.getValue(f, plainObj, typeChar, IllegalArgumentException.class);
644*795d594fSAndroid Build Coastguard Worker             if (mainClassAccessExceptionClass == null) {
645*795d594fSAndroid Build Coastguard Worker               localInst.getValue(f, plainObj, typeChar, IllegalArgumentException.class);
646*795d594fSAndroid Build Coastguard Worker             }
647*795d594fSAndroid Build Coastguard Worker           }
648*795d594fSAndroid Build Coastguard Worker         }
649*795d594fSAndroid Build Coastguard Worker       }
650*795d594fSAndroid Build Coastguard Worker 
651*795d594fSAndroid Build Coastguard Worker       for (Method m : methods) {
652*795d594fSAndroid Build Coastguard Worker         Class<?> subClassAccessExceptionClass = null;
653*795d594fSAndroid Build Coastguard Worker         if (m.getName().contains("Private") ||
654*795d594fSAndroid Build Coastguard Worker             (!same_package && m.getName().contains("Package")) ||
655*795d594fSAndroid Build Coastguard Worker             (!same_package && m.getName().contains("Protected"))) {
656*795d594fSAndroid Build Coastguard Worker           subClassAccessExceptionClass = IllegalAccessException.class;
657*795d594fSAndroid Build Coastguard Worker         }
658*795d594fSAndroid Build Coastguard Worker         this.invoke(m, validInst, subClassAccessExceptionClass);
659*795d594fSAndroid Build Coastguard Worker       }
660*795d594fSAndroid Build Coastguard Worker     }
661*795d594fSAndroid Build Coastguard Worker     System.out.println("good");
662*795d594fSAndroid Build Coastguard Worker   }
663*795d594fSAndroid Build Coastguard Worker 
664*795d594fSAndroid Build Coastguard Worker   /*
665*795d594fSAndroid Build Coastguard Worker    * [this is a clone of Main.getValue() -- the class issuing the
666*795d594fSAndroid Build Coastguard Worker    * reflection call is significant]
667*795d594fSAndroid Build Coastguard Worker    */
getValue(Field field, Object obj, char type, Class<?> expectedException)668*795d594fSAndroid Build Coastguard Worker   public Object getValue(Field field, Object obj, char type,
669*795d594fSAndroid Build Coastguard Worker       Class<?> expectedException) {
670*795d594fSAndroid Build Coastguard Worker     Object result = null;
671*795d594fSAndroid Build Coastguard Worker     try {
672*795d594fSAndroid Build Coastguard Worker       switch (type) {
673*795d594fSAndroid Build Coastguard Worker         case 'Z':
674*795d594fSAndroid Build Coastguard Worker           result = field.getBoolean(obj);
675*795d594fSAndroid Build Coastguard Worker           break;
676*795d594fSAndroid Build Coastguard Worker         case 'B':
677*795d594fSAndroid Build Coastguard Worker           result = field.getByte(obj);
678*795d594fSAndroid Build Coastguard Worker           break;
679*795d594fSAndroid Build Coastguard Worker         case 'S':
680*795d594fSAndroid Build Coastguard Worker           result = field.getShort(obj);
681*795d594fSAndroid Build Coastguard Worker           break;
682*795d594fSAndroid Build Coastguard Worker         case 'C':
683*795d594fSAndroid Build Coastguard Worker           result = field.getChar(obj);
684*795d594fSAndroid Build Coastguard Worker           break;
685*795d594fSAndroid Build Coastguard Worker         case 'I':
686*795d594fSAndroid Build Coastguard Worker           result = field.getInt(obj);
687*795d594fSAndroid Build Coastguard Worker           break;
688*795d594fSAndroid Build Coastguard Worker         case 'J':
689*795d594fSAndroid Build Coastguard Worker           result = field.getLong(obj);
690*795d594fSAndroid Build Coastguard Worker           break;
691*795d594fSAndroid Build Coastguard Worker         case 'F':
692*795d594fSAndroid Build Coastguard Worker           result = field.getFloat(obj);
693*795d594fSAndroid Build Coastguard Worker           break;
694*795d594fSAndroid Build Coastguard Worker         case 'D':
695*795d594fSAndroid Build Coastguard Worker           result = field.getDouble(obj);
696*795d594fSAndroid Build Coastguard Worker           break;
697*795d594fSAndroid Build Coastguard Worker         case 'L':
698*795d594fSAndroid Build Coastguard Worker           result = field.get(obj);
699*795d594fSAndroid Build Coastguard Worker           break;
700*795d594fSAndroid Build Coastguard Worker         default:
701*795d594fSAndroid Build Coastguard Worker           throw new RuntimeException("bad type '" + type + "'");
702*795d594fSAndroid Build Coastguard Worker       }
703*795d594fSAndroid Build Coastguard Worker 
704*795d594fSAndroid Build Coastguard Worker       /* success; expected? */
705*795d594fSAndroid Build Coastguard Worker       if (expectedException != null) {
706*795d594fSAndroid Build Coastguard Worker         System.out.println("ERROR: call succeeded for field " + field +
707*795d594fSAndroid Build Coastguard Worker             " with a read of type '" + type +
708*795d594fSAndroid Build Coastguard Worker             "', was expecting " + expectedException);
709*795d594fSAndroid Build Coastguard Worker         Thread.dumpStack();
710*795d594fSAndroid Build Coastguard Worker       }
711*795d594fSAndroid Build Coastguard Worker     } catch (Exception ex) {
712*795d594fSAndroid Build Coastguard Worker       if (expectedException == null) {
713*795d594fSAndroid Build Coastguard Worker         System.out.println("ERROR: call failed unexpectedly: "
714*795d594fSAndroid Build Coastguard Worker             + ex.getClass());
715*795d594fSAndroid Build Coastguard Worker         ex.printStackTrace(System.out);
716*795d594fSAndroid Build Coastguard Worker       } else {
717*795d594fSAndroid Build Coastguard Worker         if (!expectedException.equals(ex.getClass())) {
718*795d594fSAndroid Build Coastguard Worker           System.out.println("ERROR: incorrect exception: wanted "
719*795d594fSAndroid Build Coastguard Worker               + expectedException.getName() + ", got "
720*795d594fSAndroid Build Coastguard Worker               + ex.getClass());
721*795d594fSAndroid Build Coastguard Worker           ex.printStackTrace(System.out);
722*795d594fSAndroid Build Coastguard Worker         }
723*795d594fSAndroid Build Coastguard Worker       }
724*795d594fSAndroid Build Coastguard Worker     }
725*795d594fSAndroid Build Coastguard Worker 
726*795d594fSAndroid Build Coastguard Worker     return result;
727*795d594fSAndroid Build Coastguard Worker   }
728*795d594fSAndroid Build Coastguard Worker 
invoke(Method method, Object obj, Class<?> expectedException)729*795d594fSAndroid Build Coastguard Worker   public Object invoke(Method method, Object obj, Class<?> expectedException) {
730*795d594fSAndroid Build Coastguard Worker     Object result = null;
731*795d594fSAndroid Build Coastguard Worker     try {
732*795d594fSAndroid Build Coastguard Worker       result = method.invoke(obj);
733*795d594fSAndroid Build Coastguard Worker       /* success; expected? */
734*795d594fSAndroid Build Coastguard Worker       if (expectedException != null) {
735*795d594fSAndroid Build Coastguard Worker         System.out.println("ERROR: call succeeded for method " + method + "', was expecting " +
736*795d594fSAndroid Build Coastguard Worker                            expectedException);
737*795d594fSAndroid Build Coastguard Worker         Thread.dumpStack();
738*795d594fSAndroid Build Coastguard Worker       }
739*795d594fSAndroid Build Coastguard Worker     } catch (Exception ex) {
740*795d594fSAndroid Build Coastguard Worker       if (expectedException == null) {
741*795d594fSAndroid Build Coastguard Worker         System.out.println("ERROR: call failed unexpectedly: " + ex.getClass());
742*795d594fSAndroid Build Coastguard Worker         ex.printStackTrace(System.out);
743*795d594fSAndroid Build Coastguard Worker       } else {
744*795d594fSAndroid Build Coastguard Worker         if (!expectedException.equals(ex.getClass())) {
745*795d594fSAndroid Build Coastguard Worker           System.out.println("ERROR: incorrect exception: wanted " + expectedException.getName() +
746*795d594fSAndroid Build Coastguard Worker                              ", got " + ex.getClass());
747*795d594fSAndroid Build Coastguard Worker           ex.printStackTrace(System.out);
748*795d594fSAndroid Build Coastguard Worker         }
749*795d594fSAndroid Build Coastguard Worker       }
750*795d594fSAndroid Build Coastguard Worker     }
751*795d594fSAndroid Build Coastguard Worker     return result;
752*795d594fSAndroid Build Coastguard Worker   }
753*795d594fSAndroid Build Coastguard Worker }
754