Markus,

- I had downloaded bcel-5.0rc1 which did not have the SyntheticRepository.
- The enclosed patch 
  - Adds a getMethod in JavaClass...
  - Adds an entry in the manifest to make my Ant happy.
- When is RC2? 

Thanks,
dims

--- [EMAIL PROTECTED] wrote:
> 
> > Wish #2: Wish i could create a JavaClass from java.lang.Class as shown below.
> > Class clazz = Class.forName("XXXX");
> > ClassParser parser = new ClassParser(clazz);
> > JavaClass jclazz = parser.parse();
> 
> You can already do this: 
> SyntheticRepository.getInstance().loadClass(clazz);
> 
> using the repository is the preferred way anyway.
> 
> > I can send in patches for both if anyone is interested.
> 
> Yes.
> 
> Cheers
>  Markus
> --
> berlin.de - meine stadt im netz. Jetzt eigene eMail-adresse @berlin.de sichern!
> http://webmail.berlin.de
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 


=====
Davanum Srinivas - http://xml.apache.org/~dims/

__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
cvs server: Diffing .
Index: manifest.txt
===================================================================
RCS file: /home/cvspublic/jakarta-bcel/manifest.txt,v
retrieving revision 1.1
diff -u -r1.1 manifest.txt
--- manifest.txt        18 Apr 2002 07:52:13 -0000      1.1
+++ manifest.txt        12 Jun 2002 16:21:13 -0000
@@ -1,2 +1,4 @@
-Manifest-Version: 1.0

-Main-Class: listclass

+Name: BCEL
+Manifest-Version: 1.0
+Main-Class: listclass
+
cvs server: Diffing docs
cvs server: Diffing docs/eps
cvs server: Diffing docs/verifier
cvs server: Diffing examples
cvs server: Diffing examples/Mini
cvs server: Diffing lib
cvs server: Diffing src
cvs server: Diffing src/java
cvs server: Diffing src/java/org
cvs server: Diffing src/java/org/apache
cvs server: Diffing src/java/org/apache/bcel
cvs server: Diffing src/java/org/apache/bcel/classfile
Index: src/java/org/apache/bcel/classfile/JavaClass.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-bcel/src/java/org/apache/bcel/classfile/JavaClass.java,v
retrieving revision 1.9
diff -u -r1.9 JavaClass.java
--- src/java/org/apache/bcel/classfile/JavaClass.java   6 Jun 2002 11:35:43 -0000      
 1.9
+++ src/java/org/apache/bcel/classfile/JavaClass.java   12 Jun 2002 16:21:13 -0000
@@ -403,7 +403,20 @@
   /**
    * @return Methods of the class.
    */
-  public Method[] getMethods()       { return methods; }    
+  public Method[] getMethods()       { return methods; }
+
+  /**
+   * @return A org.apache.bcel.classfile.Method corresponding to 
+java.lang.reflect.Method
+   */
+  public org.apache.bcel.classfile.Method getMethod(java.lang.reflect.Method m) {
+      for (int i = 0; i < methods.length; i++) {
+          if (m.getName().equals(methods[i].getName()) &&
+                  getSignature(m).equals(methods[i].getSignature())) {
+              return methods[i];
+          }
+      }
+      return null;
+  }
 
   /**
    * @return Minor number of compiler version.
@@ -794,4 +807,63 @@
            
     return vec.toArray();
   }
+
+    /**
+     * Compute the JVM signature for the class.
+     */
+    private String getSignature(Class clazz) {
+        String type = null;
+        if (clazz.isArray()) {
+            Class cl = clazz;
+            int dimensions = 0;
+            while (cl.isArray()) {
+                dimensions++;
+                cl = cl.getComponentType();
+            }
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < dimensions; i++) {
+                sb.append("[");
+            }
+            sb.append(getSignature(cl));
+            type = sb.toString();
+        } else if (clazz.isPrimitive()) {
+            if (clazz == Integer.TYPE) {
+                type = "I";
+            } else if (clazz == Byte.TYPE) {
+                type = "B";
+            } else if (clazz == Long.TYPE) {
+                type = "J";
+            } else if (clazz == Float.TYPE) {
+                type = "F";
+            } else if (clazz == Double.TYPE) {
+                type = "D";
+            } else if (clazz == Short.TYPE) {
+                type = "S";
+            } else if (clazz == Character.TYPE) {
+                type = "C";
+            } else if (clazz == Boolean.TYPE) {
+                type = "Z";
+            } else if (clazz == Void.TYPE) {
+                type = "V";
+            }
+        } else {
+            type = "L" + clazz.getName().replace('.', '/') + ";";
+        }
+        return type;
+    }
+
+    /*
+     * Compute the JVM method descriptor for the method.
+     */
+    private String getSignature(java.lang.reflect.Method meth) {
+        StringBuffer sb = new StringBuffer();
+        sb.append("(");
+        Class[] params = meth.getParameterTypes(); // avoid clone
+        for (int j = 0; j < params.length; j++) {
+            sb.append(getSignature(params[j]));
+        }
+        sb.append(")");
+        sb.append(getSignature(meth.getReturnType()));
+        return sb.toString();
+    }
 }
cvs server: Diffing src/java/org/apache/bcel/generic
cvs server: Diffing src/java/org/apache/bcel/util
cvs server: Diffing src/java/org/apache/bcel/verifier
cvs server: Diffing src/java/org/apache/bcel/verifier/exc
cvs server: Diffing src/java/org/apache/bcel/verifier/statics
cvs server: Diffing src/java/org/apache/bcel/verifier/structurals
cvs server: Diffing xdocs
cvs server: Diffing xdocs/images
cvs server: Diffing xdocs/stylesheets

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to