FOREIGN MODULE sun_reflect;

IMPORT
    sun_misc := "sun.misc",
    java_lang := "java.lang",
    java_lang_reflect := "java.lang.reflect",
    java_security := "java.security",
    java_util := "java.util",
    java_nio := "java.nio",
    java_net := "java.net",
    java_io := "java.io";

TYPE

  ConstantPool* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)    (* Typebound Procedures *)
                  STATIC
                    PROCEDURE Init*() : ConstantPool,CONSTRUCTOR;
                  END;

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

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

  FieldInfo* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)    (* Typebound Procedures *)
               END;

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

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

  Reflection* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                STATIC
                  PROCEDURE ensureMemberAccess*(p0 : java_lang.Class;
                                                p1 : java_lang.Class;
                                                p2 : java_lang.Object;
                                                p3 : INTEGER);
                  PROCEDURE filterFields*(    p0 : java_lang.Class;
                                          IN  p1 : ARRAY OF java_lang_reflect.Field) : POINTER TO ARRAY OF java_lang_reflect.Field;
                  PROCEDURE getCallerClass*(p0 : INTEGER) : java_lang.Class;
                  PROCEDURE Init*() : Reflection,CONSTRUCTOR;
                  PROCEDURE quickCheckMemberAccess*(p0 : java_lang.Class;
                                                    p1 : INTEGER) : BOOLEAN;
                  PROCEDURE registerFieldsToFilter*(    p0 : java_lang.Class;
                                                    IN  p1 : ARRAY OF java_lang.String);
                  PROCEDURE verifyMemberAccess*(p0 : java_lang.Class;
                                                p1 : java_lang.Class;
                                                p2 : java_lang.Object;
                                                p3 : INTEGER) : BOOLEAN;
                END;

  ReflectionFactory* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)    (* Typebound Procedures *)
                       STATIC
                         PROCEDURE getReflectionFactory*() : ReflectionFactory;
                       END;

  ReflectionFactory$GetReflectionFactoryAction* = POINTER TO RECORD (java_lang.Object + java_security.PrivilegedAction)    (* Typebound Procedures *)
                                                  STATIC
                                                    PROCEDURE Init*() : ReflectionFactory$GetReflectionFactoryAction,CONSTRUCTOR;
                                                  END;

  SignatureIterator* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)    (* Typebound Procedures *)
                       STATIC
                         PROCEDURE Init*(p0 : java_lang.String) : SignatureIterator,CONSTRUCTOR;
                       END;




PROCEDURE (self:ConstantPool) getClassAt*(p0 : INTEGER) : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getClassAtIfLoaded*(p0 : INTEGER) : java_lang.Class,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getDoubleAt*(p0 : INTEGER) : REAL,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getFieldAt*(p0 : INTEGER) : java_lang_reflect.Field,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getFieldAtIfLoaded*(p0 : INTEGER) : java_lang_reflect.Field,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getFloatAt*(p0 : INTEGER) : SHORTREAL,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getIntAt*(p0 : INTEGER) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getLongAt*(p0 : INTEGER) : LONGINT,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getMemberRefInfoAt*(p0 : INTEGER) : POINTER TO ARRAY OF java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getMethodAt*(p0 : INTEGER) : java_lang_reflect.Member,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getMethodAtIfLoaded*(p0 : INTEGER) : java_lang_reflect.Member,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getSize*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getStringAt*(p0 : INTEGER) : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:ConstantPool) getUTF8At*(p0 : INTEGER) : java_lang.String,NEW,EXTENSIBLE;

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

PROCEDURE (self:FieldAccessor) get*(p0 : java_lang.Object) : java_lang.Object,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getBoolean*(p0 : java_lang.Object) : BOOLEAN,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getByte*(p0 : java_lang.Object) : BYTE,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getChar*(p0 : java_lang.Object) : CHAR,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getDouble*(p0 : java_lang.Object) : REAL,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getFloat*(p0 : java_lang.Object) : SHORTREAL,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getInt*(p0 : java_lang.Object) : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getLong*(p0 : java_lang.Object) : LONGINT,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) getShort*(p0 : java_lang.Object) : SHORTINT,NEW,ABSTRACT;

PROCEDURE (self:FieldAccessor) set*(p0 : java_lang.Object;
                                    p1 : java_lang.Object),NEW,ABSTRACT;

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

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

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

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

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

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

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

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

PROCEDURE (self:FieldInfo) isPublic*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:FieldInfo) modifiers*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:FieldInfo) name*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:FieldInfo) signature*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:FieldInfo) slot*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:LangReflectAccess) copyConstructor*(p0 : java_lang_reflect.Constructor) : java_lang_reflect.Constructor,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) copyField*(p0 : java_lang_reflect.Field) : java_lang_reflect.Field,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) copyMethod*(p0 : java_lang_reflect.Method) : java_lang_reflect.Method,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) getConstructorAccessor*(p0 : java_lang_reflect.Constructor) : ConstructorAccessor,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) getConstructorAnnotations*(p0 : java_lang_reflect.Constructor) : POINTER TO ARRAY OF BYTE,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) getConstructorParameterAnnotations*(p0 : java_lang_reflect.Constructor) : POINTER TO ARRAY OF BYTE,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) getConstructorSignature*(p0 : java_lang_reflect.Constructor) : java_lang.String,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) getConstructorSlot*(p0 : java_lang_reflect.Constructor) : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) getMethodAccessor*(p0 : java_lang_reflect.Method) : MethodAccessor,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) newConstructor*(    p0 : java_lang.Class;
                                                   IN  p1 : ARRAY OF java_lang.Class;
                                                   IN  p2 : ARRAY OF java_lang.Class;
                                                       p3 : INTEGER;
                                                       p4 : INTEGER;
                                                       p5 : java_lang.String;
                                                   IN  p6 : ARRAY OF BYTE;
                                                   IN  p7 : ARRAY OF BYTE) : java_lang_reflect.Constructor,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) newField*(    p0 : java_lang.Class;
                                                 p1 : java_lang.String;
                                                 p2 : java_lang.Class;
                                                 p3 : INTEGER;
                                                 p4 : INTEGER;
                                                 p5 : java_lang.String;
                                             IN  p6 : ARRAY OF BYTE) : java_lang_reflect.Field,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) newMethod*(    p0  : java_lang.Class;
                                                  p1  : java_lang.String;
                                              IN  p2  : ARRAY OF java_lang.Class;
                                                  p3  : java_lang.Class;
                                              IN  p4  : ARRAY OF java_lang.Class;
                                                  p5  : INTEGER;
                                                  p6  : INTEGER;
                                                  p7  : java_lang.String;
                                              IN  p8  : ARRAY OF BYTE;
                                              IN  p9  : ARRAY OF BYTE;
                                              IN  p10 : ARRAY OF BYTE) : java_lang_reflect.Method,NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) setConstructorAccessor*(p0 : java_lang_reflect.Constructor;
                                                           p1 : ConstructorAccessor),NEW,ABSTRACT;

PROCEDURE (self:LangReflectAccess) setMethodAccessor*(p0 : java_lang_reflect.Method;
                                                      p1 : MethodAccessor),NEW,ABSTRACT;

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

PROCEDURE (self:ReflectionFactory) copyConstructor*(p0 : java_lang_reflect.Constructor) : java_lang_reflect.Constructor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) copyField*(p0 : java_lang_reflect.Field) : java_lang_reflect.Field,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) copyMethod*(p0 : java_lang_reflect.Method) : java_lang_reflect.Method,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) getConstructorAccessor*(p0 : java_lang_reflect.Constructor) : ConstructorAccessor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) getMethodAccessor*(p0 : java_lang_reflect.Method) : MethodAccessor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newConstructor*(    p0 : java_lang.Class;
                                                   IN  p1 : ARRAY OF java_lang.Class;
                                                   IN  p2 : ARRAY OF java_lang.Class;
                                                       p3 : INTEGER;
                                                       p4 : INTEGER;
                                                       p5 : java_lang.String;
                                                   IN  p6 : ARRAY OF BYTE;
                                                   IN  p7 : ARRAY OF BYTE) : java_lang_reflect.Constructor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newConstructorAccessor*(p0 : java_lang_reflect.Constructor) : ConstructorAccessor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newConstructorForSerialization*(p0 : java_lang.Class;
                                                                   p1 : java_lang_reflect.Constructor) : java_lang_reflect.Constructor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newField*(    p0 : java_lang.Class;
                                                 p1 : java_lang.String;
                                                 p2 : java_lang.Class;
                                                 p3 : INTEGER;
                                                 p4 : INTEGER;
                                                 p5 : java_lang.String;
                                             IN  p6 : ARRAY OF BYTE) : java_lang_reflect.Field,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newFieldAccessor*(p0 : java_lang_reflect.Field;
                                                     p1 : BOOLEAN) : FieldAccessor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newMethod*(    p0  : java_lang.Class;
                                                  p1  : java_lang.String;
                                              IN  p2  : ARRAY OF java_lang.Class;
                                                  p3  : java_lang.Class;
                                              IN  p4  : ARRAY OF java_lang.Class;
                                                  p5  : INTEGER;
                                                  p6  : INTEGER;
                                                  p7  : java_lang.String;
                                              IN  p8  : ARRAY OF BYTE;
                                              IN  p9  : ARRAY OF BYTE;
                                              IN  p10 : ARRAY OF BYTE) : java_lang_reflect.Method,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) newMethodAccessor*(p0 : java_lang_reflect.Method) : MethodAccessor,NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) setConstructorAccessor*(p0 : java_lang_reflect.Constructor;
                                                           p1 : ConstructorAccessor),NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) setLangReflectAccess*(p0 : LangReflectAccess),NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory) setMethodAccessor*(p0 : java_lang_reflect.Method;
                                                      p1 : MethodAccessor),NEW,EXTENSIBLE;

PROCEDURE (self:ReflectionFactory$GetReflectionFactoryAction) run*() : java_lang.Object,NEW,EXTENSIBLE;

PROCEDURE (self:SignatureIterator) atEnd*() : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:SignatureIterator) next*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:SignatureIterator) reset*(),NEW,EXTENSIBLE;

PROCEDURE (self:SignatureIterator) returnType*() : java_lang.String,NEW,EXTENSIBLE;

END sun_reflect.