List of usage examples for org.objectweb.asm.util CheckClassAdapter visitInnerClass
@Override
public void visitInnerClass(final String name, final String outerName, final String innerName,
final int access)
From source file:org.spongepowered.mod.asm.util.ASMEventListenerHolderFactory.java
License:MIT License
public static Class<?> getClass(Class<?> eventClass, EventPriority priority, boolean canceled) { ClassWriter cwRaw = new ClassWriter(0); CheckClassAdapter cw = new CheckClassAdapter(cwRaw); MethodVisitor mv;/*from ww w.j ava 2 s .com*/ AnnotationVisitor av0; String className = getClassName(eventClass, priority, canceled); String classNameInternal = className.replace('.', '/'); String invokeMethodDesc = "(" + Type.getDescriptor(eventClass) + ")V"; String eventPriorityName = priority.name(); cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, classNameInternal, null, "org/spongepowered/mod/event/EventListenerHolder", null); cw.visitInnerClass("net/minecraftforge/event/world/BlockEvent$BreakEvent", "net/minecraftforge/event/world/BlockEvent", "BreakEvent", ACC_PUBLIC + ACC_STATIC); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "org/spongepowered/mod/event/EventListenerHolder", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "invoke", invokeMethodDesc, null, null); { av0 = mv.visitAnnotation("Lnet/minecraftforge/fml/common/eventhandler/SubscribeEvent;", true); av0.visitEnum("priority", "Lnet/minecraftforge/fml/common/eventhandler/EventPriority;", eventPriorityName); av0.visit("receiveCanceled", canceled); av0.visitEnd(); } mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, "org/spongepowered/mod/event/EventListenerHolder", "invoke", "(Ljava/lang/Object;)V", false); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } cw.visitEnd(); if (loaderAccess == null) { loaderAccess = new ClassLoaderAccess(); } return loaderAccess.defineClass(className, cwRaw.toByteArray()); }