    FOREIGN MODULE java_lang_reflect;

    IMPORT
        java_security,
        java_lang,
        java_io;

    TYPE

      AccessibleObject* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                          STATIC
                            PROCEDURE Init!() : AccessibleObject,CONSTRUCTOR;
                            PROCEDURE setAccessible*(IN  p0 : ARRAY OF AccessibleObject;
                                                         p1 : BOOLEAN);
                          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 + Member)
                     END;

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

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

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

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

      Modifier* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                  STATIC
                    PUBLIC* = 1;
                    PRIVATE* = 2;
                    PROTECTED* = 4;
                    STATIC* = 8;
                    FINAL* = 16;
                    SYNCHRONIZED* = 32;
                    VOLATILE* = 64;
                    TRANSIENT* = 128;
                    NATIVE* = 256;
                    INTERFACE* = 512;
                    ABSTRACT* = 1024;
                    STRICT* = 2048;
                    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;

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

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

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

    PROCEDURE (self:Constructor) equals*(p0 : java_lang.Object) : BOOLEAN,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) getModifiers*() : INTEGER,NEW,EXTENSIBLE;

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

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

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

    PROCEDURE (self:Constructor) newInstance*(IN  p0 : ARRAY OF java_lang.Object) : java_lang.Object,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) 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) 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) 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) 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) toString*() : java_lang.String,EXTENSIBLE;

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

    PROCEDURE (self:InvocationTargetException) printStackTrace*(),EXTENSIBLE;

    PROCEDURE (self:InvocationTargetException) printStackTrace*(p0 : java_io.PrintStream),EXTENSIBLE;

    PROCEDURE (self:InvocationTargetException) printStackTrace*(p0 : java_io.PrintWriter),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:Method) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

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

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

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

    PROCEDURE (self:Method) getName*() : java_lang.String,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) 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) toString*() : java_lang.String,EXTENSIBLE;

    END java_lang_reflect.