You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-dev@jakarta.apache.org by db...@apache.org on 2005/06/11 02:47:40 UTC

svn commit: r190050 - /jakarta/bcel/trunk/src/java/org/apache/bcel/generic/FieldOrMethod.java

Author: dbrosius
Date: Fri Jun 10 17:47:39 2005
New Revision: 190050

URL: http://svn.apache.org/viewcvs?rev=190050&view=rev
Log:
For FieldOrMethod.getClassName changed to support java5.0 for old clients. thanks Dave Hovemeyer

   *  @deprecated If the instruction references an array class,
   *    this method will return "java.lang.Object".
   *    For code generated by Java 1.5, this answer is
   *    sometimes wrong (e.g., if the "clone()" method is
   *    called on an array).  A better idea is to use
   *    the getReferenceType() method, which correctly distinguishes
   *    between class types and array types.

Modified:
    jakarta/bcel/trunk/src/java/org/apache/bcel/generic/FieldOrMethod.java

Modified: jakarta/bcel/trunk/src/java/org/apache/bcel/generic/FieldOrMethod.java
URL: http://svn.apache.org/viewcvs/jakarta/bcel/trunk/src/java/org/apache/bcel/generic/FieldOrMethod.java?rev=190050&r1=190049&r2=190050&view=diff
==============================================================================
--- jakarta/bcel/trunk/src/java/org/apache/bcel/generic/FieldOrMethod.java (original)
+++ jakarta/bcel/trunk/src/java/org/apache/bcel/generic/FieldOrMethod.java Fri Jun 10 17:47:39 2005
@@ -62,11 +62,23 @@
   }
 
   /** @return name of the referenced class/interface
+   *  @deprecated If the instruction references an array class,
+   *    this method will return "java.lang.Object".
+   *    For code generated by Java 1.5, this answer is
+   *    sometimes wrong (e.g., if the "clone()" method is
+   *    called on an array).  A better idea is to use
+   *    the getReferenceType() method, which correctly distinguishes
+   *    between class types and array types.
    */
   public String getClassName(ConstantPoolGen cpg) {
     ConstantPool cp  = cpg.getConstantPool();
     ConstantCP   cmr = (ConstantCP)cp.getConstant(index);
-    return cp.getConstantString(cmr.getClassIndex(), org.apache.bcel.Constants.CONSTANT_Class).replace('/', '.');
+    String className = cp.getConstantString(cmr.getClassIndex(), org.apache.bcel.Constants.CONSTANT_Class);
+    if (className.startsWith("[")) {
+      // Turn array classes into java.lang.Object.
+       return "java.lang.Object";
+    }
+    return className.replace('/', '.');
   }
 
   /** @return type of the referenced class/interface



---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org