12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/* 22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2006 The Android Open Source Project 32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License. 62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at 72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software 112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and 142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License. 152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */ 165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoimport java.lang.reflect.*; 185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoimport java.io.IOException; 195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoimport java.util.Collections; 20741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughesimport java.util.ArrayList; 2168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebskiimport java.util.Arrays; 22741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughesimport java.util.List; 23741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughesimport java.util.Map; 2468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebskiimport java.util.Set; 255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/** 275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Reflection test. 285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main { 30741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes private static boolean FULL_ACCESS_CHECKS = false; // b/5861201 31741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes public Main() {} 32741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes public Main(ArrayList<Integer> stuff) {} 33741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao void printMethodInfo(Method meth) { 355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Class[] params, exceptions; 365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int i; 375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Method name is " + meth.getName()); 395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Declaring class is " 405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + meth.getDeclaringClass().getName()); 415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao params = meth.getParameterTypes(); 425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao for (i = 0; i < params.length; i++) 435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Arg " + i + ": " + params[i].getName()); 445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao exceptions = meth.getExceptionTypes(); 455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao for (i = 0; i < exceptions.length; i++) 465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Exc " + i + ": " + exceptions[i].getName()); 475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Return type is " + meth.getReturnType().getName()); 485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Access flags are 0x" 495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + Integer.toHexString(meth.getModifiers())); 505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao //System.out.println(" GenericStr is " + meth.toGenericString()); 515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao void printFieldInfo(Field field) { 545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Field name is " + field.getName()); 555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Declaring class is " 565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + field.getDeclaringClass().getName()); 575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Field type is " + field.getType().getName()); 585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Access flags are 0x" 595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + Integer.toHexString(field.getModifiers())); 605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao private void showStrings(Target instance) 635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throws NoSuchFieldException, IllegalAccessException { 645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Class target = Target.class; 665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String one, two, three, four; 675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Field field = null; 685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("string1"); 705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao one = (String) field.get(instance); 715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("string2"); 735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao two = (String) field.get(instance); 745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("string3"); 765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao three = (String) field.get(instance); 775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" ::: " + one + ":" + two + ":" + three); 795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 81741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes public static void checkAccess() { 82741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 83741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Class target = otherpackage.Other.class; 84741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Object instance = new otherpackage.Other(); 85741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Method meth; 86741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 87741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes meth = target.getMethod("publicMethod", (Class[]) null); 88741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes meth.invoke(instance); 89741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 90741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 91741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes meth = target.getMethod("packageMethod", (Class[]) null); 92741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.err.println("succeeded on package-scope method"); 93741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (NoSuchMethodException nsme) { 94741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes // good 95741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 96741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 97741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 98741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes instance = otherpackage.Other.getInnerClassInstance(); 99741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes target = instance.getClass(); 100741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes meth = target.getMethod("innerMethod", (Class[]) null); 101741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 102741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (!FULL_ACCESS_CHECKS) { throw new IllegalAccessException(); } 103741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes meth.invoke(instance); 104741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.err.println("inner-method invoke unexpectedly worked"); 105741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalAccessException iae) { 106741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes // good 107741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 108741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 109741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Field field = target.getField("innerField"); 110741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 111741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes int x = field.getInt(instance); 112741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (!FULL_ACCESS_CHECKS) { throw new IllegalAccessException(); } 113741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.err.println("field get unexpectedly worked: " + x); 114741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalAccessException iae) { 115741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes // good 116741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 117741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (Exception ex) { 118741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("----- unexpected exception -----"); 119741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes ex.printStackTrace(); 120741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 121741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 122741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 1235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public void run() { 1245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Class target = Target.class; 1255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Method meth = null; 1265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Field field = null; 1275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao boolean excep; 1285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 1305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth = target.getMethod("myMethod", new Class[] { int.class }); 1315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (meth.getDeclaringClass() != target) 1335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 1345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printMethodInfo(meth); 1355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth = target.getMethod("myMethod", new Class[] { float.class }); 1375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printMethodInfo(meth); 1385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth = target.getMethod("myNoargMethod", (Class[]) null); 1405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printMethodInfo(meth); 1415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth = target.getMethod("myMethod", 1435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao new Class[] { String[].class, float.class, char.class }); 1445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printMethodInfo(meth); 1455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Target instance = new Target(); 1475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Object[] argList = new Object[] { 1485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao new String[] { "hi there" }, 1495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao new Float(3.1415926f), 150af50e415a187190488d4694f307c23705203c53eFredrik Roubert new Character('\u2714') 1515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao }; 1525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Before, float is " 1535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + ((Float)argList[1]).floatValue()); 1545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Integer boxval; 1565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao boxval = (Integer) meth.invoke(instance, argList); 1575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Result of invoke: " + boxval.intValue()); 1585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Calling no-arg void-return method"); 1605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth = target.getMethod("myNoargMethod", (Class[]) null); 1615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth.invoke(instance, (Object[]) null); 1625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao /* try invoking a method that throws an exception */ 1645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth = target.getMethod("throwingMethod", (Class[]) null); 1655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 1665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao meth.invoke(instance, (Object[]) null); 1675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("GLITCH: didn't throw"); 1685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (InvocationTargetException ite) { 1695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Invoke got expected exception:"); 1705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(ite.getClass().getName()); 1715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(ite.getCause()); 1725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 1735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (Exception ex) { 1745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("GLITCH: invoke got wrong exception:"); 1755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao ex.printStackTrace(); 1765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 1775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(""); 1785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("string1"); 1815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (field.getDeclaringClass() != target) 1825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 1835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 1845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String strVal = (String) field.get(instance); 1855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" string1 value is '" + strVal + "'"); 1865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao showStrings(instance); 1885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1895d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, new String("a new string")); 1905d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao strVal = (String) field.get(instance); 1915d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" string1 value is now '" + strVal + "'"); 1925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao showStrings(instance); 1945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 1965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, new Object()); 1975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("WARNING: able to store Object into String"); 1985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 1995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 2005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected illegal obj store exc"); 2015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String four; 2065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("string4"); 2075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao four = (String) field.get(instance); 2085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("WARNING: able to access string4: " 2095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + four); 2105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalAccessException iae) { 2125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected access exc"); 2135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (NoSuchFieldException nsfe) { 2155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got the other expected access exc"); 2165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String three; 2195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("string3"); 2205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao three = (String) field.get(this); 2215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("WARNING: able to get string3 in wrong obj: " 2225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + three); 2235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 2255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected arg exc"); 2265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao /* 2295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Try setting a field to null. 2305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 2315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String four; 2325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getDeclaredField("string3"); 2335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, null); 2345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao /* 2363beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier * Try getDeclaredField on a non-existant field. 2373beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier */ 2383beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier try { 2393beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier field = target.getDeclaredField("nonExistant"); 2403beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier System.out.println("ERROR: Expected NoSuchFieldException"); 2413beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier } catch (NoSuchFieldException nsfe) { 2423beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier String msg = nsfe.getMessage(); 2433beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier if (!msg.contains("Target;")) { 2443beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier System.out.println(" NoSuchFieldException '" + msg + 2453beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier "' didn't contain class"); 2463beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier } 2473beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier } 2483beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier 2493beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier /* 2505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Do some stuff with long. 2515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 2525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao long longVal; 2535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("pubLong"); 2545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao longVal = field.getLong(instance); 2555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("pubLong initial value is " + 2565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Long.toHexString(longVal)); 2575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setLong(instance, 0x9988776655443322L); 2585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao longVal = field.getLong(instance); 2595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("pubLong new value is " + 2605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Long.toHexString(longVal)); 2615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("superInt"); 2645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (field.getDeclaringClass() == target) 2655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 2665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 2675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int intVal = field.getInt(instance); 2685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" superInt value is " + intVal); 2695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Integer boxedIntVal = (Integer) field.get(instance); 2705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" superInt boxed is " + boxedIntVal); 2715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, new Integer(20202)); 2735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intVal = field.getInt(instance); 2745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" superInt value is now " + intVal); 2755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setShort(instance, (short)30303); 2765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intVal = field.getInt(instance); 2775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" superInt value (from short) is now " +intVal); 2785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setInt(instance, 40404); 2795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intVal = field.getInt(instance); 2805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" superInt value is now " + intVal); 2815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, new Long(123)); 2835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("FAIL: expected exception not thrown"); 2845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 2865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected long->int failure"); 2875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2895d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setLong(instance, 123); 2905d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("FAIL: expected exception not thrown"); 2915d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 2935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected long->int failure"); 2945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, new String("abc")); 2975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("FAIL: expected exception not thrown"); 2985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 3005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected string->int failure"); 3015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 3045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.getShort(instance); 3055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("FAIL: expected exception not thrown"); 3065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 3085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected int->short failure"); 3095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("superClassInt"); 3125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 3135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int superClassIntVal = field.getInt(instance); 3145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" superClassInt value is " + superClassIntVal); 3155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("staticDouble"); 3175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 3185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao double staticDoubleVal = field.getDouble(null); 3195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" staticDoubleVal value is " + staticDoubleVal); 3205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 3225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.getLong(instance); 3235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("FAIL: expected exception not thrown"); 3245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (IllegalArgumentException iae) { 3265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" got expected double->long failure"); 3275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao excep = false; 3305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 3315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("aPrivateInt"); 3325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 3335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (NoSuchFieldException nsfe) { 3355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("as expected: aPrivateInt not found"); 3365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao excep = true; 3375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (!excep) 3395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("BUG: got aPrivateInt"); 3405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("constantString"); 3435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 3445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String val = (String) field.get(instance); 3455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" Constant test value is " + val); 3465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field = target.getField("cantTouchThis"); 3495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao printFieldInfo(field); 3505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intVal = field.getInt(instance); 3515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" cantTouchThis is " + intVal); 3525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 3535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setInt(instance, 99); 35411d5d8fffe41cc7daadbfa2ca98ecb978f3029afJeff Hao System.out.println("ERROR: set-final did not throw exception"); 3555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (IllegalAccessException iae) { 35611d5d8fffe41cc7daadbfa2ca98ecb978f3029afJeff Hao System.out.println(" as expected: set-final throws exception"); 3575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 3585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intVal = field.getInt(instance); 35911d5d8fffe41cc7daadbfa2ca98ecb978f3029afJeff Hao System.out.println(" cantTouchThis is still " + intVal); 3605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 361ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println(" " + field + " accessible=" + field.isAccessible()); 3625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setAccessible(true); 363ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println(" " + field + " accessible=" + field.isAccessible()); 3645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.setInt(instance, 87); // exercise int version 365582a7d16bb0db323d8bd730beb61578aa3765f43Elliott Hughes intVal = field.getInt(instance); 366582a7d16bb0db323d8bd730beb61578aa3765f43Elliott Hughes System.out.println(" cantTouchThis is now " + intVal); 3675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao field.set(instance, 88); // exercise Object version 3685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intVal = field.getInt(instance); 3695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" cantTouchThis is now " + intVal); 3705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Constructor<Target> cons; 3725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Target targ; 3735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Object[] args; 3745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 3755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao cons = target.getConstructor(new Class[] { int.class,float.class }); 3765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao args = new Object[] { new Integer(7), new Float(3.3333) }; 3775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("cons modifiers=" + cons.getModifiers()); 3785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao targ = cons.newInstance(args); 3795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao targ.myMethod(17); 3805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 38163f5b9e8f660ae761901072821ece30d87891644Jeff Hao try { 38263f5b9e8f660ae761901072821ece30d87891644Jeff Hao Thrower thrower = Thrower.class.newInstance(); 38363f5b9e8f660ae761901072821ece30d87891644Jeff Hao System.out.println("ERROR: Class.newInstance did not throw exception"); 38463f5b9e8f660ae761901072821ece30d87891644Jeff Hao } catch (UnsupportedOperationException uoe) { 38563f5b9e8f660ae761901072821ece30d87891644Jeff Hao System.out.println("got expected exception for Class.newInstance"); 38663f5b9e8f660ae761901072821ece30d87891644Jeff Hao } catch (Exception e) { 38763f5b9e8f660ae761901072821ece30d87891644Jeff Hao System.out.println("ERROR: Class.newInstance got unexpected exception: " + 38863f5b9e8f660ae761901072821ece30d87891644Jeff Hao e.getClass().getName()); 38963f5b9e8f660ae761901072821ece30d87891644Jeff Hao } 39063f5b9e8f660ae761901072821ece30d87891644Jeff Hao 39163f5b9e8f660ae761901072821ece30d87891644Jeff Hao try { 39263f5b9e8f660ae761901072821ece30d87891644Jeff Hao Constructor<Thrower> constructor = Thrower.class.getDeclaredConstructor(); 39363f5b9e8f660ae761901072821ece30d87891644Jeff Hao Thrower thrower = constructor.newInstance(); 39463f5b9e8f660ae761901072821ece30d87891644Jeff Hao System.out.println("ERROR: Constructor.newInstance did not throw exception"); 39563f5b9e8f660ae761901072821ece30d87891644Jeff Hao } catch (InvocationTargetException ite) { 39663f5b9e8f660ae761901072821ece30d87891644Jeff Hao System.out.println("got expected exception for Constructor.newInstance"); 39763f5b9e8f660ae761901072821ece30d87891644Jeff Hao } catch (Exception e) { 39863f5b9e8f660ae761901072821ece30d87891644Jeff Hao System.out.println("ERROR: Constructor.newInstance got unexpected exception: " + 39963f5b9e8f660ae761901072821ece30d87891644Jeff Hao e.getClass().getName()); 40063f5b9e8f660ae761901072821ece30d87891644Jeff Hao } 40163f5b9e8f660ae761901072821ece30d87891644Jeff Hao 402741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (Exception ex) { 4035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("----- unexpected exception -----"); 4045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao ex.printStackTrace(); 4055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 4065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 4075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ReflectTest done!"); 4085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 4095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 4103778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath public static void checkSwap() { 4115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Method m; 4125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 4133778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath final Object[] objects = new Object[2]; 4145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 4153778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath m = Collections.class.getDeclaredMethod("swap", 4163778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath Object[].class, int.class, int.class); 4175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (NoSuchMethodException nsme) { 4185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao nsme.printStackTrace(); 4195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return; 4205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 421ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println(m + " accessible=" + m.isAccessible()); 4225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao m.setAccessible(true); 423ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println(m + " accessible=" + m.isAccessible()); 4245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 4253778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath m.invoke(null, objects, 0, 1); 4267a549467e332398229724058c07d998d0acfb0bbJeff Hao } catch (IllegalAccessException iae) { 4277a549467e332398229724058c07d998d0acfb0bbJeff Hao iae.printStackTrace(); 4287a549467e332398229724058c07d998d0acfb0bbJeff Hao return; 4297a549467e332398229724058c07d998d0acfb0bbJeff Hao } catch (InvocationTargetException ite) { 4307a549467e332398229724058c07d998d0acfb0bbJeff Hao ite.printStackTrace(); 4317a549467e332398229724058c07d998d0acfb0bbJeff Hao return; 4327a549467e332398229724058c07d998d0acfb0bbJeff Hao } 4337a549467e332398229724058c07d998d0acfb0bbJeff Hao 4347a549467e332398229724058c07d998d0acfb0bbJeff Hao try { 4357a549467e332398229724058c07d998d0acfb0bbJeff Hao String s = "Should be ignored"; 4363778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath m.invoke(s, objects, 0, 1); 4375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (IllegalAccessException iae) { 4385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao iae.printStackTrace(); 4395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return; 4405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (InvocationTargetException ite) { 4415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao ite.printStackTrace(); 4425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return; 4435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 4445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 4455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 4465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("checkType invoking null"); 4473778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath // Trigger an NPE at the target. 4483778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath m.invoke(null, null, 0, 1); 4495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ERROR: should throw InvocationTargetException"); 4505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (InvocationTargetException ite) { 4515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("checkType got expected exception"); 4525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } catch (IllegalAccessException iae) { 4535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao iae.printStackTrace(); 4545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return; 4555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 4565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 4575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 458923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes public static void checkClinitForFields() throws Exception { 459923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes // Loading a class constant shouldn't run <clinit>. 460923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("calling const-class FieldNoisyInitUser.class"); 461923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes Class niuClass = FieldNoisyInitUser.class; 462923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("called const-class FieldNoisyInitUser.class"); 463923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 464923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes // Getting the declared fields doesn't run <clinit>. 465923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes Field[] fields = niuClass.getDeclaredFields(); 466923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("got fields"); 467923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 468923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes Field field = niuClass.getField("staticField"); 469923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("got field"); 470923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes field.get(null); 471923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("read field value"); 472923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 473923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes // FieldNoisyInitUser should now be initialized, but FieldNoisyInit shouldn't be initialized yet. 474923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes FieldNoisyInitUser niu = new FieldNoisyInitUser(); 475923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes FieldNoisyInit ni = new FieldNoisyInit(); 476923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 477923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println(""); 478923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes } 479923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 480923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes public static void checkClinitForMethods() throws Exception { 481923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes // Loading a class constant shouldn't run <clinit>. 482923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("calling const-class MethodNoisyInitUser.class"); 483923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes Class niuClass = MethodNoisyInitUser.class; 484923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("called const-class MethodNoisyInitUser.class"); 485923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 486923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes // Getting the declared methods doesn't run <clinit>. 487923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes Method[] methods = niuClass.getDeclaredMethods(); 488923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("got methods"); 489923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 490923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes Method method = niuClass.getMethod("staticMethod", (Class[]) null); 491923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("got method"); 492923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes method.invoke(null); 493923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println("invoked method"); 494923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 495923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes // MethodNoisyInitUser should now be initialized, but MethodNoisyInit shouldn't be initialized yet. 496923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes MethodNoisyInitUser niu = new MethodNoisyInitUser(); 497923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes MethodNoisyInit ni = new MethodNoisyInit(); 498923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 499923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes System.out.println(""); 500741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 501741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 502741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 503741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes /* 504741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes * Test some generic type stuff. 505741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes */ 506741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes public List<String> dummy; 507741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes public Map<Integer,String> fancyMethod(ArrayList<String> blah) { return null; } 508741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes public static void checkGeneric() { 509741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Field field; 510741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 511741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes field = Main.class.getField("dummy"); 512741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (NoSuchFieldException nsfe) { 513741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException(nsfe); 514741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 515741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Type listType = field.getGenericType(); 516741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("generic field: " + listType); 517741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 518741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Method method; 519741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 520741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes method = Main.class.getMethod("fancyMethod", 521741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes new Class[] { ArrayList.class }); 522741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (NoSuchMethodException nsme) { 523741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException(nsme); 524741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 525741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Type[] parmTypes = method.getGenericParameterTypes(); 526741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Type ret = method.getGenericReturnType(); 527741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("generic method " + method.getName() + " params='" 528741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes + stringifyTypeArray(parmTypes) + "' ret='" + ret + "'"); 529741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 530741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Constructor ctor; 531741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 532741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes ctor = Main.class.getConstructor(new Class[] { ArrayList.class }); 533741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (NoSuchMethodException nsme) { 534741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException(nsme); 535741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 536741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes parmTypes = ctor.getGenericParameterTypes(); 537741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("generic ctor " + ctor.getName() + " params='" 538741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes + stringifyTypeArray(parmTypes) + "'"); 539741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 540741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 541741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes /* 542741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes * Convert an array of Type into a string. Start with an array count. 543741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes */ 544741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes private static String stringifyTypeArray(Type[] types) { 545741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes StringBuilder stb = new StringBuilder(); 546741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes boolean first = true; 547741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 548741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes stb.append("[" + types.length + "]"); 549741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 550741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes for (Type t: types) { 551741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (first) { 552741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes stb.append(" "); 553741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes first = false; 554741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } else { 555741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes stb.append(", "); 556741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 557741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes stb.append(t.toString()); 558741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 559741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 560741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes return stb.toString(); 5615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 5625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 563ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom public static void checkUnique() { 564ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom Field field1, field2; 565ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom try { 566ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom field1 = Main.class.getField("dummy"); 567ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom field2 = Main.class.getField("dummy"); 568ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } catch (NoSuchFieldException nsfe) { 569ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom throw new RuntimeException(nsfe); 570ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 571ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom if (field1 == field2) { 572ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("ERROR: fields shouldn't have reference equality"); 573ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } else { 574ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("fields are unique"); 575ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 576ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom if (field1.hashCode() == field2.hashCode() && field1.equals(field2)) { 577ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("fields are .equals"); 578ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } else { 579ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("ERROR: fields fail equality"); 580ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 581ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom Method method1, method2; 582ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom try { 583ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom method1 = Main.class.getMethod("fancyMethod", new Class[] { ArrayList.class }); 584ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom method2 = Main.class.getMethod("fancyMethod", new Class[] { ArrayList.class }); 585ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } catch (NoSuchMethodException nsme) { 586ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom throw new RuntimeException(nsme); 587ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 588ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom if (method1 == method2) { 589ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("ERROR: methods shouldn't have reference equality"); 590ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } else { 591ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("methods are unique"); 592ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 593ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom if (method1.hashCode() == method2.hashCode() && method1.equals(method2)) { 594ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("methods are .equals"); 595ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } else { 596ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom System.out.println("ERROR: methods fail equality"); 597ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 598ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom } 599741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 60068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski public static void checkParametrizedTypeEqualsAndHashCode() { 60168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Method method1; 60268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Method method2; 60368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Method method3; 60468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski try { 60568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski method1 = ParametrizedTypeTest.class.getDeclaredMethod("aMethod", Set.class); 60668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski method2 = ParametrizedTypeTest.class.getDeclaredMethod("aMethod", Set.class); 60768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski method3 = ParametrizedTypeTest.class.getDeclaredMethod("aMethodIdentical", Set.class); 60868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } catch (NoSuchMethodException nsme) { 60968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski throw new RuntimeException(nsme); 61068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 61168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 61268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski List<Type> types1 = Arrays.asList(method1.getGenericParameterTypes()); 61368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski List<Type> types2 = Arrays.asList(method2.getGenericParameterTypes()); 61468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski List<Type> types3 = Arrays.asList(method3.getGenericParameterTypes()); 61568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 61668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Type type1 = types1.get(0); 61768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Type type2 = types2.get(0); 61868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Type type3 = types3.get(0); 61968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 62068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1 instanceof ParameterizedType) { 62168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1 is a ParameterizedType"); 62268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 62368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type2 instanceof ParameterizedType) { 62468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type2 is a ParameterizedType"); 62568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 62668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type3 instanceof ParameterizedType) { 62768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type3 is a ParameterizedType"); 62868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 62968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 63068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.equals(type2)) { 63168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") equals type2("+type2+")"); 63268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 63368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") does not equal type2("+type2+")"); 63468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 63568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 63668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.equals(type3)) { 63768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") equals type3("+type3+")"); 63868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 63968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") does not equal type3("+type3+")"); 64068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 64168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.hashCode() == type2.hashCode()) { 64268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") hashCode equals type2("+type2+") hashCode"); 64368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 64468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println( 64568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski "type1("+type1+") hashCode does not equal type2("+type2+") hashCode"); 64668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 64768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 64868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.hashCode() == type3.hashCode()) { 64968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") hashCode equals type3("+type3+") hashCode"); 65068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 65168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println( 65268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski "type1("+type1+") hashCode does not equal type3("+type3+") hashCode"); 65368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 65468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 65568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 65668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski public static void checkGenericArrayTypeEqualsAndHashCode() { 65768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Method method1; 65868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Method method2; 65968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Method method3; 66068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski try { 66168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski method1 = GenericArrayTypeTest.class.getDeclaredMethod("aMethod", Object[].class); 66268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski method2 = GenericArrayTypeTest.class.getDeclaredMethod("aMethod", Object[].class); 66368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski method3 = GenericArrayTypeTest.class.getDeclaredMethod("aMethodIdentical", Object[].class); 66468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } catch (NoSuchMethodException nsme) { 66568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski throw new RuntimeException(nsme); 66668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 66768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 66868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski List<Type> types1 = Arrays.asList(method1.getGenericParameterTypes()); 66968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski List<Type> types2 = Arrays.asList(method2.getGenericParameterTypes()); 67068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski List<Type> types3 = Arrays.asList(method3.getGenericParameterTypes()); 67168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 67268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Type type1 = types1.get(0); 67368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Type type2 = types2.get(0); 67468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski Type type3 = types3.get(0); 67568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 67668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1 instanceof GenericArrayType) { 67768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1 is a GenericArrayType"); 67868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 67968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type2 instanceof GenericArrayType) { 68068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type2 is a GenericArrayType"); 68168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 68268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type3 instanceof GenericArrayType) { 68368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type3 is a GenericArrayType"); 68468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 68568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 68668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.equals(type2)) { 68768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") equals type2("+type2+")"); 68868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 68968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") does not equal type2("+type2+")"); 69068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 69168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 69268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.equals(type3)) { 69368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") equals type3("+type3+")"); 69468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 69568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") does not equal type3("+type3+")"); 69668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 69768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.hashCode() == type2.hashCode()) { 69868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") hashCode equals type2("+type2+") hashCode"); 69968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 70068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println( 70168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski "type1("+type1+") hashCode does not equal type2("+type2+") hashCode"); 70268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 70368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 70468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski if (type1.hashCode() == type3.hashCode()) { 70568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println("type1("+type1+") hashCode equals type3("+type3+") hashCode"); 70668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } else { 70768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski System.out.println( 70868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski "type1("+type1+") hashCode does not equal type3("+type3+") hashCode"); 70968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 71068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski } 71168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 7123ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier private static void checkGetDeclaredConstructor() { 7133ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier try { 7143ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier Method.class.getDeclaredConstructor().setAccessible(true); 7153778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath System.out.println("Didn't get an exception from Method.class.getDeclaredConstructor().setAccessible"); 716daaf3265806eb2eadb2e03302bd68022fab5ca28Mathieu Chartier } catch (SecurityException e) { 7173ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } catch (NoSuchMethodException e) { 7183ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } catch (Exception e) { 7193778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath System.out.println(e); 7203ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } 7213ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier try { 7223ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier Field.class.getDeclaredConstructor().setAccessible(true); 7233778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath System.out.println("Didn't get an exception from Field.class.getDeclaredConstructor().setAccessible"); 724daaf3265806eb2eadb2e03302bd68022fab5ca28Mathieu Chartier } catch (SecurityException e) { 7253ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } catch (NoSuchMethodException e) { 7263ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } catch (Exception e) { 7273778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath System.out.println(e); 7283ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } 7293ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier try { 7303ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier Class.class.getDeclaredConstructor().setAccessible(true); 7313778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath System.out.println("Didn't get an exception from Class.class.getDeclaredConstructor().setAccessible"); 7323ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } catch (SecurityException e) { 733daaf3265806eb2eadb2e03302bd68022fab5ca28Mathieu Chartier } catch (NoSuchMethodException e) { 7343ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } catch (Exception e) { 7353778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath System.out.println(e); 7363ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } 7373ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier } 7383ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier 739ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier static void checkPrivateFieldAccess() { 740ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier (new OtherClass()).test(); 741ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 742ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier 743923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes public static void main(String[] args) throws Exception { 7445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Main test = new Main(); 7455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao test.run(); 7465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7473ed4c549ac05dce7f7984746f8d07348fd4074d9Mathieu Chartier checkGetDeclaredConstructor(); 748741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes checkAccess(); 7493778c8769f05aafdc1bcc8064e8d1a9c1e008783Narayan Kamath checkSwap(); 750923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes checkClinitForFields(); 751923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes checkClinitForMethods(); 752741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes checkGeneric(); 753ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom checkUnique(); 75468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski checkParametrizedTypeEqualsAndHashCode(); 75568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski checkGenericArrayTypeEqualsAndHashCode(); 756ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier checkPrivateFieldAccess(); 7575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 7595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoclass SuperTarget { 7625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public SuperTarget() { 7635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("SuperTarget constructor ()V"); 7645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao superInt = 1010101; 7655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao superClassInt = 1010102; 7665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public int myMethod(float floatArg) { 7695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("myMethod (F)I " + floatArg); 7705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return 6; 7715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public int superInt; 7745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public static int superClassInt; 7755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 7765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoclass Target extends SuperTarget { 7785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public Target() { 7795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Target constructor ()V"); 7805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public Target(int ii, float ff) { 7835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("Target constructor (IF)V : ii=" 7845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao + ii + " ff=" + ff); 7855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao anInt = ii; 7865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public int myMethod(int intarg) throws NullPointerException, IOException { 7895d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("myMethod (I)I"); 7905d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(" arg=" + intarg + " anInt=" + anInt); 7915d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return 5; 7925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public int myMethod(String[] strarg, float f, char c) { 7955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("myMethod: " + strarg[0] + " " + f + " " + c + " !"); 7965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao return 7; 7975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 7985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 7995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public static void myNoargMethod() { 8005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("myNoargMethod ()V"); 8015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 8025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 8035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public void throwingMethod() { 8045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("throwingMethod"); 8055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new NullPointerException("gratuitous throw!"); 8065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 8075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 8085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public void misc() { 8095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("misc"); 8105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 8115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 8125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public int anInt; 8135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public String string1 = "hey"; 8145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public String string2 = "yo"; 8155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public String string3 = "there"; 8165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao private String string4 = "naughty"; 8175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public static final String constantString = "a constant string"; 8185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao private int aPrivateInt; 8195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 8205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public final int cantTouchThis = 77; 8215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 8225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public long pubLong = 0x1122334455667788L; 8235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 8245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public static double staticDouble = 3.3; 8255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 8265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 827923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughesclass FieldNoisyInit { 828ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier static { 829ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier System.out.println("FieldNoisyInit is initializing"); 830ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier //Throwable th = new Throwable(); 831ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier //th.printStackTrace(); 832ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 8335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 8345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 835923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughesclass FieldNoisyInitUser { 836ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier static { 837ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier System.out.println("FieldNoisyInitUser is initializing"); 838ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 839ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier public static int staticField; 840ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier public static FieldNoisyInit noisy; 841923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes} 842923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 843923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughesclass MethodNoisyInit { 844ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier static { 845ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier System.out.println("MethodNoisyInit is initializing"); 846ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier //Throwable th = new Throwable(); 847ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier //th.printStackTrace(); 848ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 849923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes} 850923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughes 851923e8b8e936ead33408e111682aa9372e3a7ed43Elliott Hughesclass MethodNoisyInitUser { 852ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier static { 853ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier System.out.println("MethodNoisyInitUser is initializing"); 854ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 855ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier public static void staticMethod() {} 856ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier public void createMethodNoisyInit(MethodNoisyInit ni) {} 8575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 85863f5b9e8f660ae761901072821ece30d87891644Jeff Hao 85963f5b9e8f660ae761901072821ece30d87891644Jeff Haoclass Thrower { 860ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier public Thrower() throws UnsupportedOperationException { 861ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier throw new UnsupportedOperationException(); 862ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 86363f5b9e8f660ae761901072821ece30d87891644Jeff Hao} 86468b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 86568b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebskiclass ParametrizedTypeTest { 86668b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski public void aMethod(Set<String> names) {} 86768b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski public void aMethodIdentical(Set<String> names) {} 86868b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski} 86968b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski 87068b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebskiclass GenericArrayTypeTest<T> { 87168b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski public void aMethod(T[] names) {} 87268b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski public void aMethodIdentical(T[] names) {} 87368b539ed7be2762bcab43f1c05174ef4a1d15625Piotr Jastrzebski} 874ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier 875ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartierclass OtherClass { 876ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier private static final long LONG = 1234; 877ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier public void test() { 878ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier try { 879ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier Field field = getClass().getDeclaredField("LONG"); 880ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier if (1234 != field.getLong(null)) { 881ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier System.out.println("ERROR: values don't match"); 882ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 883ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } catch (Exception e) { 884ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier System.out.println(e); 885ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 886ca239af73e512df5eeb80fe6c09c2ca614649e06Mathieu Chartier } 8873beb245da9392818e3154d47593f82cf0ef69aacMathieu Chartier} 888