https://issues.apache.org/bugzilla/show_bug.cgi?id=48279
Summary: Invalid method signature: TT; when using MethodGen
for a method having a generic parameter
Product: BCEL
Version: unspecified
Platform: All
OS/Version: All
Status: NEW
Severity: major
Priority: P2
Component: Main
AssignedTo: bcel-dev@jakarta.apache.org
ReportedBy: enrico.gu...@polito.it
The following code throws a ClassFormatException: Invalid method signature:
TT; when executed:
===
import org.apache.bcel.Repository;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.MethodGen;
class MyClassLoader extends ClassLoader {
@Override
public Class? loadClass(String name) throws ClassNotFoundException {
if (name.startsWith(java.lang))
return super.loadClass(name);
JavaClass jcl;
jcl = Repository.lookupClass(name);
scanMethods(jcl);
byte[] data = jcl.getBytes();
return defineClass(name, data, 0, data.length);
}
private void scanMethods(JavaClass jcl) {
ConstantPoolGen cpg = new ConstantPoolGen(jcl.getConstantPool());
Method[] methods = jcl.getMethods();
for (int i = 0; i methods.length; i++) {
MethodGen mg = new MethodGen(methods[i], jcl.getClassName(), cpg);
}
}
}
class FooT {
public void bar(T x) {
}
}
public class MethSignTest {
public MethSignTest() {
FooInteger foo = new FooInteger();
}
@SuppressWarnings(unchecked)
public static void main(String[] args) {
try {
MyClassLoader mcl = new MyClassLoader();
ClassMethSignTest c = (ClassMethSignTest) mcl
.loadClass(MethSignTest.class.getName());
c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
===
Here's the full stack trace:
org.apache.bcel.classfile.ClassFormatException: Invalid method signature: TT;
at org.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:986)
at org.apache.bcel.generic.Type.getType(Type.java:169)
at org.apache.bcel.generic.MethodGen.init(MethodGen.java:255)
at methodsignature.MyClassLoader.scanMethods(MethSignTest.java:26)
at methodsignature.MyClassLoader.loadClass(MethSignTest.java:17)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at methodsignature.MethSignTest.init(MethSignTest.java:38)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:501)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at methodsignature.MethSignTest.main(MethSignTest.java:47)
This misbehaviour occurs at least since revision 617860.
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
--- You are receiving this mail because: ---
You are the assignee for the bug.
-
To unsubscribe, e-mail: bcel-dev-unsubscr...@jakarta.apache.org
For additional commands, e-mail: bcel-dev-h...@jakarta.apache.org