Method name is myMethod
 Declaring class is Target
 Arg 0: int
 Exc 0: java.lang.NullPointerException
 Exc 1: java.io.IOException
 Return type is int
 Access flags are 0x1
Method name is myMethod
 Declaring class is SuperTarget
 Arg 0: float
 Return type is int
 Access flags are 0x1
Method name is myNoargMethod
 Declaring class is Target
 Return type is void
 Access flags are 0x9
Method name is myMethod
 Declaring class is Target
 Arg 0: [Ljava.lang.String;
 Arg 1: float
 Arg 2: char
 Return type is int
 Access flags are 0x1
SuperTarget constructor ()V
Target constructor ()V
Before, float is 3.1415925
myMethod: hi there 3.1415925 ✔ !
Result of invoke: 7
Calling no-arg void-return method
myNoargMethod ()V
throwingMethod
Invoke got expected exception:
java.lang.reflect.InvocationTargetException
java.lang.NullPointerException: gratuitous throw!

Field name is string1
 Declaring class is Target
 Field type is java.lang.String
 Access flags are 0x1
  string1 value is 'hey'
  ::: hey:yo:there
  string1 value is now 'a new string'
  ::: a new string:yo:there
  got expected illegal obj store exc
  got the other expected access exc
  got expected arg exc
pubLong initial value is 1122334455667788
pubLong new value is 9988776655443322
Field name is superInt
 Declaring class is SuperTarget
 Field type is int
 Access flags are 0x1
  superInt value is 1010101
  superInt boxed is 1010101
  superInt value is now 20202
  superInt value (from short) is now 30303
  superInt value is now 40404
  got expected long->int failure
  got expected long->int failure
  got expected string->int failure
  got expected int->short failure
Field name is superClassInt
 Declaring class is SuperTarget
 Field type is int
 Access flags are 0x9
  superClassInt value is 1010102
Field name is staticDouble
 Declaring class is Target
 Field type is double
 Access flags are 0x9
  staticDoubleVal value is 3.3
  got expected double->long failure
as expected: aPrivateInt not found
Field name is constantString
 Declaring class is Target
 Field type is java.lang.String
 Access flags are 0x19
  Constant test value is a constant string
Field name is cantTouchThis
 Declaring class is Target
 Field type is int
 Access flags are 0x11
  cantTouchThis is 77
  as expected: set-final throws exception
  cantTouchThis is still 77
  public final int Target.cantTouchThis accessible=false
  public final int Target.cantTouchThis accessible=true
  cantTouchThis is now 87
  cantTouchThis is now 88
cons modifiers=1
SuperTarget constructor ()V
Target constructor (IF)V : ii=7 ff=3.3333
myMethod (I)I
 arg=17 anInt=7
got expected exception for Class.newInstance
got expected exception for Constructor.newInstance
ReflectTest done!
public method
private static void java.util.Collections.swap(java.lang.Object[],int,int) accessible=false
private static void java.util.Collections.swap(java.lang.Object[],int,int) accessible=true
checkType invoking null
checkType got expected exception
calling const-class FieldNoisyInitUser.class
called const-class FieldNoisyInitUser.class
got fields
got field
FieldNoisyInitUser is initializing
read field value
FieldNoisyInit is initializing

calling const-class MethodNoisyInitUser.class
called const-class MethodNoisyInitUser.class
got methods
got method
MethodNoisyInitUser is initializing
invoked method
MethodNoisyInit is initializing

generic field: java.util.List<java.lang.String>
generic method fancyMethod params='[1] java.util.ArrayList<java.lang.String>' ret='java.util.Map<java.lang.Integer, java.lang.String>'
generic ctor Main params='[1] java.util.ArrayList<java.lang.Integer>'
fields are unique
fields are .equals
methods are unique
methods are .equals
type1 is a ParameterizedType
type2 is a ParameterizedType
type3 is a ParameterizedType
type1(java.util.Set<java.lang.String>) equals type2(java.util.Set<java.lang.String>)
type1(java.util.Set<java.lang.String>) equals type3(java.util.Set<java.lang.String>)
type1(java.util.Set<java.lang.String>) hashCode equals type2(java.util.Set<java.lang.String>) hashCode
type1(java.util.Set<java.lang.String>) hashCode equals type3(java.util.Set<java.lang.String>) hashCode
type1 is a GenericArrayType
type2 is a GenericArrayType
type3 is a GenericArrayType
type1(T[]) equals type2(T[])
type1(T[]) equals type3(T[])
type1(T[]) hashCode equals type2(T[]) hashCode
type1(T[]) hashCode equals type3(T[]) hashCode
