diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-05 16:35:20 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-05 16:35:20 +0000 |
commit | b3ca2511df594241fba47f4aadc7d381aafad5fb (patch) | |
tree | daac5e5bddf454e798664add5ce18fea5a484326 /libjava/java | |
parent | 931d05cc7bf69fe838f13211754ee0af75fb97a9 (diff) | |
download | gcc-b3ca2511df594241fba47f4aadc7d381aafad5fb.tar.gz |
* java/lang/Class.h (getSignature): Updated.
* java/lang/Class.java (getSignature): Updated.
* java/lang/natClass.cc (getSignature): Added `is_constructor'
argument.
(getConstructor): Ensure constructor is public.
(_getConstructors): Check for public-ness of constructor when
`declared' is false, not when it is true.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31241 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/lang/Class.h | 2 | ||||
-rw-r--r-- | libjava/java/lang/Class.java | 3 | ||||
-rw-r--r-- | libjava/java/lang/natClass.cc | 19 |
3 files changed, 14 insertions, 10 deletions
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h index dfdbf72c831..0b43ad31727 100644 --- a/libjava/java/lang/Class.h +++ b/libjava/java/lang/Class.h @@ -103,7 +103,7 @@ public: JArray<jclass> *getInterfaces (void); void getSignature (java::lang::StringBuffer *buffer); - static jstring getSignature (JArray<jclass> *); + static jstring getSignature (JArray<jclass> *, jboolean is_constructor); java::lang::reflect::Method *getMethod (jstring, JArray<jclass> *); JArray<java::lang::reflect::Method *> *getMethods (void); diff --git a/libjava/java/lang/Class.java b/libjava/java/lang/Class.java index a304e6c0113..4c49cd93b35 100644 --- a/libjava/java/lang/Class.java +++ b/libjava/java/lang/Class.java @@ -89,7 +89,8 @@ public final class Class implements Serializable public native Class[] getInterfaces (); private final native void getSignature (StringBuffer buffer); - private static final native String getSignature (Class[] parameterTypes); + private static final native String getSignature (Class[] parameterTypes, + boolean is_construtor); public native Method getMethod (String methodName, Class[] parameterTypes) throws NoSuchMethodException, SecurityException; diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 939fe387e7a..152be02b7ce 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -101,7 +101,7 @@ java::lang::Class::forName (jstring className) java::lang::reflect::Constructor * java::lang::Class::getConstructor (JArray<jclass> *param_types) { - jstring partial_sig = getSignature (param_types); + jstring partial_sig = getSignature (param_types, true); jint hash = partial_sig->hashCode (); int i = isPrimitive () ? 0 : method_count; @@ -114,7 +114,7 @@ java::lang::Class::getConstructor (JArray<jclass> *param_types) // Found it. For getConstructor, the constructor must be // public. using namespace java::lang::reflect; - if (Modifier::isPublic(methods[i].accflags)) + if (! Modifier::isPublic(methods[i].accflags)) break; Constructor *cons = new Constructor (); cons->offset = (char *) (&methods[i]) - (char *) methods; @@ -139,7 +139,7 @@ java::lang::Class::_getConstructors (jboolean declared) if (method->name == NULL && ! _Jv_equalUtf8Consts (method->name, init_name)) continue; - if (declared + if (! declared && ! java::lang::reflect::Modifier::isPublic(method->accflags)) continue; numConstructors++; @@ -154,7 +154,7 @@ java::lang::Class::_getConstructors (jboolean declared) if (method->name == NULL && ! _Jv_equalUtf8Consts (method->name, init_name)) continue; - if (declared + if (! declared && ! java::lang::reflect::Modifier::isPublic(method->accflags)) continue; java::lang::reflect::Constructor *cons @@ -169,7 +169,7 @@ java::lang::Class::_getConstructors (jboolean declared) java::lang::reflect::Constructor * java::lang::Class::getDeclaredConstructor (JArray<jclass> *param_types) { - jstring partial_sig = getSignature (param_types); + jstring partial_sig = getSignature (param_types, true); jint hash = partial_sig->hashCode (); int i = isPrimitive () ? 0 : method_count; @@ -277,7 +277,8 @@ java::lang::Class::getSignature (java::lang::StringBuffer *buffer) // This doesn't have to be native. It is an implementation detail // only called from the C++ code, though, so maybe this is clearer. jstring -java::lang::Class::getSignature (JArray<jclass> *param_types) +java::lang::Class::getSignature (JArray<jclass> *param_types, + jboolean is_constructor) { java::lang::StringBuffer *buf = new java::lang::StringBuffer (); buf->append((jchar) '('); @@ -285,6 +286,8 @@ java::lang::Class::getSignature (JArray<jclass> *param_types) for (int i = 0; i < param_types->length; ++i) v[i]->getSignature(buf); buf->append((jchar) ')'); + if (is_constructor) + buf->append((jchar) 'V'); return buf->toString(); } @@ -292,7 +295,7 @@ java::lang::reflect::Method * java::lang::Class::getDeclaredMethod (jstring name, JArray<jclass> *param_types) { - jstring partial_sig = getSignature (param_types); + jstring partial_sig = getSignature (param_types, false); jint p_len = partial_sig->length(); _Jv_Utf8Const *utf_name = _Jv_makeUtf8Const (name); int i = isPrimitive () ? 0 : method_count; @@ -446,7 +449,7 @@ java::lang::Class::getInterfaces (void) java::lang::reflect::Method * java::lang::Class::getMethod (jstring name, JArray<jclass> *param_types) { - jstring partial_sig = getSignature (param_types); + jstring partial_sig = getSignature (param_types, false); jint p_len = partial_sig->length(); _Jv_Utf8Const *utf_name = _Jv_makeUtf8Const (name); for (Class *klass = this; klass; klass = klass->getSuperclass()) |