After calling ClassReader.accept(...) on a custom ClassVisitor (while I will describe in a moment), ASM's
internal method org.objectweb.asm.ClassReader.a fails with a NullPointerException when the
ClassReader is fed certain classes from the J2SE 1.5.0_06 standard library. The version of ASM used
was 3.0-beta.
The following classes cause the error when fed to ClassReader:
com/sun/corba/se/impl/encoding/CDRInputStream_1_0
com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream
com/sun/security/auth/SolarisPrincipal
java/lang/StringCoding
java/rmi/server/Skeleton
java/security/IdentityScope
java/util/logging/Handler
javax/management/timer/Timer
sun/applet/AppletResourceLoader
sun/io/ByteToCharSingleByte
sun/io/CharacterEncoding
sun/nio/cs/StreamEncoder
sun/print/PSPrinterJob
sun/rmi/transport/DGCImpl_Skel
sun/rmi/transport/proxy/RMIMasterSocketFactory
sun/security/provider/SystemSigner
sun/tools/javac/BatchParser
sun/tools/native2ascii/Main
I have further determined that the failure occurs sometime after ClassReader calls
ClassVisitor.visitAnnotation(...), but before it calls any other visit* methods.
Now, my custom ClassVisitor (which is *really* simple) is implemented as follows:
public class BlindClassVisitor implements ClassVisitor {
public void visit(
int version,
int access,
String name,
String signature,
String superName,
String[] interfaces) {}
public void visitSource(String source, String debug) {}
public void visitOuterClass(String owner, String name, String desc) {}
public AnnotationVisitor visitAnnotation(String desc, boolean visible) { return null; }
public void visitAttribute(Attribute attr) {}
public void visitInnerClass(
String name,
String outerName,
String innerName,
int access) {}
public FieldVisitor visitField(
int access,
String name, String desc,
String signature,
java.lang.Object value)
{
return null;
}
public MethodVisitor visitMethod(
int access,
String name, String desc,
String signature,
String[] exceptions)
{
return null;
}
public void visitEnd() {}
}