mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-21 01:49:08 +02:00
* migrated java.lang.NoSuchMethodException to java_sys.inc
* catch java.lang.NoSuchMethodException exceptions when resolving a procvar, because java.lang.Class.getDeclaredMethod() only searches that particular class itself and not its parents -> in case we get the address of a method that's not overridden in the current class, also search the parent classes git-svn-id: branches/jvmbackend@18730 -
This commit is contained in:
parent
2338463a4b
commit
441787672d
@ -1876,6 +1876,12 @@
|
|||||||
constructor create(para1: JLString); overload;
|
constructor create(para1: JLString); overload;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
JLNoSuchMethodException = class external 'java.lang' name 'NoSuchMethodException' (JLException)
|
||||||
|
public
|
||||||
|
constructor create(); overload;
|
||||||
|
constructor create(para1: JLString); overload;
|
||||||
|
end;
|
||||||
|
|
||||||
JLRuntimeException = class external 'java.lang' name 'RuntimeException' (JLException)
|
JLRuntimeException = class external 'java.lang' name 'RuntimeException' (JLException)
|
||||||
public
|
public
|
||||||
constructor create(); overload;
|
constructor create(); overload;
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
{ 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.Number, java.lang.Object, 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.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, 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.NoSuchMethodException, java.lang.Number, java.lang.Object, 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.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
|
||||||
type
|
type
|
||||||
|
JLNoSuchMethodException = class;
|
||||||
|
Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
|
||||||
|
Arr2JLNoSuchMethodException = array of Arr1JLNoSuchMethodException;
|
||||||
|
Arr3JLNoSuchMethodException = array of Arr2JLNoSuchMethodException;
|
||||||
|
|
||||||
JLStringBuffer = class;
|
JLStringBuffer = class;
|
||||||
Arr1JLStringBuffer = array of JLStringBuffer;
|
Arr1JLStringBuffer = array of JLStringBuffer;
|
||||||
Arr2JLStringBuffer = array of Arr1JLStringBuffer;
|
Arr2JLStringBuffer = array of Arr1JLStringBuffer;
|
||||||
|
@ -16189,12 +16189,6 @@
|
|||||||
constructor create(para1: JLString); overload;
|
constructor create(para1: JLString); overload;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
JLNoSuchMethodException = class external 'java.lang' name 'NoSuchMethodException' (JLException)
|
|
||||||
public
|
|
||||||
constructor create(); overload;
|
|
||||||
constructor create(para1: JLString); overload;
|
|
||||||
end;
|
|
||||||
|
|
||||||
JLIIllegalClassFormatException = class external 'java.lang.instrument' name 'IllegalClassFormatException' (JLException)
|
JLIIllegalClassFormatException = class external 'java.lang.instrument' name 'IllegalClassFormatException' (JLException)
|
||||||
public
|
public
|
||||||
constructor create(); overload;
|
constructor create(); overload;
|
||||||
|
@ -7380,11 +7380,6 @@ type
|
|||||||
Arr2JSRSSerialRef = array of Arr1JSRSSerialRef;
|
Arr2JSRSSerialRef = array of Arr1JSRSSerialRef;
|
||||||
Arr3JSRSSerialRef = array of Arr2JSRSSerialRef;
|
Arr3JSRSSerialRef = array of Arr2JSRSSerialRef;
|
||||||
|
|
||||||
JLNoSuchMethodException = class;
|
|
||||||
Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
|
|
||||||
Arr2JLNoSuchMethodException = array of Arr1JLNoSuchMethodException;
|
|
||||||
Arr3JLNoSuchMethodException = array of Arr2JLNoSuchMethodException;
|
|
||||||
|
|
||||||
JSDefaultListModel = class;
|
JSDefaultListModel = class;
|
||||||
Arr1JSDefaultListModel = array of JSDefaultListModel;
|
Arr1JSDefaultListModel = array of JSDefaultListModel;
|
||||||
Arr2JSDefaultListModel = array of Arr1JSDefaultListModel;
|
Arr2JSDefaultListModel = array of Arr1JSDefaultListModel;
|
||||||
@ -12510,16 +12505,16 @@ type
|
|||||||
Arr2JSTVariableHeightLayoutCache = array of Arr1JSTVariableHeightLayoutCache;
|
Arr2JSTVariableHeightLayoutCache = array of Arr1JSTVariableHeightLayoutCache;
|
||||||
Arr3JSTVariableHeightLayoutCache = array of Arr2JSTVariableHeightLayoutCache;
|
Arr3JSTVariableHeightLayoutCache = array of Arr2JSTVariableHeightLayoutCache;
|
||||||
|
|
||||||
JUEnumMap = class;
|
|
||||||
Arr1JUEnumMap = array of JUEnumMap;
|
|
||||||
Arr2JUEnumMap = array of Arr1JUEnumMap;
|
|
||||||
Arr3JUEnumMap = array of Arr2JUEnumMap;
|
|
||||||
|
|
||||||
JUJManifest = class;
|
JUJManifest = class;
|
||||||
Arr1JUJManifest = array of JUJManifest;
|
Arr1JUJManifest = array of JUJManifest;
|
||||||
Arr2JUJManifest = array of Arr1JUJManifest;
|
Arr2JUJManifest = array of Arr1JUJManifest;
|
||||||
Arr3JUJManifest = array of Arr2JUJManifest;
|
Arr3JUJManifest = array of Arr2JUJManifest;
|
||||||
|
|
||||||
|
JUEnumMap = class;
|
||||||
|
Arr1JUEnumMap = array of JUEnumMap;
|
||||||
|
Arr2JUEnumMap = array of Arr1JUEnumMap;
|
||||||
|
Arr3JUEnumMap = array of Arr2JUEnumMap;
|
||||||
|
|
||||||
JLVerifyError = class;
|
JLVerifyError = class;
|
||||||
Arr1JLVerifyError = array of JLVerifyError;
|
Arr1JLVerifyError = array of JLVerifyError;
|
||||||
Arr2JLVerifyError = array of Arr1JLVerifyError;
|
Arr2JLVerifyError = array of Arr1JLVerifyError;
|
||||||
|
@ -37,7 +37,19 @@
|
|||||||
owningClass:=JLClass(method.data)
|
owningClass:=JLClass(method.data)
|
||||||
else
|
else
|
||||||
owningClass:=method.data.getClass;
|
owningClass:=method.data.getClass;
|
||||||
|
method.code:=nil;
|
||||||
|
{ getDeclaredMethod does not search superclasses -> manually traverse
|
||||||
|
until found. If we don't find it anywhere, we'll traverse up to the
|
||||||
|
parent of java.lang.Object = null and throw a NullPointerException }
|
||||||
|
repeat
|
||||||
|
try
|
||||||
method.code:=owningClass.getDeclaredMethod(methodName,argTypes);
|
method.code:=owningClass.getDeclaredMethod(methodName,argTypes);
|
||||||
|
except
|
||||||
|
on JLNoSuchMethodException do
|
||||||
|
owningClass:=owningClass.getSuperClass;
|
||||||
|
end;
|
||||||
|
until assigned(method.code);
|
||||||
|
|
||||||
{ required to enable calling private methods in one class from another
|
{ required to enable calling private methods in one class from another
|
||||||
class -- can cause security exceptions if the security manager doesn't
|
class -- can cause security exceptions if the security manager doesn't
|
||||||
allow this though... }
|
allow this though... }
|
||||||
|
Loading…
Reference in New Issue
Block a user