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