public void body(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); } }).addMethod(ACC_PUBLIC, "replaceDeclaration", generator.methodDescr(null, Declaration.class, Declaration.class)
protected void buildSystemHashCode(ClassWriter cw) { { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "identityHashCode", "(Ljava/lang/Object;)I"); mv.visitInsn(IRETURN); mv.visitMaxs( 0, 0 ); mv.visitEnd(); } }
protected void invokeContainsKey( MethodVisitor mv, String fieldName ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l0 = new Label(); mv.visitJumpInsn( IFEQ, l0 ); mv.visitInsn( ICONST_1 ); mv.visitInsn( IRETURN ); mv.visitLabel( l0 ); }
protected void buildHardGetter( ClassVisitor cw, FieldDefinition field, String masterName, ClassDefinition proxy, ClassDefinition core, String getterName, boolean protect ) { Class fieldType = field.getType(); MethodVisitor mv = cw.visitMethod( protect ? ACC_PROTECTED : ACC_PUBLIC, getterName, "()" + Type.getDescriptor( fieldType ), null, null); mv.visitCode(); TraitFactory.invokeExtractor( mv, masterName, proxy, core, field ); if ( ! BuildUtils.isPrimitive( field.getTypeName() ) ) { mv.visitTypeInsn( CHECKCAST, Type.getInternalName( fieldType ) ); } mv.visitInsn( BuildUtils.returnType ( fieldType.getName() ) ); // mv.visitMaxs( 2, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
private void writeOutNullHandler(Member member, int type) { mv.visitInsn(DUP); mv.visitInsn(POP); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEINTERFACE, NAMESPACE + "integration/PropertyHandler", "getProperty", "(Ljava/lang/String;Ljava/lang/Object;L" + NAMESPACE + "integration/VariableResolverFactory;)Ljava/lang/Object;");
protected void buildSize( ClassVisitor cw, String wrapperName, String coreName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "size", "()I", null, null); mv.visitCode(); mv.visitVarInsn( ALOAD, 0 ); mv.visitMethodInsn( INVOKESPECIAL, Type.getInternalName( TripleBasedStruct.class ), "size", "()I" ); int n = core.getFieldsDefinitions().size(); for ( int j = 0; j < n; j++ ) { mv.visitInsn( ICONST_1 ); mv.visitInsn( IADD ); } mv.visitInsn(IRETURN); // mv.visitMaxs( core.getFieldsDefinitions().size() > 0 ? 2 : 1, // 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
protected void invokeContainsKey( MethodVisitor mv, String fieldName ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l0 = new Label(); mv.visitJumpInsn( IFEQ, l0 ); mv.visitInsn( ICONST_1 ); mv.visitInsn( IRETURN ); mv.visitLabel( l0 ); }
private void buildHardGetter( ClassVisitor cw, FieldDefinition field, String masterName, ClassDefinition proxy, ClassDefinition core, String getterName, boolean protect ) { String fieldName = field.getName(); Class fieldType = field.getType(); MethodVisitor mv = cw.visitMethod( protect ? ACC_PROTECTED : ACC_PUBLIC, getterName, "()" + Type.getDescriptor( field.getType() ), null, null); mv.visitCode(); TraitFactory.invokeExtractor( mv, masterName, proxy, core, field ); if ( ! BuildUtils.isPrimitive( field.getTypeName() ) ) { mv.visitTypeInsn( CHECKCAST, Type.getInternalName( fieldType ) ); } mv.visitInsn( BuildUtils.returnType ( field.getTypeName() ) ); // mv.visitMaxs( 2, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
public void body(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); } }).addMethod(ACC_PUBLIC, "replaceDeclaration", generator.methodDescr(null, Declaration.class, Declaration.class)
private void writeOutNullHandler(Member member, int type) { mv.visitInsn(DUP); mv.visitInsn(POP); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEINTERFACE, NAMESPACE + "integration/PropertyHandler", "getProperty", "(Ljava/lang/String;Ljava/lang/Object;L" + NAMESPACE + "integration/VariableResolverFactory;)Ljava/lang/Object;");
private void buildSize( ClassVisitor cw, String wrapperName, String coreName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { String internalWrapper = BuildUtils.getInternalType( wrapperName ); MethodVisitor mv = cw.visitMethod( ACC_PUBLIC, "size", "()I", null, null ); mv.visitCode(); mv.visitVarInsn( ALOAD, 0 ); mv.visitFieldInsn( GETFIELD, internalWrapper, "map", Type.getDescriptor( Map.class ) ); mv.visitMethodInsn( INVOKEINTERFACE, Type.getInternalName( Map.class ), "size", "()I" ); int n = core.getFieldsDefinitions().size(); for ( int j = 0; j < n; j++ ) { mv.visitInsn( ICONST_1 ); mv.visitInsn( IADD ); } mv.visitInsn( IRETURN ); // mv.visitMaxs( core.getFieldsDefinitions().size() > 0 ? 2 : 1, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
protected int clearSoftField(MethodVisitor mv, String wrapperName, FieldDefinition field ) { int size = 0; mv.visitVarInsn( ALOAD, 0 ); mv.visitFieldInsn( GETFIELD, wrapperName, "store", Type.getDescriptor( TripleStore.class ) ); mv.visitVarInsn( ALOAD, 0 ); mv.visitLdcInsn( field.getName() ); mv.visitInsn( BuildUtils.zero( field.getTypeName() ) ); if ( BuildUtils.isPrimitive( field.getTypeName() ) ) { TraitFactory.valueOf( mv, field.getTypeName() ); size = BuildUtils.sizeOf( field.getTypeName() ); } else { size = 2; } mv.visitMethodInsn( INVOKEVIRTUAL, wrapperName, "property", "(" + Type.getDescriptor( String.class ) + Type.getDescriptor( Object.class ) + ")" + Type.getDescriptor( Triple.class ) ); mv.visitInsn( ICONST_1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( TripleStore.class ), "put", "(" + Type.getDescriptor( Triple.class ) + "Z)Z" ); mv.visitInsn( POP ); return size; }
@Override public void body(MethodVisitor mv) { Label l1 = new Label(); Label l2 = new Label(); mv.visitVarInsn(ALOAD, 1); // if (object == null) mv.visitJumpInsn(IFNULL, l1); mv.visitVarInsn(ALOAD, 1); instanceOf(CompiledInvoker.class); mv.visitJumpInsn(IFNE, l2); // if (!(object instanceof org.drools.spi.CompiledInvoker)) mv.visitLabel(l1); mv.visitInsn(ICONST_0); // return false mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); invokeThis("getMethodBytecode", List.class); mv.visitVarInsn(ALOAD, 1); cast(CompiledInvoker.class); invokeInterface(CompiledInvoker.class, "getMethodBytecode", List.class); invokeStatic(MethodComparator.class, "compareBytecode", Boolean.TYPE, List.class, List.class); // return MethodComparator.compareBytecode(getMethodBytecode(), ((CompiledInvoker)object).getMethodBytecode()); mv.visitInsn(IRETURN); } }
protected void buildIsEmpty( ClassVisitor cw, String wrapperName, String coreName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { boolean hasHardFields = core.getFieldsDefinitions().size() > 0; MethodVisitor mv = cw.visitMethod( ACC_PUBLIC, "isEmpty", "()Z", null, null ); mv.visitCode(); if ( ! hasHardFields ) { mv.visitVarInsn( ALOAD, 0 ); mv.visitMethodInsn( INVOKESPECIAL, Type.getInternalName( TripleBasedStruct.class ), "isEmpty", "()Z" ); } else { mv.visitInsn( ICONST_0 ); } mv.visitInsn( IRETURN ); // mv.visitMaxs( 1, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
private void invokeRemove( MethodVisitor mv, String wrapperName, ClassDefinition core, String fieldName, FieldDefinition field ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName(String.class), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l1 = new Label(); mv.visitJumpInsn( IFEQ, l1 ); TraitFactory.invokeExtractor( mv, wrapperName, trait, core, field ); if ( BuildUtils.isPrimitive( field.getTypeName() ) ) { TraitFactory.valueOf( mv, field.getTypeName() ); } mv.visitVarInsn( ASTORE, 2 ); TraitFactory.invokeInjector( mv, wrapperName, trait, core, field, true, 1 ); mv.visitVarInsn( ALOAD, 2 ); mv.visitInsn( ARETURN ); mv.visitLabel( l1 ); }
protected void traverseTuplesUntilDeclarationWithOr(int declarIndex, int declarReg, int tupleReg, int declarOffsetReg) { mv.visitVarInsn(ALOAD, declarReg); push(declarIndex); mv.visitInsn(AALOAD); // declarations[i] invokeVirtual(Declaration.class, "getPattern", Pattern.class); invokeVirtual(Pattern.class, "getOffset", Integer.TYPE); // declarations[i].getPattern().getOffset() mv.visitVarInsn(ISTORE, declarOffsetReg); // declarations[i].getPattern().getOffset() // while (tuple.getIndex() > declaration[i].getPattern().getOffset()) tuple = tuple.getParent() Label whileStart = new Label(); Label whileExit = new Label(); mv.visitLabel(whileStart); mv.visitVarInsn(ALOAD, tupleReg); invokeInterface(LeftTuple.class, "getIndex", Integer.TYPE); // tuple.getIndex() mv.visitVarInsn(ILOAD, declarOffsetReg); // declarations[i].getPattern().getOffset() mv.visitJumpInsn(IF_ICMPLE, whileExit); // if tuple.getIndex() <= declarations[i].getPattern().getOffset() jump to whileExit mv.visitVarInsn(ALOAD, tupleReg); invokeInterface(LeftTuple.class, "getParent", LeftTuple.class); mv.visitVarInsn(ASTORE, tupleReg); // tuple = tuple.getParent() mv.visitJumpInsn(GOTO, whileStart); mv.visitLabel(whileExit); } }
protected void buildCommonMethods( ClassWriter cw, String proxy ) { MethodVisitor mv; { mv = cw.visitMethod( ACC_PUBLIC, "toString", "()" + Type.getDescriptor( String.class ), null, null ); mv.visitCode(); mv.visitTypeInsn( NEW, Type.getInternalName( StringBuilder.class ) ); mv.visitInsn( DUP ); mv.visitMethodInsn( INVOKESPECIAL, Type.getInternalName( StringBuilder.class ), "<init>", "()V" ); mv.visitLdcInsn( "(@" + proxy + ") : " ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( StringBuilder.class ), "append", "(" + Type.getDescriptor( String.class ) + ")" + Type.getDescriptor( StringBuilder.class ) ); mv.visitVarInsn( ALOAD, 0 ); mv.visitMethodInsn( INVOKEVIRTUAL, BuildUtils.getInternalType( proxy ), "getFields", "()" + Type.getDescriptor( Map.class ) ); mv.visitMethodInsn( INVOKEINTERFACE, Type.getInternalName( Map.class ) , "entrySet", "()" + Type.getDescriptor( Set.class ) ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( Object.class ), "toString", "()" + Type.getDescriptor( String.class )); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( StringBuilder.class ), "append", "(" + Type.getDescriptor( String.class ) + ")" + Type.getDescriptor( StringBuilder.class ) ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( StringBuilder.class ), "toString", "()" + Type.getDescriptor( String.class )); mv.visitInsn( ARETURN ); // mv.visitMaxs( 2, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); } }
private void invokeGet( MethodVisitor mv, String wrapperName, ClassDefinition core, String fieldName, FieldDefinition field ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l0 = new Label(); mv.visitJumpInsn( IFEQ, l0 ); TraitFactory.invokeExtractor( mv, wrapperName, trait, core, field ); if ( BuildUtils.isPrimitive( field.getTypeName() ) ) { TraitFactory.valueOf( mv, field.getTypeName() ); } mv.visitInsn( ARETURN ); mv.visitLabel( l0 ); }
@Override public void body(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 0); invokeVirtual(Object.class, "getClass", Class.class); push(data.getRuleClassName()); push(data.getPackageName()); push(data.getMethodName()); push(data.getInternalRuleClassName() + ".class"); invokeStatic(Rule.class, "getMethodBytecode", List.class, Class.class, String.class, String.class, String.class, String.class); mv.visitInsn(ARETURN); } }
private void buildIsEmpty( ClassVisitor cw, String wrapperName, String coreName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { String internalWrapper = BuildUtils.getInternalType( wrapperName ); boolean hasHardFields = core.getFieldsDefinitions().size() > 0; MethodVisitor mv = cw.visitMethod( ACC_PUBLIC, "isEmpty", "()Z", null, null ); mv.visitCode(); if ( ! hasHardFields ) { mv.visitVarInsn( ALOAD, 0 ); mv.visitFieldInsn( GETFIELD, internalWrapper, "map", Type.getDescriptor( Map.class ) ); mv.visitMethodInsn( INVOKEINTERFACE, Type.getInternalName( Map.class ), "isEmpty", "()Z" ); } else { mv.visitInsn( ICONST_0 ); } mv.visitInsn( IRETURN ); // mv.visitMaxs( 1, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }