Browse Source

+ added several reflection classes for use in array processing

git-svn-id: branches/jvmbackend@18502 -
Jonas Maebe 14 years ago
parent
commit
6c35ea202b
2 changed files with 209 additions and 23 deletions
  1. 121 0
      rtl/java/java_sys.inc
  2. 88 23
      rtl/java/java_sysh.inc

+ 121 - 0
rtl/java/java_sys.inc

@@ -75,6 +75,46 @@
     class function mapLibraryName(para1: JLString): JLString; static; overload;
     class function mapLibraryName(para1: JLString): JLString; static; overload;
   end;
   end;
 
 
+  JLRAnnotatedElement = interface external 'java.lang.reflect' name 'AnnotatedElement' 
+    function isAnnotationPresent(para1: JLClass): jboolean; overload;
+    function getAnnotation(para1: JLClass): JLAAnnotation; overload;
+    function getAnnotations(): Arr1JLAAnnotation; overload;
+    function getDeclaredAnnotations(): Arr1JLAAnnotation; overload;
+  end;
+
+  JLRArray = class sealed external 'java.lang.reflect' name 'Array' (JLObject)
+  public
+    class function newInstance(para1: JLClass; para2: jint): JLObject; static; overload;  // throws java.lang.NegativeArraySizeException
+    class function newInstance(para1: JLClass; para2: Arr1jint): JLObject; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException
+    class function newInstance(para1: JLClass; var para2: array of jint): JLObject; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException
+    class function getLength(para1: JLObject): jint; static; overload;  // throws java.lang.IllegalArgumentException
+    class function get(para1: JLObject; para2: jint): JLObject; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getBoolean(para1: JLObject; para2: jint): jboolean; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getByte(para1: JLObject; para2: jint): jbyte; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getChar(para1: JLObject; para2: jint): jchar; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getShort(para1: JLObject; para2: jint): jshort; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getInt(para1: JLObject; para2: jint): jint; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getLong(para1: JLObject; para2: jint): jlong; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getFloat(para1: JLObject; para2: jint): jfloat; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class function getDouble(para1: JLObject; para2: jint): jdouble; static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure &set(para1: JLObject; para2: jint; para3: JLObject); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setBoolean(para1: JLObject; para2: jint; para3: jboolean); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setByte(para1: JLObject; para2: jint; para3: jbyte); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setChar(para1: JLObject; para2: jint; para3: jchar); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setShort(para1: JLObject; para2: jint; para3: jshort); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setInt(para1: JLObject; para2: jint; para3: jint); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setLong(para1: JLObject; para2: jint; para3: jlong); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setFloat(para1: JLObject; para2: jint; para3: jfloat); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+    class procedure setDouble(para1: JLObject; para2: jint; para3: jdouble); static; overload;  // throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
+  end;
+
+  JLRGenericDeclaration = interface external 'java.lang.reflect' name 'GenericDeclaration' 
+    function getTypeParameters(): Arr1JLRTypeVariable; overload;
+  end;
+
+  JLRType = interface external 'java.lang.reflect' name 'Type' 
+  end;
+
   JUComparator = interface external 'java.util' name 'Comparator' 
   JUComparator = interface external 'java.util' name 'Comparator' 
     function compare(para1: JLObject; para2: JLObject): jint; overload;
     function compare(para1: JLObject; para2: JLObject): jint; overload;
     function equals(para1: JLObject): jboolean; overload;
     function equals(para1: JLObject): jboolean; overload;
@@ -613,6 +653,87 @@
     function compareTo(para1: JLObject): jint; overload; virtual;
     function compareTo(para1: JLObject): jint; overload; virtual;
   end;
   end;
 
 
+  JLClass = class sealed external 'java.lang' name 'Class' (JLObject, JISerializable, JLRGenericDeclaration, JLRType, JLRAnnotatedElement)
+  public
+    type
+      InnerMethodArray = class;
+      Arr1InnerMethodArray = array of InnerMethodArray;
+      Arr2InnerMethodArray = array of Arr1InnerMethodArray;
+      Arr3InnerMethodArray = array of Arr2InnerMethodArray;
+      InnerEnclosingMethodInfo = class;
+      Arr1InnerEnclosingMethodInfo = array of InnerEnclosingMethodInfo;
+      Arr2InnerEnclosingMethodInfo = array of Arr1InnerEnclosingMethodInfo;
+      Arr3InnerEnclosingMethodInfo = array of Arr2InnerEnclosingMethodInfo;
+      InnerMethodArray = class external 'java.lang' name 'Class$MethodArray' 
+      end;
+
+      InnerEnclosingMethodInfo = class sealed external 'java.lang' name 'Class$EnclosingMethodInfo' 
+      end;
+
+  public
+    function toString(): JLString; overload; virtual;
+    class function forName(para1: JLString): JLClass; static; overload;  // throws java.lang.ClassNotFoundException
+    class function forName(para1: JLString; para2: jboolean; para3: JLClassLoader): JLClass; static; overload;  // throws java.lang.ClassNotFoundException
+    function newInstance(): JLObject; overload; virtual;  // throws java.lang.InstantiationException, java.lang.IllegalAccessException
+    function isInstance(para1: JLObject): jboolean; overload; virtual;
+    function isAssignableFrom(para1: JLClass): jboolean; overload; virtual;
+    function isInterface(): jboolean; overload; virtual;
+    function isArray(): jboolean; overload; virtual;
+    function isPrimitive(): jboolean; overload; virtual;
+    function isAnnotation(): jboolean; overload; virtual;
+    function isSynthetic(): jboolean; overload; virtual;
+    function getName(): JLString; overload; virtual;
+    function getClassLoader(): JLClassLoader; overload; virtual;
+    function getTypeParameters(): Arr1JLRTypeVariable; overload; virtual;
+    function getSuperclass(): JLClass; overload; virtual;
+    function getGenericSuperclass(): JLRType; overload; virtual;
+    function getPackage(): JLPackage; overload; virtual;
+    function getInterfaces(): Arr1JLClass; overload; virtual;
+    function getGenericInterfaces(): Arr1JLRType; overload; virtual;
+    function getComponentType(): JLClass; overload; virtual;
+    function getModifiers(): jint; overload; virtual;
+    function getSigners(): Arr1JLObject; overload; virtual;
+    function getEnclosingMethod(): JLRMethod; overload; virtual;
+    function getEnclosingConstructor(): JLRConstructor; overload; virtual;
+    function getDeclaringClass(): JLClass; overload; virtual;
+    function getEnclosingClass(): JLClass; overload; virtual;
+    function getSimpleName(): JLString; overload; virtual;
+    function getCanonicalName(): JLString; overload; virtual;
+    function isAnonymousClass(): jboolean; overload; virtual;
+    function isLocalClass(): jboolean; overload; virtual;
+    function isMemberClass(): jboolean; overload; virtual;
+    function getClasses(): Arr1JLClass; overload; virtual;
+    function getFields(): Arr1JLRField; overload; virtual;  // throws java.lang.SecurityException
+    function getMethods(): Arr1JLRMethod; overload; virtual;  // throws java.lang.SecurityException
+    function getConstructors(): Arr1JLRConstructor; overload; virtual;  // throws java.lang.SecurityException
+    function getField(para1: JLString): JLRField; overload; virtual;  // throws java.lang.NoSuchFieldException, java.lang.SecurityException
+    function getMethod(para1: JLString; para2: Arr1JLClass): JLRMethod; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getMethod(para1: JLString; var para2: array of JLClass): JLRMethod; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getConstructor(para1: Arr1JLClass): JLRConstructor; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getConstructor(var para1: array of JLClass): JLRConstructor; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getDeclaredClasses(): Arr1JLClass; overload; virtual;  // throws java.lang.SecurityException
+    function getDeclaredFields(): Arr1JLRField; overload; virtual;  // throws java.lang.SecurityException
+    function getDeclaredMethods(): Arr1JLRMethod; overload; virtual;  // throws java.lang.SecurityException
+    function getDeclaredConstructors(): Arr1JLRConstructor; overload; virtual;  // throws java.lang.SecurityException
+    function getDeclaredField(para1: JLString): JLRField; overload; virtual;  // throws java.lang.NoSuchFieldException, java.lang.SecurityException
+    function getDeclaredMethod(para1: JLString; para2: Arr1JLClass): JLRMethod; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getDeclaredMethod(para1: JLString; var para2: array of JLClass): JLRMethod; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getDeclaredConstructor(para1: Arr1JLClass): JLRConstructor; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getDeclaredConstructor(var para1: array of JLClass): JLRConstructor; overload; virtual;  // throws java.lang.NoSuchMethodException, java.lang.SecurityException
+    function getResourceAsStream(para1: JLString): JIInputStream; overload; virtual;
+    function getResource(para1: JLString): JNURL; overload; virtual;
+    function getProtectionDomain(): JSProtectionDomain; overload; virtual;
+    function desiredAssertionStatus(): jboolean; overload; virtual;
+    function isEnum(): jboolean; overload; virtual;
+    function getEnumConstants(): Arr1JLObject; overload; virtual;
+    function cast(para1: JLObject): JLObject; overload; virtual;
+    function asSubclass(para1: JLClass): JLClass; overload; virtual;
+    function getAnnotation(para1: JLClass): JLAAnnotation; overload; virtual;
+    function isAnnotationPresent(para1: JLClass): jboolean; overload; virtual;
+    function getAnnotations(): Arr1JLAAnnotation; overload; virtual;
+    function getDeclaredAnnotations(): Arr1JLAAnnotation; overload; virtual;
+  end;
+
   JTCollator = class abstract external 'java.text' name 'Collator' (JLObject, JUComparator, JLCloneable)
   JTCollator = class abstract external 'java.text' name 'Collator' (JLObject, JUComparator, JLCloneable)
   public
   public
     type
     type

+ 88 - 23
rtl/java/java_sysh.inc

@@ -1,4 +1,4 @@
-{ Imports for Java packages/classes: java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.CharSequence, java.lang.Character, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IndexOutOfBoundsException, java.lang.LinkageError, java.lang.Number, java.lang.Object, java.lang.RuntimeException, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.Throwable, java.text.Collator, java.util.Comparator }
+{ Imports for Java packages/classes: java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IndexOutOfBoundsException, java.lang.LinkageError, java.lang.Number, java.lang.Object, java.lang.RuntimeException, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.Throwable, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.GenericDeclaration, java.lang.reflect.Type, java.text.Collator, java.util.Comparator }
 type
 type
   JLStringBuffer = class;
   JLStringBuffer = class;
   Arr1JLStringBuffer = array of JLStringBuffer;
   Arr1JLStringBuffer = array of JLStringBuffer;
@@ -30,6 +30,11 @@ type
   Arr2JLLinkageError = array of Arr1JLLinkageError;
   Arr2JLLinkageError = array of Arr1JLLinkageError;
   Arr3JLLinkageError = array of Arr2JLLinkageError;
   Arr3JLLinkageError = array of Arr2JLLinkageError;
 
 
+  JLRArray = class;
+  Arr1JLRArray = array of JLRArray;
+  Arr2JLRArray = array of Arr1JLRArray;
+  Arr3JLRArray = array of Arr2JLRArray;
+
   JLError = class;
   JLError = class;
   Arr1JLError = array of JLError;
   Arr1JLError = array of JLError;
   Arr2JLError = array of Arr1JLError;
   Arr2JLError = array of Arr1JLError;
@@ -70,6 +75,11 @@ type
   Arr2JLIllegalArgumentException = array of Arr1JLIllegalArgumentException;
   Arr2JLIllegalArgumentException = array of Arr1JLIllegalArgumentException;
   Arr3JLIllegalArgumentException = array of Arr2JLIllegalArgumentException;
   Arr3JLIllegalArgumentException = array of Arr2JLIllegalArgumentException;
 
 
+  JLClass = class;
+  Arr1JLClass = array of JLClass;
+  Arr2JLClass = array of Arr1JLClass;
+  Arr3JLClass = array of Arr2JLClass;
+
   JLString = class;
   JLString = class;
   Arr1JLString = array of JLString;
   Arr1JLString = array of JLString;
   Arr2JLString = array of Arr1JLString;
   Arr2JLString = array of Arr1JLString;
@@ -95,6 +105,16 @@ type
   Arr2JLCharSequence = array of Arr1JLCharSequence;
   Arr2JLCharSequence = array of Arr1JLCharSequence;
   Arr3JLCharSequence = array of Arr2JLCharSequence;
   Arr3JLCharSequence = array of Arr2JLCharSequence;
 
 
+  JLRGenericDeclaration = interface;
+  Arr1JLRGenericDeclaration = array of JLRGenericDeclaration;
+  Arr2JLRGenericDeclaration = array of Arr1JLRGenericDeclaration;
+  Arr3JLRGenericDeclaration = array of Arr2JLRGenericDeclaration;
+
+  JLRAnnotatedElement = interface;
+  Arr1JLRAnnotatedElement = array of JLRAnnotatedElement;
+  Arr2JLRAnnotatedElement = array of Arr1JLRAnnotatedElement;
+  Arr3JLRAnnotatedElement = array of Arr2JLRAnnotatedElement;
+
   JLCloneable = interface;
   JLCloneable = interface;
   Arr1JLCloneable = array of JLCloneable;
   Arr1JLCloneable = array of JLCloneable;
   Arr2JLCloneable = array of Arr1JLCloneable;
   Arr2JLCloneable = array of Arr1JLCloneable;
@@ -110,6 +130,11 @@ type
   Arr2JLAppendable = array of Arr1JLAppendable;
   Arr2JLAppendable = array of Arr1JLAppendable;
   Arr3JLAppendable = array of Arr2JLAppendable;
   Arr3JLAppendable = array of Arr2JLAppendable;
 
 
+  JLRType = interface;
+  Arr1JLRType = array of JLRType;
+  Arr2JLRType = array of Arr1JLRType;
+  Arr3JLRType = array of Arr2JLRType;
+
   JISerializable = interface;
   JISerializable = interface;
   Arr1JISerializable = array of JISerializable;
   Arr1JISerializable = array of JISerializable;
   Arr2JISerializable = array of Arr1JISerializable;
   Arr2JISerializable = array of Arr1JISerializable;
@@ -125,61 +150,101 @@ type
   Arr2JLStackTraceElement = array of Arr1JLStackTraceElement;
   Arr2JLStackTraceElement = array of Arr1JLStackTraceElement;
   Arr3JLStackTraceElement = array of Arr2JLStackTraceElement;
   Arr3JLStackTraceElement = array of Arr2JLStackTraceElement;
 
 
+  JLClassLoader = class external 'java.lang' name 'ClassLoader';
+  Arr1JLClassLoader = array of JLClassLoader;
+  Arr2JLClassLoader = array of Arr1JLClassLoader;
+  Arr3JLClassLoader = array of Arr2JLClassLoader;
+
+  JUProperties = class external 'java.util' name 'Properties';
+  Arr1JUProperties = array of JUProperties;
+  Arr2JUProperties = array of Arr1JUProperties;
+  Arr3JUProperties = array of Arr2JUProperties;
+
+  JIInputStream = class external 'java.io' name 'InputStream';
+  Arr1JIInputStream = array of JIInputStream;
+  Arr2JIInputStream = array of Arr1JIInputStream;
+  Arr3JIInputStream = array of Arr2JIInputStream;
+
+  JLSecurityManager = class external 'java.lang' name 'SecurityManager';
+  Arr1JLSecurityManager = array of JLSecurityManager;
+  Arr2JLSecurityManager = array of Arr1JLSecurityManager;
+  Arr3JLSecurityManager = array of Arr2JLSecurityManager;
+
+  JSProtectionDomain = class external 'java.security' name 'ProtectionDomain';
+  Arr1JSProtectionDomain = array of JSProtectionDomain;
+  Arr2JSProtectionDomain = array of Arr1JSProtectionDomain;
+  Arr3JSProtectionDomain = array of Arr2JSProtectionDomain;
+
+  JLRField = class external 'java.lang.reflect' name 'Field';
+  Arr1JLRField = array of JLRField;
+  Arr2JLRField = array of Arr1JLRField;
+  Arr3JLRField = array of Arr2JLRField;
+
+  JIPrintStream = class external 'java.io' name 'PrintStream';
+  Arr1JIPrintStream = array of JIPrintStream;
+  Arr2JIPrintStream = array of Arr1JIPrintStream;
+  Arr3JIPrintStream = array of Arr2JIPrintStream;
+
+  JLRMethod = class external 'java.lang.reflect' name 'Method';
+  Arr1JLRMethod = array of JLRMethod;
+  Arr2JLRMethod = array of Arr1JLRMethod;
+  Arr3JLRMethod = array of Arr2JLRMethod;
+
   JTCollationKey = class external 'java.text' name 'CollationKey';
   JTCollationKey = class external 'java.text' name 'CollationKey';
   Arr1JTCollationKey = array of JTCollationKey;
   Arr1JTCollationKey = array of JTCollationKey;
   Arr2JTCollationKey = array of Arr1JTCollationKey;
   Arr2JTCollationKey = array of Arr1JTCollationKey;
   Arr3JTCollationKey = array of Arr2JTCollationKey;
   Arr3JTCollationKey = array of Arr2JTCollationKey;
 
 
+  JLRConstructor = class external 'java.lang.reflect' name 'Constructor';
+  Arr1JLRConstructor = array of JLRConstructor;
+  Arr2JLRConstructor = array of Arr1JLRConstructor;
+  Arr3JLRConstructor = array of Arr2JLRConstructor;
+
   JIPrintWriter = class external 'java.io' name 'PrintWriter';
   JIPrintWriter = class external 'java.io' name 'PrintWriter';
   Arr1JIPrintWriter = array of JIPrintWriter;
   Arr1JIPrintWriter = array of JIPrintWriter;
   Arr2JIPrintWriter = array of Arr1JIPrintWriter;
   Arr2JIPrintWriter = array of Arr1JIPrintWriter;
   Arr3JIPrintWriter = array of Arr2JIPrintWriter;
   Arr3JIPrintWriter = array of Arr2JIPrintWriter;
 
 
-  JUProperties = class external 'java.util' name 'Properties';
-  Arr1JUProperties = array of JUProperties;
-  Arr2JUProperties = array of Arr1JUProperties;
-  Arr3JUProperties = array of Arr2JUProperties;
+  JLPackage = class external 'java.lang' name 'Package';
+  Arr1JLPackage = array of JLPackage;
+  Arr2JLPackage = array of Arr1JLPackage;
+  Arr3JLPackage = array of Arr2JLPackage;
 
 
-  JIInputStream = class external 'java.io' name 'InputStream';
-  Arr1JIInputStream = array of JIInputStream;
-  Arr2JIInputStream = array of Arr1JIInputStream;
-  Arr3JIInputStream = array of Arr2JIInputStream;
+  JNURL = class external 'java.net' name 'URL';
+  Arr1JNURL = array of JNURL;
+  Arr2JNURL = array of Arr1JNURL;
+  Arr3JNURL = array of Arr2JNURL;
 
 
   JIConsole = class external 'java.io' name 'Console';
   JIConsole = class external 'java.io' name 'Console';
   Arr1JIConsole = array of JIConsole;
   Arr1JIConsole = array of JIConsole;
   Arr2JIConsole = array of Arr1JIConsole;
   Arr2JIConsole = array of Arr1JIConsole;
   Arr3JIConsole = array of Arr2JIConsole;
   Arr3JIConsole = array of Arr2JIConsole;
 
 
-  JLClass = class external 'java.lang' name 'Class';
-  Arr1JLClass = array of JLClass;
-  Arr2JLClass = array of Arr1JLClass;
-  Arr3JLClass = array of Arr2JLClass;
-
   JULocale = class external 'java.util' name 'Locale';
   JULocale = class external 'java.util' name 'Locale';
   Arr1JULocale = array of JULocale;
   Arr1JULocale = array of JULocale;
   Arr2JULocale = array of Arr1JULocale;
   Arr2JULocale = array of Arr1JULocale;
   Arr3JULocale = array of Arr2JULocale;
   Arr3JULocale = array of Arr2JULocale;
 
 
-  JLSecurityManager = class external 'java.lang' name 'SecurityManager';
-  Arr1JLSecurityManager = array of JLSecurityManager;
-  Arr2JLSecurityManager = array of Arr1JLSecurityManager;
-  Arr3JLSecurityManager = array of Arr2JLSecurityManager;
-
   JNCCharset = class external 'java.nio.charset' name 'Charset';
   JNCCharset = class external 'java.nio.charset' name 'Charset';
   Arr1JNCCharset = array of JNCCharset;
   Arr1JNCCharset = array of JNCCharset;
   Arr2JNCCharset = array of Arr1JNCCharset;
   Arr2JNCCharset = array of Arr1JNCCharset;
   Arr3JNCCharset = array of Arr2JNCCharset;
   Arr3JNCCharset = array of Arr2JNCCharset;
 
 
-  JIPrintStream = class external 'java.io' name 'PrintStream';
-  Arr1JIPrintStream = array of JIPrintStream;
-  Arr2JIPrintStream = array of Arr1JIPrintStream;
-  Arr3JIPrintStream = array of Arr2JIPrintStream;
+  JLAAnnotation = interface external 'java.lang.annotation' name 'Annotation';
+  Arr1JLAAnnotation = array of JLAAnnotation;
+  Arr2JLAAnnotation = array of Arr1JLAAnnotation;
+  Arr3JLAAnnotation = array of Arr2JLAAnnotation;
 
 
   JNCChannel = interface external 'java.nio.channels' name 'Channel';
   JNCChannel = interface external 'java.nio.channels' name 'Channel';
   Arr1JNCChannel = array of JNCChannel;
   Arr1JNCChannel = array of JNCChannel;
   Arr2JNCChannel = array of Arr1JNCChannel;
   Arr2JNCChannel = array of Arr1JNCChannel;
   Arr3JNCChannel = array of Arr2JNCChannel;
   Arr3JNCChannel = array of Arr2JNCChannel;
 
 
+  JLRTypeVariable = interface external 'java.lang.reflect' name 'TypeVariable';
+  Arr1JLRTypeVariable = array of JLRTypeVariable;
+  Arr2JLRTypeVariable = array of Arr1JLRTypeVariable;
+  Arr3JLRTypeVariable = array of Arr2JLRTypeVariable;
+
   JUMap = interface external 'java.util' name 'Map';
   JUMap = interface external 'java.util' name 'Map';
   Arr1JUMap = array of JUMap;
   Arr1JUMap = array of JUMap;
   Arr2JUMap = array of Arr1JUMap;
   Arr2JUMap = array of Arr1JUMap;