mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-09 07:28:26 +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;
|
||||
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)
|
||||
public
|
||||
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
|
||||
JLNoSuchMethodException = class;
|
||||
Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
|
||||
Arr2JLNoSuchMethodException = array of Arr1JLNoSuchMethodException;
|
||||
Arr3JLNoSuchMethodException = array of Arr2JLNoSuchMethodException;
|
||||
|
||||
JLStringBuffer = class;
|
||||
Arr1JLStringBuffer = array of JLStringBuffer;
|
||||
Arr2JLStringBuffer = array of Arr1JLStringBuffer;
|
||||
|
@ -16189,12 +16189,6 @@
|
||||
constructor create(para1: JLString); overload;
|
||||
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)
|
||||
public
|
||||
constructor create(); overload;
|
||||
|
@ -7380,11 +7380,6 @@ type
|
||||
Arr2JSRSSerialRef = array of Arr1JSRSSerialRef;
|
||||
Arr3JSRSSerialRef = array of Arr2JSRSSerialRef;
|
||||
|
||||
JLNoSuchMethodException = class;
|
||||
Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
|
||||
Arr2JLNoSuchMethodException = array of Arr1JLNoSuchMethodException;
|
||||
Arr3JLNoSuchMethodException = array of Arr2JLNoSuchMethodException;
|
||||
|
||||
JSDefaultListModel = class;
|
||||
Arr1JSDefaultListModel = array of JSDefaultListModel;
|
||||
Arr2JSDefaultListModel = array of Arr1JSDefaultListModel;
|
||||
@ -12510,16 +12505,16 @@ type
|
||||
Arr2JSTVariableHeightLayoutCache = array of Arr1JSTVariableHeightLayoutCache;
|
||||
Arr3JSTVariableHeightLayoutCache = array of Arr2JSTVariableHeightLayoutCache;
|
||||
|
||||
JUEnumMap = class;
|
||||
Arr1JUEnumMap = array of JUEnumMap;
|
||||
Arr2JUEnumMap = array of Arr1JUEnumMap;
|
||||
Arr3JUEnumMap = array of Arr2JUEnumMap;
|
||||
|
||||
JUJManifest = class;
|
||||
Arr1JUJManifest = array of JUJManifest;
|
||||
Arr2JUJManifest = array of Arr1JUJManifest;
|
||||
Arr3JUJManifest = array of Arr2JUJManifest;
|
||||
|
||||
JUEnumMap = class;
|
||||
Arr1JUEnumMap = array of JUEnumMap;
|
||||
Arr2JUEnumMap = array of Arr1JUEnumMap;
|
||||
Arr3JUEnumMap = array of Arr2JUEnumMap;
|
||||
|
||||
JLVerifyError = class;
|
||||
Arr1JLVerifyError = array of JLVerifyError;
|
||||
Arr2JLVerifyError = array of Arr1JLVerifyError;
|
||||
|
@ -37,7 +37,19 @@
|
||||
owningClass:=JLClass(method.data)
|
||||
else
|
||||
owningClass:=method.data.getClass;
|
||||
method.code:=owningClass.getDeclaredMethod(methodName,argTypes);
|
||||
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);
|
||||
except
|
||||
on JLNoSuchMethodException do
|
||||
owningClass:=owningClass.getSuperClass;
|
||||
end;
|
||||
until assigned(method.code);
|
||||
|
||||
{ required to enable calling private methods in one class from another
|
||||
class -- can cause security exceptions if the security manager doesn't
|
||||
allow this though... }
|
||||
|
Loading…
Reference in New Issue
Block a user