001package cpw.mods.fml.common.discovery.asm;
002
003import java.util.Collections;
004
005import org.objectweb.asm.AnnotationVisitor;
006import org.objectweb.asm.ClassVisitor;
007import org.objectweb.asm.FieldVisitor;
008import org.objectweb.asm.MethodVisitor;
009import org.objectweb.asm.Opcodes;
010import org.objectweb.asm.Type;
011
012public 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}