FOREIGN MODULE java_lang_reflect;

IMPORT
    java_security := "java.security",
    sun_reflect := "sun.reflect",
    java_lang := "java.lang",
    java_lang_annotation := "java.lang.annotation",
    sun_reflect_generics_repository := "sun.reflect.generics.repository",
    java_util := "java.util",
    sun_reflect_generics_factory := "sun.reflect.generics.factory",
    java_io := "java.io";

TYPE

  AccessibleObject* = POINTER TO EXTENSIBLE RECORD (java_lang.Object + AnnotatedElement)    (* Typebound Procedures *)
                      STATIC
                        PROCEDURE Init!() : AccessibleObject,CONSTRUCTOR;
                        PROCEDURE setAccessible*(IN  p0 : ARRAY OF AccessibleObject;
                                                     p1 : BOOLEAN);
                      END;

  AnnotatedElement* = POINTER TO INTERFACE RECORD (java_lang.Object)    (* Typebound Procedures *)
                      END;

  Array* = POINTER TO RECORD (java_lang.Object)
           STATIC
             PROCEDURE get*(p0 : java_lang.Object;
                            p1 : INTEGER) : java_lang.Object;
             PROCEDURE getBoolean*(p0 : java_lang.Object;
                                   p1 : INTEGER) : BOOLEAN;
             PROCEDURE getByte*(p0 : java_lang.Object;
                                p1 : INTEGER) : BYTE;
             PROCEDURE getChar*(p0 : java_lang.Object;
                                p1 : INTEGER) : CHAR;
             PROCEDURE getDouble*(p0 : java_lang.Object;
                                  p1 : INTEGER) : REAL;
             PROCEDURE getFloat*(p0 : java_lang.Object;
                                 p1 : INTEGER) : SHORTREAL;
             PROCEDURE getInt*(p0 : java_lang.Object;
                               p1 : INTEGER) : INTEGER;
             PROCEDURE getLength*(p0 : java_lang.Object) : INTEGER;
             PROCEDURE getLong*(p0 : java_lang.Object;
                                p1 : INTEGER) : LONGINT;
             PROCEDURE getShort*(p0 : java_lang.Object;
                                 p1 : INTEGER) : SHORTINT;
             PROCEDURE newInstance*(p0 : java_lang.Class;
                                    p1 : INTEGER) : java_lang.Object;
             PROCEDURE newInstance*(    p0 : java_lang.Class;
                                    IN  p1 : ARRAY OF INTEGER) : java_lang.Object;
             PROCEDURE set*(p0 : java_lang.Object;
                            p1 : INTEGER;
                            p2 : java_lang.Object);
             PROCEDURE setBoolean*(p0 : java_lang.Object;
                                   p1 : INTEGER;
                                   p2 : BOOLEAN);
             PROCEDURE setByte*(p0 : java_lang.Object;
                                p1 : INTEGER;
                                p2 : BYTE);
             PROCEDURE setChar*(p0 : java_lang.Object;
                                p1 : INTEGER;
                                p2 : CHAR);
             PROCEDURE setDouble*(p0 : java_lang.Object;
                                  p1 : INTEGER;
                                  p2 : REAL);
             PROCEDURE setFloat*(p0 : java_lang.Object;
                                 p1 : INTEGER;
                                 p2 : SHORTREAL);
             PROCEDURE setInt*(p0 : java_lang.Object;
                               p1 : INTEGER;
                               p2 : INTEGER);
             PROCEDURE setLong*(p0 : java_lang.Object;
                                p1 : INTEGER;
                                p2 : LONGINT);
             PROCEDURE setShort*(p0 : java_lang.Object;
                                 p1 : INTEGER;
                                 p2 : SHORTINT);
           END;

  Constructor* = POINTER TO RECORD (AccessibleObject + GenericDeclaration + Member)    (* Typebound Procedures *)
                 END;

  Field* = POINTER TO RECORD (AccessibleObject + Member)    (* Typebound Procedures *)
           END;

  GenericArrayType* = POINTER TO INTERFACE RECORD (java_lang.Object + Type)    (* Typebound Procedures *)
                      END;

  GenericDeclaration* = POINTER TO INTERFACE RECORD (java_lang.Object)    (* Typebound Procedures *)
                        END;

  GenericSignatureFormatError* = POINTER TO EXTENSIBLE RECORD (java_lang.ClassFormatError)
                                 STATIC
                                   PROCEDURE Init*() : GenericSignatureFormatError,CONSTRUCTOR;
                                 END;

  InvocationHandler* = POINTER TO INTERFACE RECORD (java_lang.Object)    (* Typebound Procedures *)
                       END;

  InvocationTargetException* = POINTER TO EXTENSIBLE RECORD (java_lang.Exception)    (* Typebound Procedures *)
                               STATIC
                                 PROCEDURE Init*(p0 : java_lang.Throwable;
                                                 p1 : java_lang.String) : InvocationTargetException,CONSTRUCTOR;
                                 PROCEDURE Init*(p0 : java_lang.Throwable) : InvocationTargetException,CONSTRUCTOR;
                                 PROCEDURE Init!() : InvocationTargetException,CONSTRUCTOR;
                               END;

  MalformedParameterizedTypeException* = POINTER TO EXTENSIBLE RECORD (java_lang.RuntimeException)
                                         STATIC
                                           PROCEDURE Init*() : MalformedParameterizedTypeException,CONSTRUCTOR;
                                         END;

  Member* = POINTER TO INTERFACE RECORD (java_lang.Object)    (* Typebound Procedures *)
            STATIC
              DECLARED* = 1;
              PUBLIC*   = 0;
            END;

  Method* = POINTER TO RECORD (AccessibleObject + GenericDeclaration + Member)    (* Typebound Procedures *)
            END;

  Modifier* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
              STATIC
                ABSTRACT*       = 1024;
                FINAL*          = 16;
                INTERFACE*      = 512;
                NATIVE*         = 256;
                PRIVATE*        = 2;
                PROTECTED*      = 4;
                PUBLIC*         = 1;
                STATIC*         = 8;
                STRICT*         = 2048;
                SYNCHRONIZED*   = 32;
                TRANSIENT*      = 128;
                VOLATILE*       = 64;
                PROCEDURE Init*() : Modifier,CONSTRUCTOR;
                PROCEDURE isAbstract*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isFinal*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isInterface*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isNative*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isPrivate*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isProtected*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isPublic*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isStatic*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isStrict*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isSynchronized*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isTransient*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE isVolatile*(p0 : INTEGER) : BOOLEAN;
                PROCEDURE toString*(p0 : INTEGER) : java_lang.String;
              END;

  ParameterizedType* = POINTER TO INTERFACE RECORD (java_lang.Object + Type)    (* Typebound Procedures *)
                       END;

  Proxy* = POINTER TO EXTENSIBLE RECORD (java_lang.Object + java_io.Serializable)
             h! : InvocationHandler;
           STATIC
             PROCEDURE getInvocationHandler*(p0 : java_lang.Object) : InvocationHandler;
             PROCEDURE getProxyClass*(    p0 : java_lang.ClassLoader;
                                      IN  p1 : ARRAY OF java_lang.Class) : java_lang.Class;
             PROCEDURE Init!(p0 : InvocationHandler) : Proxy,CONSTRUCTOR;
             PROCEDURE isProxyClass*(p0 : java_lang.Class) : BOOLEAN;
             PROCEDURE newProxyInstance*(    p0 : java_lang.ClassLoader;
                                         IN  p1 : ARRAY OF java_lang.Class;
                                             p2 : InvocationHandler) : java_lang.Object;
           END;

  ReflectPermission* = POINTER TO RECORD (java_security.BasicPermission)
                       STATIC
                         PROCEDURE Init*(p0 : java_lang.String;
                                         p1 : java_lang.String) : ReflectPermission,CONSTRUCTOR;
                         PROCEDURE Init*(p0 : java_lang.String) : ReflectPermission,CONSTRUCTOR;
                       END;

  Type* = POINTER TO INTERFACE RECORD (java_lang.Object)
          END;

  TypeVariable* = POINTER TO INTERFACE RECORD (java_lang.Object + Type)    (* Typebound Procedures *)
                  END;

  UndeclaredThrowableException* = POINTER TO EXTENSIBLE RECORD (java_lang.RuntimeException)    (* Typebound Procedures *)
                                  STATIC
                                    PROCEDURE Init*(p0 : java_lang.Throwable;
                                                    p1 : java_lang.String) : UndeclaredThrowableException,CONSTRUCTOR;
                                    PROCEDURE Init*(p0 : java_lang.Throwable) : UndeclaredThrowableException,CONSTRUCTOR;
                                  END;

  WildcardType* = POINTER TO INTERFACE RECORD (java_lang.Object + Type)    (* Typebound Procedures *)
                  END;




PROCEDURE (self:AccessibleObject) getAnnotation*(p0 : java_lang.Class) : java_lang_annotation.Annotation,NEW,EXTENSIBLE;

PROCEDURE (self:AccessibleObject) getAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,NEW,EXTENSIBLE;

PROCEDURE (self:AccessibleObject) getDeclaredAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,NEW,EXTENSIBLE;

PROCEDURE (self:AccessibleObject) isAccessible*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:AccessibleObject) isAnnotationPresent*(p0 : java_lang.Class) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:AccessibleObject) setAccessible*(p0 : BOOLEAN),NEW,EXTENSIBLE;

PROCEDURE (self:AnnotatedElement) getAnnotation*(p0 : java_lang.Class) : java_lang_annotation.Annotation,NEW,ABSTRACT;

PROCEDURE (self:AnnotatedElement) getAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,NEW,ABSTRACT;

PROCEDURE (self:AnnotatedElement) getDeclaredAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,NEW,ABSTRACT;

PROCEDURE (self:AnnotatedElement) isAnnotationPresent*(p0 : java_lang.Class) : BOOLEAN,NEW,ABSTRACT;

PROCEDURE (self:Constructor) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:Constructor) getAnnotation*(p0 : java_lang.Class) : java_lang_annotation.Annotation,EXTENSIBLE;

PROCEDURE (self:Constructor) getDeclaredAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,EXTENSIBLE;

PROCEDURE (self:Constructor) getDeclaringClass*() : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getExceptionTypes*() : POINTER TO ARRAY OF java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getGenericExceptionTypes*() : POINTER TO ARRAY OF Type,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getGenericParameterTypes*() : POINTER TO ARRAY OF Type,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getModifiers*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getName*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getParameterAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getParameterTypes*() : POINTER TO ARRAY OF java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) getTypeParameters*() : POINTER TO ARRAY OF TypeVariable,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) hashCode*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:Constructor) isSynthetic*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) isVarArgs*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) newInstance*(IN  p0 : ARRAY OF java_lang.Object) : java_lang.Object,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) toGenericString*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Constructor) toString*() : java_lang.String,EXTENSIBLE;

PROCEDURE (self:Field) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:Field) get*(p0 : java_lang.Object) : java_lang.Object,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getAnnotation*(p0 : java_lang.Class) : java_lang_annotation.Annotation,EXTENSIBLE;

PROCEDURE (self:Field) getBoolean*(p0 : java_lang.Object) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getByte*(p0 : java_lang.Object) : BYTE,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getChar*(p0 : java_lang.Object) : CHAR,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getDeclaredAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,EXTENSIBLE;

PROCEDURE (self:Field) getDeclaringClass*() : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getDouble*(p0 : java_lang.Object) : REAL,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getFloat*(p0 : java_lang.Object) : SHORTREAL,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getGenericType*() : Type,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getInt*(p0 : java_lang.Object) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getLong*(p0 : java_lang.Object) : LONGINT,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getModifiers*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getName*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getShort*(p0 : java_lang.Object) : SHORTINT,NEW,EXTENSIBLE;

PROCEDURE (self:Field) getType*() : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Field) hashCode*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:Field) isEnumConstant*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Field) isSynthetic*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Field) set*(p0 : java_lang.Object;
                            p1 : java_lang.Object),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setBoolean*(p0 : java_lang.Object;
                                   p1 : BOOLEAN),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setByte*(p0 : java_lang.Object;
                                p1 : BYTE),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setChar*(p0 : java_lang.Object;
                                p1 : CHAR),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setDouble*(p0 : java_lang.Object;
                                  p1 : REAL),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setFloat*(p0 : java_lang.Object;
                                 p1 : SHORTREAL),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setInt*(p0 : java_lang.Object;
                               p1 : INTEGER),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setLong*(p0 : java_lang.Object;
                                p1 : LONGINT),NEW,EXTENSIBLE;

PROCEDURE (self:Field) setShort*(p0 : java_lang.Object;
                                 p1 : SHORTINT),NEW,EXTENSIBLE;

PROCEDURE (self:Field) toGenericString*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Field) toString*() : java_lang.String,EXTENSIBLE;

PROCEDURE (self:GenericArrayType) getGenericComponentType*() : Type,NEW,ABSTRACT;

PROCEDURE (self:GenericDeclaration) getTypeParameters*() : POINTER TO ARRAY OF TypeVariable,NEW,ABSTRACT;

PROCEDURE (self:InvocationHandler) invoke*(    p0 : java_lang.Object;
                                               p1 : Method;
                                           IN  p2 : ARRAY OF java_lang.Object) : java_lang.Object,NEW,ABSTRACT;

PROCEDURE (self:InvocationTargetException) getCause*() : java_lang.Throwable,EXTENSIBLE;

PROCEDURE (self:InvocationTargetException) getTargetException*() : java_lang.Throwable,NEW,EXTENSIBLE;

PROCEDURE (self:Member) getDeclaringClass*() : java_lang.Class,NEW,ABSTRACT;

PROCEDURE (self:Member) getModifiers*() : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:Member) getName*() : java_lang.String,NEW,ABSTRACT;

PROCEDURE (self:Member) isSynthetic*() : BOOLEAN,NEW,ABSTRACT;

PROCEDURE (self:Method) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:Method) getAnnotation*(p0 : java_lang.Class) : java_lang_annotation.Annotation,EXTENSIBLE;

PROCEDURE (self:Method) getDeclaredAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,EXTENSIBLE;

PROCEDURE (self:Method) getDeclaringClass*() : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getDefaultValue*() : java_lang.Object,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getExceptionTypes*() : POINTER TO ARRAY OF java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getGenericExceptionTypes*() : POINTER TO ARRAY OF Type,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getGenericParameterTypes*() : POINTER TO ARRAY OF Type,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getGenericReturnType*() : Type,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getModifiers*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getName*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getParameterAnnotations*() : POINTER TO ARRAY OF java_lang_annotation.Annotation,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getParameterTypes*() : POINTER TO ARRAY OF java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getReturnType*() : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:Method) getTypeParameters*() : POINTER TO ARRAY OF TypeVariable,NEW,EXTENSIBLE;

PROCEDURE (self:Method) hashCode*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:Method) invoke*(    p0 : java_lang.Object;
                                IN  p1 : ARRAY OF java_lang.Object) : java_lang.Object,NEW,EXTENSIBLE;

PROCEDURE (self:Method) isBridge*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Method) isSynthetic*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Method) isVarArgs*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Method) toGenericString*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Method) toString*() : java_lang.String,EXTENSIBLE;

PROCEDURE (self:ParameterizedType) getActualTypeArguments*() : POINTER TO ARRAY OF Type,NEW,ABSTRACT;

PROCEDURE (self:ParameterizedType) getOwnerType*() : Type,NEW,ABSTRACT;

PROCEDURE (self:ParameterizedType) getRawType*() : Type,NEW,ABSTRACT;

PROCEDURE (self:TypeVariable) getBounds*() : POINTER TO ARRAY OF Type,NEW,ABSTRACT;

PROCEDURE (self:TypeVariable) getGenericDeclaration*() : GenericDeclaration,NEW,ABSTRACT;

PROCEDURE (self:TypeVariable) getName*() : java_lang.String,NEW,ABSTRACT;

PROCEDURE (self:UndeclaredThrowableException) getCause*() : java_lang.Throwable,EXTENSIBLE;

PROCEDURE (self:UndeclaredThrowableException) getUndeclaredThrowable*() : java_lang.Throwable,NEW,EXTENSIBLE;

PROCEDURE (self:WildcardType) getLowerBounds*() : POINTER TO ARRAY OF Type,NEW,ABSTRACT;

PROCEDURE (self:WildcardType) getUpperBounds*() : POINTER TO ARRAY OF Type,NEW,ABSTRACT;

END java_lang_reflect.