@Override public void generateCode(MethodVisitor mv, CodeFlow codeflow) { final String constantFieldName = "inlineList$" + codeflow.nextFieldId(); final String className = codeflow.getClassName(); codeflow.registerNewField((cw, cflow) -> cw.visitField(ACC_PRIVATE | ACC_STATIC | ACC_FINAL, constantFieldName, "Ljava/util/List;", null, null)); codeflow.registerNewClinit((mVisitor, cflow) -> generateClinitCode(className, constantFieldName, mVisitor, cflow, false)); mv.visitFieldInsn(GETSTATIC, className, constantFieldName, "Ljava/util/List;"); codeflow.pushDescriptor("Ljava/util/List"); }
@Override public void generateCode(MethodVisitor mv, CodeFlow codeflow) { final String constantFieldName = "inlineList$" + codeflow.nextFieldId(); final String className = codeflow.getClassName(); codeflow.registerNewField((cw, cflow) -> cw.visitField(ACC_PRIVATE | ACC_STATIC | ACC_FINAL, constantFieldName, "Ljava/util/List;", null, null)); codeflow.registerNewClinit((mVisitor, cflow) -> generateClinitCode(className, constantFieldName, mVisitor, cflow, false)); mv.visitFieldInsn(GETSTATIC, className, constantFieldName, "Ljava/util/List;"); codeflow.pushDescriptor("Ljava/util/List"); }
/** * 创建属性 * @param cw * @param classGenerator */ public static void visitAddFiled(ClassWriter cw,ClassGeneratorEntity classGenerator) { classGenerator.getFieldGenerators().forEach( fieldGenerator -> cw.visitField( ACC_PRIVATE, fieldGenerator.getName(), Type.getType(fieldGenerator.getClazz()).getDescriptor(), null, null).visitEnd()); }
cw.visitField(Opcodes.ACC_PUBLIC, "obj", "L" + listenerClassName + ";", null, null);
@Override public void generateCode(MethodVisitor mv, CodeFlow codeflow) { final String constantFieldName = "inlineList$" + codeflow.nextFieldId(); final String className = codeflow.getClassName(); codeflow.registerNewField((cw, cflow) -> cw.visitField(ACC_PRIVATE | ACC_STATIC | ACC_FINAL, constantFieldName, "Ljava/util/List;", null, null)); codeflow.registerNewClinit((mVisitor, cflow) -> generateClinitCode(className, constantFieldName, mVisitor, cflow, false)); mv.visitFieldInsn(GETSTATIC, className, constantFieldName, "Ljava/util/List;"); codeflow.pushDescriptor("Ljava/util/List"); }
ACC_PRIVATE + ACC_FINAL + ACC_STATIC); cw.visitField(ACC_PRIVATE, BEAN_FIELD, getAccessibleTypeReferenceName(entity), null, null).visitEnd(); cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, witherName(property), referenceName(JAVA_LANG_INVOKE_METHOD_HANDLE), null, null).visitEnd(); cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, setterName(property), referenceName(JAVA_LANG_INVOKE_METHOD_HANDLE), null, null).visitEnd(); cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, getterName(property), referenceName(JAVA_LANG_INVOKE_METHOD_HANDLE), null, null).visitEnd(); cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, fieldSetterName(property), referenceName(JAVA_LANG_INVOKE_METHOD_HANDLE), null, null).visitEnd(); cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, fieldGetterName(property), referenceName(JAVA_LANG_INVOKE_METHOD_HANDLE), null, null).visitEnd();
FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, CLASS_FIELD_NAME, CLASS_DESCRIPTOR, null, null); fv.visitEnd(); fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, ID_FIELD_NAME, Type.INT_TYPE.getDescriptor(), null, Integer.valueOf(classId)); fv.visitEnd();
FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, CLASS_FIELD_NAME, CLASS_DESCRIPTOR, null, null); fv.visitEnd(); fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, ID_FIELD_NAME, Type.INT_TYPE.getDescriptor(), null, Integer.valueOf(classId)); fv.visitEnd();