protected void invokePut( 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); mv.visitVarInsn(ALOAD, 2); if (BuildUtils.isPrimitive(field.getTypeName())) { TraitFactory.primitiveValue(mv, field.getTypeName()); mv.visitVarInsn(BuildUtils.storeType(field.getTypeName()), 3); TraitFactory.invokeInjector(mv, wrapperName, trait, core, field, false, 3); } else { TraitFactory.invokeInjector(mv, wrapperName, trait, core, field, false, 2); } mv.visitVarInsn(ALOAD, 2); mv.visitInsn(ARETURN); mv.visitLabel(l1); }