You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by br...@apache.org on 2016/07/02 16:51:15 UTC
svn commit: r1751083 - in /commons/proper/bcel/trunk: RELEASE-NOTES.txt
src/changes/changes.xml
src/main/java/org/apache/bcel/generic/InvokeInstruction.java
Author: britter
Date: Sat Jul 2 16:51:15 2016
New Revision: 1751083
URL: http://svn.apache.org/viewvc?rev=1751083&view=rev
Log:
BCEL-262: InvokeInstruction.getClassName(ConstantPoolGen) should throw an exception when it detects an array. Thanks to Mark Roberts.
Modified:
commons/proper/bcel/trunk/RELEASE-NOTES.txt
commons/proper/bcel/trunk/src/changes/changes.xml
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/InvokeInstruction.java
Modified: commons/proper/bcel/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/RELEASE-NOTES.txt?rev=1751083&r1=1751082&r2=1751083&view=diff
==============================================================================
--- commons/proper/bcel/trunk/RELEASE-NOTES.txt [utf-8] (original)
+++ commons/proper/bcel/trunk/RELEASE-NOTES.txt [utf-8] Sat Jul 2 16:51:15 2016
@@ -190,6 +190,8 @@ o BCEL-177: When reading the number of p
CHANGES:
========
+o BCEL-262: InvokeInstruction.getClassName(ConstantPoolGen) should throw an
+ exception when it detects an array. Thanks to Mark Roberts.
o BCEL-230: Document the Java platform requirement clearly and early.
o BCEL-211: Some additional clone methods should be public.
o BCEL-127: Document that Instruction Factory returns singleton instances.
Modified: commons/proper/bcel/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/changes/changes.xml?rev=1751083&r1=1751082&r2=1751083&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/changes/changes.xml [utf-8] (original)
+++ commons/proper/bcel/trunk/src/changes/changes.xml [utf-8] Sat Jul 2 16:51:15 2016
@@ -107,6 +107,8 @@ Source compatible - Yes, sort of;
For full information about API changes please see the extended Clirr report:
http://commons.apache.org/bcel/clirr-report.html">
+ <action issue="BCEL-262" type="update" dev="britter" due-to="Mark Roberts">InvokeInstruction.getClassName(ConstantPoolGen)
+ should throw an exception when it detects an array.</action>
<action issue="BCEL-237" type="fix" dev="sebb">non-empty final arrays should be private as they are mutable.</action>
<action issue="BCEL-230" type="update" dev="britter">Document the Java platform requirement clearly and early.</action>
<action issue="BCEL-243" type="fix">Type.getType() needs to understand TypeVariableSignature(s).</action>
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/InvokeInstruction.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/InvokeInstruction.java?rev=1751083&r1=1751082&r2=1751083&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/InvokeInstruction.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/InvokeInstruction.java Sat Jul 2 16:51:15 2016
@@ -21,6 +21,7 @@ import java.util.StringTokenizer;
import org.apache.bcel.Const;
import org.apache.bcel.classfile.Constant;
+import org.apache.bcel.classfile.ConstantCP;
import org.apache.bcel.classfile.ConstantPool;
/**
@@ -90,6 +91,24 @@ public abstract class InvokeInstruction
return Type.getReturnTypeSize(signature);
}
+ /**
+ * This overrides the deprecated version as we know here that the referenced class
+ * cannot be an array unless something has gone badly wrong.
+ * may legally be an array.
+ * *
+ * @return name of the referenced class/interface
+ * @throws IllegalArgumentException if the referenced class is an array (this should not happen)
+ */
+ @Override
+ public String getClassName( final ConstantPoolGen cpg ) {
+ final ConstantPool cp = cpg.getConstantPool();
+ final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex());
+ final String className = cp.getConstantString(cmr.getClassIndex(), Const.CONSTANT_Class);
+ if (className.startsWith("[")) {
+ throw new IllegalArgumentException("Cannot be used on an array type");
+ }
+ return className.replace('/', '.');
+ }
/** @return return type of referenced method.
*/