001 package cpw.mods.fml.common.discovery.asm;
002
003 import java.util.Collections;
004
005 import org.objectweb.asm.AnnotationVisitor;
006 import org.objectweb.asm.ClassVisitor;
007 import org.objectweb.asm.FieldVisitor;
008 import org.objectweb.asm.MethodVisitor;
009 import org.objectweb.asm.Opcodes;
010 import org.objectweb.asm.Type;
011
012 public class ModClassVisitor extends ClassVisitor
013 {
014 private ASMModParser discoverer;
015
016 public ModClassVisitor(ASMModParser discoverer)
017 {
018 super(Opcodes.ASM4);
019 this.discoverer = discoverer;
020 }
021
022
023 @Override
024 public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
025 {
026 discoverer.beginNewTypeName(name, version, superName);
027 }
028
029 @Override
030 public AnnotationVisitor visitAnnotation(String annotationName, boolean runtimeVisible)
031 {
032 discoverer.startClassAnnotation(annotationName);
033 return new ModAnnotationVisitor(discoverer);
034 }
035
036
037 @Override
038 public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
039 {
040 return new ModFieldVisitor(name, discoverer);
041 }
042
043 @Override
044 public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
045 {
046 if (discoverer.isBaseMod(Collections.<String>emptyList()) && name.equals("getPriorities") && desc.equals(Type.getMethodDescriptor(Type.getType(String.class))))
047 {
048 return new ModMethodVisitor(name, discoverer);
049 }
050 return null;
051 }
052 }