* moved JLRField from jdk15 to the system unit

* fixed FpcBaseProcVarType.clone: create a new method field "pointer" and
    set it (using the java.lang.reflect interface). Previously, the pointer
    to the method record was copied via the inherited clone, which meant
    that the original and new procvar shared it

git-svn-id: branches/jvmbackend@18816 -
This commit is contained in:
Jonas Maebe 2011-08-23 16:07:13 +00:00
parent 9aa40f5a08
commit 72d6d9ac97
5 changed files with 62 additions and 52 deletions

View File

@ -2044,6 +2044,41 @@
function hashCode(): jint; overload;
end;
JLRField = class sealed external 'java.lang.reflect' name 'Field' (JLRAccessibleObject, JLRMember)
public
function getDeclaringClass(): JLClass; overload; virtual;
function getName(): JLString; overload; virtual;
function getModifiers(): jint; overload; virtual;
function isEnumConstant(): jboolean; overload; virtual;
function isSynthetic(): jboolean; overload; virtual;
function getType(): JLClass; overload; virtual;
function getGenericType(): JLRType; overload; virtual;
function equals(para1: JLObject): jboolean; overload; virtual;
function hashCode(): jint; overload; virtual;
function toString(): JLString; overload; virtual;
function toGenericString(): JLString; overload; virtual;
function get(para1: JLObject): JLObject; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getBoolean(para1: JLObject): jboolean; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getByte(para1: JLObject): jbyte; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getChar(para1: JLObject): jchar; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getShort(para1: JLObject): jshort; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getInt(para1: JLObject): jint; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getLong(para1: JLObject): jlong; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getFloat(para1: JLObject): jfloat; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getDouble(para1: JLObject): jdouble; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure &set(para1: JLObject; para2: JLObject); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setBoolean(para1: JLObject; para2: jboolean); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setByte(para1: JLObject; para2: jbyte); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setChar(para1: JLObject; para2: jchar); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setShort(para1: JLObject; para2: jshort); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setInt(para1: JLObject; para2: jint); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setLong(para1: JLObject; para2: jlong); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setFloat(para1: JLObject; para2: jfloat); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setDouble(para1: JLObject; para2: jdouble); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getAnnotation(para1: JLClass): JLAAnnotation; overload; virtual;
function getDeclaredAnnotations(): Arr1JLAAnnotation; overload; virtual;
end;
JLRMethod = class sealed external 'java.lang.reflect' name 'Method' (JLRAccessibleObject, JLRGenericDeclaration, JLRMember)
public
function getDeclaringClass(): JLClass; overload; virtual;

View File

@ -1,4 +1,4 @@
{ Imports for Java packages/classes: java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.Boolean, java.lang.Byte, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Enum, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IndexOutOfBoundsException, java.lang.Integer, java.lang.Iterable, java.lang.LinkageError, java.lang.Long, java.lang.Math, java.lang.NoSuchMethodException, java.lang.Number, java.lang.Object, java.lang.Runtime, java.lang.RuntimeException, java.lang.Short, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.Throwable, java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.GenericDeclaration, java.lang.reflect.Member, java.lang.reflect.Method, java.lang.reflect.Type, java.math.BigInteger, java.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Calendar, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
{ Imports for Java packages/classes: java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.Boolean, java.lang.Byte, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Enum, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IndexOutOfBoundsException, java.lang.Integer, java.lang.Iterable, java.lang.LinkageError, java.lang.Long, java.lang.Math, java.lang.NoSuchMethodException, java.lang.Number, java.lang.Object, java.lang.Runtime, java.lang.RuntimeException, java.lang.Short, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.Throwable, java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.Field, java.lang.reflect.GenericDeclaration, java.lang.reflect.Member, java.lang.reflect.Method, java.lang.reflect.Type, java.math.BigInteger, java.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Calendar, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
type
JLNoSuchMethodException = class;
Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
@ -30,6 +30,11 @@ type
Arr2JLEnum = array of Arr1JLEnum;
Arr3JLEnum = array of Arr2JLEnum;
JLRField = class;
Arr1JLRField = array of JLRField;
Arr2JLRField = array of Arr1JLRField;
Arr3JLRField = array of Arr2JLRField;
JLError = class;
Arr1JLError = array of JLError;
Arr2JLError = array of Arr1JLError;
@ -320,11 +325,6 @@ type
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;

View File

@ -23835,41 +23835,6 @@
function getParameterAnnotations(): Arr2JLAAnnotation; overload; virtual;
end;
JLRField = class sealed external 'java.lang.reflect' name 'Field' (JLRAccessibleObject, JLRMember)
public
function getDeclaringClass(): JLClass; overload; virtual;
function getName(): JLString; overload; virtual;
function getModifiers(): jint; overload; virtual;
function isEnumConstant(): jboolean; overload; virtual;
function isSynthetic(): jboolean; overload; virtual;
function getType(): JLClass; overload; virtual;
function getGenericType(): JLRType; overload; virtual;
function equals(para1: JLObject): jboolean; overload; virtual;
function hashCode(): jint; overload; virtual;
function toString(): JLString; overload; virtual;
function toGenericString(): JLString; overload; virtual;
function get(para1: JLObject): JLObject; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getBoolean(para1: JLObject): jboolean; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getByte(para1: JLObject): jbyte; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getChar(para1: JLObject): jchar; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getShort(para1: JLObject): jshort; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getInt(para1: JLObject): jint; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getLong(para1: JLObject): jlong; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getFloat(para1: JLObject): jfloat; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getDouble(para1: JLObject): jdouble; overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure &set(para1: JLObject; para2: JLObject); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setBoolean(para1: JLObject; para2: jboolean); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setByte(para1: JLObject; para2: jbyte); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setChar(para1: JLObject; para2: jchar); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setShort(para1: JLObject; para2: jshort); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setInt(para1: JLObject; para2: jint); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setLong(para1: JLObject; para2: jlong); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setFloat(para1: JLObject; para2: jfloat); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
procedure setDouble(para1: JLObject; para2: jdouble); overload; virtual; // throws java.lang.IllegalArgumentException, java.lang.IllegalAccessException
function getAnnotation(para1: JLClass): JLAAnnotation; overload; virtual;
function getDeclaredAnnotations(): Arr1JLAAnnotation; overload; virtual;
end;
JLRGenericArrayType = interface external 'java.lang.reflect' name 'GenericArrayType' (JLRType)
function getGenericComponentType(): JLRType; overload;
end;

View File

@ -3335,11 +3335,6 @@ type
Arr2JPASJobMediaSheets = array of Arr1JPASJobMediaSheets;
Arr3JPASJobMediaSheets = array of Arr2JPASJobMediaSheets;
JUCCopyOnWriteArraySet = class;
Arr1JUCCopyOnWriteArraySet = array of JUCCopyOnWriteArraySet;
Arr2JUCCopyOnWriteArraySet = array of Arr1JUCCopyOnWriteArraySet;
Arr3JUCCopyOnWriteArraySet = array of Arr2JUCCopyOnWriteArraySet;
JMMutableBigInteger = class;
Arr1JMMutableBigInteger = array of JMMutableBigInteger;
Arr2JMMutableBigInteger = array of Arr1JMMutableBigInteger;
@ -3350,6 +3345,11 @@ type
Arr2JXStreamFactoryFinder = array of Arr1JXStreamFactoryFinder;
Arr3JXStreamFactoryFinder = array of Arr2JXStreamFactoryFinder;
JUCCopyOnWriteArraySet = class;
Arr1JUCCopyOnWriteArraySet = array of JUCCopyOnWriteArraySet;
Arr2JUCCopyOnWriteArraySet = array of Arr1JUCCopyOnWriteArraySet;
Arr3JUCCopyOnWriteArraySet = array of Arr2JUCCopyOnWriteArraySet;
JUZDeflaterOutputStream = class;
Arr1JUZDeflaterOutputStream = array of JUZDeflaterOutputStream;
Arr2JUZDeflaterOutputStream = array of Arr1JUZDeflaterOutputStream;
@ -8415,11 +8415,6 @@ type
Arr2JBBBeanContextSupport = array of Arr1JBBBeanContextSupport;
Arr3JBBBeanContextSupport = array of Arr2JBBBeanContextSupport;
JLRField = class;
Arr1JLRField = array of JLRField;
Arr2JLRField = array of Arr1JLRField;
Arr3JLRField = array of Arr2JLRField;
JUJJarException = class;
Arr1JUJJarException = array of JUJJarException;
Arr2JUJJarException = array of Arr1JUJJarException;
@ -20670,6 +20665,11 @@ type
Arr2JLEnum = array of Arr1JLEnum;
Arr3JLEnum = array of Arr2JLEnum;
JLRField = class external 'java.lang.reflect' name 'Field';
Arr1JLRField = array of JLRField;
Arr2JLRField = array of Arr1JLRField;
Arr3JLRField = array of Arr2JLRField;
JLError = class external 'java.lang' name 'Error';
Arr1JLError = array of JLError;
Arr2JLError = array of Arr1JLError;

View File

@ -78,9 +78,19 @@
function FpcBaseProcVarType.clone: JLObject;
var
field: JLRField;
newmethodrec: tmethod;
begin
result:=inherited;
FpcBaseProcVarType(result).method:=method;
{ replace the method record pointer (the inherited clone will have copied
it, and there is no way we can change it using Pascal code since it's
not a pointer at the Pascal level) }
newmethodrec:=method;
field:=getClass.getField('method');
{ doesn't matter that it's a local variable, everything is garbage
collected }
field.&set(result,JLObject(@newmethodrec));
end;