diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-10-22 19:29:27 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-10-22 19:29:27 +0000 |
commit | 34ecdb5fa038896d6745bd3858749cf3dd738142 (patch) | |
tree | 000f378fa5f1a46ba806b0c30692c3bb5de11c5d /libjava/java/lang/natClass.cc | |
parent | 1c6d36df311f94390c0fe0a042911d608feb41c4 (diff) | |
download | ppe42-gcc-34ecdb5fa038896d6745bd3858749cf3dd738142.tar.gz ppe42-gcc-34ecdb5fa038896d6745bd3858749cf3dd738142.zip |
PR libgcj/12416:
* java/lang/Class.h: Updated.
* java/lang/natClass.cc (_getFields): Removed.
(getFields): Likewise.
(getDeclaredFields): Added `public_only' parameter.
* java/lang/Class.java (getFields): Now implemented in java; from
Classpath.
(getDeclaredFields): Likewise.
(getDeclaredFields(boolean)): Declare.
(_getFields): Removed.
(internalGetFields): New method, from Classpath.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72818 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang/natClass.cc')
-rw-r--r-- | libjava/java/lang/natClass.cc | 76 |
1 files changed, 19 insertions, 57 deletions
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 4c71ed1cea0..c9b70147b61 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -295,16 +295,32 @@ java::lang::Class::getDeclaredField (jstring name) } JArray<java::lang::reflect::Field *> * -java::lang::Class::getDeclaredFields (void) +java::lang::Class::getDeclaredFields (jboolean public_only) { - memberAccessCheck(java::lang::reflect::Member::DECLARED); + int size; + if (public_only) + { + size = 0; + for (int i = 0; i < field_count; ++i) + { + _Jv_Field *field = &fields[i]; + if ((field->flags & java::lang::reflect::Modifier::PUBLIC)) + ++size; + } + } + else + size = field_count; + JArray<java::lang::reflect::Field *> *result = (JArray<java::lang::reflect::Field *> *) - JvNewObjectArray (field_count, &java::lang::reflect::Field::class$, NULL); + JvNewObjectArray (size, &java::lang::reflect::Field::class$, NULL); java::lang::reflect::Field** fptr = elements (result); for (int i = 0; i < field_count; i++) { _Jv_Field *field = &fields[i]; + if (public_only + && ! (field->flags & java::lang::reflect::Modifier::PUBLIC)) + continue; java::lang::reflect::Field* rfield = new java::lang::reflect::Field (); rfield->offset = (char*) field - (char*) fields; rfield->declaringClass = this; @@ -461,60 +477,6 @@ java::lang::Class::getDeclaringClass (void) return NULL; } -jint -java::lang::Class::_getFields (JArray<java::lang::reflect::Field *> *result, - jint offset) -{ - int count = 0; - for (int i = 0; i < field_count; i++) - { - _Jv_Field *field = &fields[i]; - if (! (field->getModifiers() & java::lang::reflect::Modifier::PUBLIC)) - continue; - ++count; - - if (result != NULL) - { - java::lang::reflect::Field *rfield - = new java::lang::reflect::Field (); - rfield->offset = (char *) field - (char *) fields; - rfield->declaringClass = this; - rfield->name = _Jv_NewStringUtf8Const (field->name); - (elements (result))[offset++] = rfield; - } - } - jclass superclass = getSuperclass(); - if (superclass != NULL) - { - int s_count = superclass->_getFields (result, offset); - count += s_count; - offset += s_count; - } - for (int i = 0; i < interface_count; ++i) - { - int f_count = interfaces[i]->_getFields (result, offset); - count += f_count; - offset += f_count; - } - return count; -} - -JArray<java::lang::reflect::Field *> * -java::lang::Class::getFields (void) -{ - memberAccessCheck(java::lang::reflect::Member::PUBLIC); - - int count = _getFields (NULL, 0); - - JArray<java::lang::reflect::Field *> *result - = ((JArray<java::lang::reflect::Field *> *) - JvNewObjectArray (count, &java::lang::reflect::Field::class$, NULL)); - - _getFields (result, 0); - - return result; -} - JArray<jclass> * java::lang::Class::getInterfaces (void) { |