I've run into an issue when using BCEL on the results of the below Kotlin code.
class test { fun takeABlock(a: () -> Unit) { a() } fun `method name with () in it`() { takeABlock { println("other test") } } fun `method name without parens`() { takeABlock { println("other test") } } } Three class files are produced. test$method name with () in it$1.class test$method name without parens$1.class test.class When i use the examples/JasminVisitor.java against `test$method name with () in it$1.class` with a small patch to add a `field.getType()` call to the `visitField` method I get the below stack trace. Exception in thread "main" org.apache.bcel.classfile.ClassFormatException: Invalid method signature: in it$1; at org.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:1284) at org.apache.bcel.generic.Type.getType(Type.java:227) at org.apache.bcel.generic.Type.getReturnType(Type.java:151) at org.apache.bcel.classfile.Field.getType(Field.java:150) at JasminVisitor.visitField(JasminVisitor.java:287) at org.apache.bcel.classfile.Field.accept(Field.java:113) at org.apache.bcel.classfile.DescendingVisitor.visitField(DescendingVisitor.java:311) at org.apache.bcel.classfile.Field.accept(Field.java:113) at org.apache.bcel.classfile.DescendingVisitor.lambda$accept$0(DescendingVisitor.java:44) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) at org.apache.bcel.classfile.DescendingVisitor.accept(DescendingVisitor.java:44) at org.apache.bcel.classfile.DescendingVisitor.visitJavaClass(DescendingVisitor.java:335) at org.apache.bcel.classfile.JavaClass.accept(JavaClass.java:251) at org.apache.bcel.classfile.DescendingVisitor.visit(DescendingVisitor.java:77) at JasminVisitor.disassemble(JasminVisitor.java:109) at JasminVisitor.main(JasminVisitor.java:82) Thanks, Jason C