You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/04/11 17:21:11 UTC

svn commit: r1091099 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/ native/shared/ test/org/apache/commons/runtime/

Author: mturk
Date: Mon Apr 11 15:21:11 2011
New Revision: 1091099

URL: http://svn.apache.org/viewvc?rev=1091099&view=rev
Log:
Add reflection helper classes

Added:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedClass.java   (with props)
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedField.java   (with props)
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedFieldImpl.java   (with props)
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethod.java   (with props)
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethodImpl.java   (with props)
Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Reflect.java
    commons/sandbox/runtime/trunk/src/main/native/shared/reflect.c
    commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestReflect.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Reflect.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Reflect.java?rev=1091099&r1=1091098&r2=1091099&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Reflect.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Reflect.java Mon Apr 11 15:21:11 2011
@@ -24,7 +24,7 @@ import java.lang.reflect.Method;
  * @since Runtime 1.0
  *
  */
-public final class Reflect
+class Reflect
 {
 
     private Reflect()
@@ -32,22 +32,18 @@ public final class Reflect
         // No instance.
     }
 
-    private static native Class  get0(String name)
+    private static native Class  findClass0(String name)
         throws NoClassDefFoundError, OutOfMemoryError;
-    private static native Class  get1(String name, boolean weakReference)
-        throws NoClassDefFoundError, OutOfMemoryError;
-    private static native long   get2(Class clazz, String name, String signature, boolean isStatic)
+    private static native long   getMethod0(Class clazz, String name, String signature, boolean isStatic)
         throws NoSuchMethodError, OutOfMemoryError;
-    private static native long   get3(Class clazz, String name, String signature, boolean isStatic)
+    private static native long   getField0(Class clazz, String name, String signature, boolean isStatic)
         throws NoSuchFieldError, OutOfMemoryError;
-    private static native Method get4(long methodID)
+    private static native Method toMethod0(Class clazz, long methodID, boolean isStatic)
         throws OutOfMemoryError;
-    private static native Field  get5(long fieldID)
+    private static native Field  toField0(Class clazz, long fieldID, boolean isStatic)
         throws OutOfMemoryError;
-    private static native Object new0(Class clazz)
+    private static native Object allocObject0(Class clazz)
         throws InstantiationException, OutOfMemoryError;
-    private static native void   clr0(Object inst);
-    private static native void   clr1(Object inst);
 
     /**
      * Allocates a new java.lang.Object without invoking any
@@ -58,7 +54,7 @@ public final class Reflect
     {
         if (clazz == null)
             throw new IllegalArgumentException();
-        return new0(clazz); 
+        return allocObject0(clazz); 
     }
 
     public static Class findClass(String name)
@@ -66,7 +62,47 @@ public final class Reflect
     {
         if (name == null)
             throw new IllegalArgumentException();
-        return get0(name); 
+        return findClass0(name); 
+    }
+
+    public static long getConstructorID(Class clazz, String signature)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        if (clazz == null || signature == null)
+            throw new IllegalArgumentException();
+        return getMethod0(clazz, "<init>", signature, false); 
+    }
+
+    public static long getMethodID(Class clazz, String name, String signature, boolean isStatic)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        if (clazz == null || name == null || signature == null)
+            throw new IllegalArgumentException();
+        return getMethod0(clazz, name, signature, isStatic); 
+    }
+
+    public static long getFieldID(Class clazz, String name, String signature, boolean isStatic)
+        throws IllegalArgumentException, NoSuchFieldError, OutOfMemoryError
+    {
+        if (clazz == null || name == null || signature == null)
+            throw new IllegalArgumentException();
+        return getField0(clazz, name, signature, isStatic); 
+    }
+
+    public static Method toMethod(Class clazz, long methodID, boolean isStatic)
+        throws IllegalArgumentException, OutOfMemoryError
+    {
+        if (clazz == null || methodID == 0)
+            throw new IllegalArgumentException();
+        return toMethod0(clazz, methodID, isStatic);
     }
-    
+
+    public static Field toField(Class clazz, long fieldID, boolean isStatic)
+        throws IllegalArgumentException, OutOfMemoryError
+    {
+        if (clazz == null || fieldID == 0)
+            throw new IllegalArgumentException();
+        return toField0(clazz, fieldID, isStatic); 
+    }
+
 }

Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedClass.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedClass.java?rev=1091099&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedClass.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedClass.java Mon Apr 11 15:21:11 2011
@@ -0,0 +1,94 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * JVM reflection support.
+ *
+ * @since Runtime 1.0
+ *
+ */
+public final class ReflectedClass
+{
+
+    private Class clazz;
+    
+    private ReflectedClass()
+    {
+        // No instance.
+    }
+
+    public ReflectedClass(String name)
+        throws IllegalArgumentException, NoClassDefFoundError, OutOfMemoryError
+    {
+        clazz = Reflect.findClass(name);
+    }
+
+    public ReflectedClass(Class cls)
+        throws IllegalArgumentException, NoClassDefFoundError, OutOfMemoryError
+    {
+        clazz = Reflect.findClass(cls.getCanonicalName());
+    }
+
+    /**
+     * Allocates a new java.lang.Object without invoking any
+     * of the constructors for the object.
+     */
+    public Object allocObject()
+        throws IllegalArgumentException, InstantiationException, OutOfMemoryError
+    {
+        return Reflect.allocObject(clazz); 
+    }
+
+    public ReflectedMethod getConstructor(String signature)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        return new ReflectedMethodImpl(clazz, signature);
+    }
+
+    public ReflectedMethod getMethod(String name, String signature)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        return new ReflectedMethodImpl(clazz, name, signature, false);
+    }
+
+    public ReflectedMethod getStaticMethod(String name, String signature)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        return new ReflectedMethodImpl(clazz, name, signature, true);
+    }
+
+    public ReflectedField getField(String name, String signature)
+        throws IllegalArgumentException, NoSuchFieldError, OutOfMemoryError
+    {
+        return new ReflectedFieldImpl(clazz, name, signature, false);
+    }
+
+    public ReflectedField getStaticField(String name, String signature)
+        throws IllegalArgumentException, NoSuchFieldError, OutOfMemoryError
+    {
+        return new ReflectedFieldImpl(clazz, name, signature, true);
+    }
+
+    @Override
+    public String toString()
+    {
+        return clazz.getCanonicalName();
+    }
+}

Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedClass.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedField.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedField.java?rev=1091099&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedField.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedField.java Mon Apr 11 15:21:11 2011
@@ -0,0 +1,56 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * JVM reflection support.
+ *
+ * @since Runtime 1.0
+ *
+ */
+public abstract class ReflectedField
+{
+
+    protected Class   clazz;
+    protected long    fieldID;
+    protected boolean isStatic;
+
+    protected ReflectedField()
+    {
+    }
+
+    public ReflectedField(Class clazz, String name, String signature, boolean isStatic)
+        throws IllegalArgumentException, NoSuchFieldError, OutOfMemoryError
+    {
+        this.isStatic = isStatic;
+        this.clazz    = clazz;
+        fieldID = Reflect.getMethodID(clazz, name, signature, isStatic);         
+    }
+
+    public Field toField()
+        throws IllegalArgumentException, OutOfMemoryError
+    {
+        return Reflect.toField(clazz, fieldID, isStatic);
+    }
+
+    public boolean isStatic()
+    {
+        return isStatic;
+    }
+}

Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedField.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedFieldImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedFieldImpl.java?rev=1091099&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedFieldImpl.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedFieldImpl.java Mon Apr 11 15:21:11 2011
@@ -0,0 +1,38 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * JVM reflection support.
+ *
+ * @since Runtime 1.0
+ *
+ */
+class ReflectedFieldImpl extends ReflectedField
+{
+
+    public ReflectedFieldImpl(Class clazz, String name, String signature, boolean isStatic)
+        throws IllegalArgumentException, NoSuchFieldError, OutOfMemoryError
+    {
+        this.isStatic = isStatic;
+        this.clazz    = clazz;
+        fieldID = Reflect.getMethodID(clazz, name, signature, isStatic);         
+    }
+
+}

Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedFieldImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethod.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethod.java?rev=1091099&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethod.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethod.java Mon Apr 11 15:21:11 2011
@@ -0,0 +1,48 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * JVM reflection support.
+ *
+ * @since Runtime 1.0
+ *
+ */
+public abstract class ReflectedMethod
+{
+
+    protected Class   clazz;
+    protected long    methodID;
+    protected boolean isStatic;
+
+    protected ReflectedMethod()
+    {
+    }
+
+    public Method toMethod()
+        throws IllegalArgumentException, OutOfMemoryError
+    {
+        return Reflect.toMethod(clazz, methodID, isStatic);
+    }
+
+    public boolean isStatic()
+    {
+        return isStatic;
+    }
+}

Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethod.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethodImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethodImpl.java?rev=1091099&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethodImpl.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethodImpl.java Mon Apr 11 15:21:11 2011
@@ -0,0 +1,46 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * JVM reflection support.
+ *
+ * @since Runtime 1.0
+ *
+ */
+class ReflectedMethodImpl extends ReflectedMethod
+{
+
+    public ReflectedMethodImpl(Class clazz, String signature)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        this.clazz = clazz;
+        methodID = Reflect.getConstructorID(clazz, signature);
+        isStatic = false;
+    }
+
+    public ReflectedMethodImpl(Class clazz, String name, String signature, boolean isStatic)
+        throws IllegalArgumentException, NoSuchMethodError, OutOfMemoryError
+    {
+        this.isStatic = isStatic;
+        this.clazz    = clazz;
+        methodID = Reflect.getMethodID(clazz, name, signature, isStatic);         
+    }
+
+}

Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ReflectedMethodImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/reflect.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/reflect.c?rev=1091099&r1=1091098&r2=1091099&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/reflect.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/reflect.c Mon Apr 11 15:21:11 2011
@@ -26,7 +26,7 @@ ACR_INLINE(void) _jni_classname(char *na
     }
 }
 
-ACR_JNI_EXPORT(jobject, Reflect, get0)(JNI_STDARGS, jstring name)
+ACR_JNI_EXPORT(jobject, Reflect, findClass0)(JNI_STDARGS, jstring name)
 {
     jobject c = 0;
     WITH_CSTR(name) {
@@ -39,30 +39,11 @@ ACR_JNI_EXPORT(jobject, Reflect, get0)(J
     return c;
 }
 
-ACR_JNI_EXPORT(jobject, Reflect, get1)(JNI_STDARGS, jstring name,
-                                       jboolean isWeak)
-{
-    jobject c = 0;
-    WITH_CSTR(name) {
-        _jni_classname(J2S(name));
-        c = (jobject)(*_E)->FindClass(_E, J2S(name));
-        if (c != 0) {
-            /* Can throw OutOfMemoryError */
-            if (isWeak)
-                c = (*_E)->NewWeakGlobalRef(_E, c);
-            else
-                c = (*_E)->NewGlobalRef(_E, c);
-        }
-    }
-    DONE_WITH_STR(name);
-    return c;
-}
-
-ACR_JNI_EXPORT(jlong, Reflect, get2)(JNI_STDARGS,
-                                     jclass clazz,
-                                     jstring name,
-                                     jstring sig,
-                                     jboolean isStatic)
+ACR_JNI_EXPORT(jlong, Reflect, getMethod0)(JNI_STDARGS,
+                                           jclass clazz,
+                                           jstring name,
+                                           jstring sig,
+                                           jboolean isStatic)
 {
     jlong id = 0;
 
@@ -79,11 +60,11 @@ ACR_JNI_EXPORT(jlong, Reflect, get2)(JNI
     return id;
 }
 
-ACR_JNI_EXPORT(jlong, Reflect, get3)(JNI_STDARGS,
-                                     jclass clazz,
-                                     jstring name,
-                                     jstring sig,
-                                     jboolean isStatic)
+ACR_JNI_EXPORT(jlong, Reflect, getField0)(JNI_STDARGS,
+                                          jclass clazz,
+                                          jstring name,
+                                          jstring sig,
+                                          jboolean isStatic)
 {
     jlong id = 0;
 
@@ -100,44 +81,28 @@ ACR_JNI_EXPORT(jlong, Reflect, get3)(JNI
     return id;
 }
 
-ACR_JNI_EXPORT(jobject, Reflect, get4)(JNI_STDARGS,
-                                       jclass clazz,
-                                       jlong methodId,
-                                       jboolean isStatic)
+ACR_JNI_EXPORT(jobject, Reflect, toMethod0)(JNI_STDARGS,
+                                            jclass clazz,
+                                            jlong methodId,
+                                            jboolean isStatic)
 {
     return (*_E)->ToReflectedMethod(_E, clazz, J2P(methodId, jmethodID), isStatic);
 }
 
-ACR_JNI_EXPORT(jobject, Reflect, get5)(JNI_STDARGS,
-                                       jclass clazz,
-                                       jlong fieldId,
-                                       jboolean isStatic)
+ACR_JNI_EXPORT(jobject, Reflect, toField0)(JNI_STDARGS,
+                                           jclass clazz,
+                                           jlong fieldId,
+                                           jboolean isStatic)
 {
     return (*_E)->ToReflectedField(_E, clazz, J2P(fieldId, jfieldID), isStatic);
 }
 
-ACR_JNI_EXPORT(jint, Reflect, get6)(JNI_STDARGS,
-                                    jobject obj)
+ACR_JNI_EXPORT(jint, Reflect, getRefType0)(JNI_STDARGS, jobject obj)
 {
     return (jint)(*_E)->GetObjectRefType(_E, obj);
 }
 
-ACR_JNI_EXPORT(jobject, Reflect, new0)(JNI_STDARGS,
-                                       jclass clazz)
+ACR_JNI_EXPORT(jobject, Reflect, allocObject0)(JNI_STDARGS, jclass clazz)
 {
     return (*_E)->AllocObject(_E, clazz);
 }
-
-ACR_JNI_EXPORT(void, Reflect, clr0)(JNI_STDARGS, jobject obj)
-{
-    jobject o = (*_E)->NewLocalRef(_E, obj);
-    if (o != 0) {
-        (*_E)->DeleteWeakGlobalRef(_E, obj);
-        (*_E)->DeleteLocalRef(_E, o);        
-    }
-}
-
-ACR_JNI_EXPORT(void, Reflect, clr1)(JNI_STDARGS, jobject obj)
-{
-    (*_E)->DeleteGlobalRef(_E, obj);        
-}

Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestReflect.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestReflect.java?rev=1091099&r1=1091098&r2=1091099&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestReflect.java (original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestReflect.java Mon Apr 11 15:21:11 2011
@@ -46,4 +46,15 @@ public class TestReflect
         Assert.assertEquals("", o.toString());
     }
 
+    @Test(groups = { "utils" })
+    public void testReflectedClass()
+        throws Exception
+    {
+        // Uses JNI class naming.
+        ReflectedClass cl = new ReflectedClass("java/lang/System");
+        Assert.assertEquals("java.lang.System", cl.toString());
+        ReflectedMethod m = cl.getStaticMethod("load", "(Ljava/lang/String;)V");
+        Assert.assertNotNull(m);
+    }
+
 }