* 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:
Jonas Maebe 2011-08-20 08:28:45 +00:00
parent 2338463a4b
commit 441787672d
5 changed files with 30 additions and 18 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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... }