use of org.drools.core.factmodel.FieldDefinition in project drools by kiegroup.
the class TraitTripleProxyClassBuilderImpl method buildProxyAccessors.
protected void buildProxyAccessors(BitSet mask, ClassWriter cw, String masterName, ClassDefinition core, MixinInfo mixinInfo) {
int j = 0;
for (FieldDefinition field : getTrait().getFieldsDefinitions()) {
boolean isSoftField = TraitRegistry.isSoftField(field, j++, mask);
buildProxyAccessor(cw, masterName, core, mixinInfo, field, isSoftField);
}
}
use of org.drools.core.factmodel.FieldDefinition in project drools by kiegroup.
the class TraitTripleProxyClassBuilderImpl method buildKeyedEquals.
protected void buildKeyedEquals(ClassVisitor cw, ClassDefinition classDef, String proxyType) {
MethodVisitor mv;
mv = cw.visitMethod(ACC_PUBLIC, "equals", "(" + Type.getDescriptor(Object.class) + ")Z", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
Label l0 = new Label();
mv.visitJumpInsn(IF_ACMPNE, l0);
mv.visitInsn(ICONST_1);
mv.visitInsn(IRETURN);
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 1);
Label l1 = new Label();
mv.visitJumpInsn(IFNULL, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(Object.class), "getClass", "()" + Type.getDescriptor(Class.class), false);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(Object.class), "getClass", "()" + Type.getDescriptor(Class.class), false);
Label l2 = new Label();
mv.visitJumpInsn(IF_ACMPEQ, l2);
mv.visitLabel(l1);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l2);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(CHECKCAST, proxyType);
mv.visitVarInsn(ASTORE, 2);
int x = 2;
for (FieldDefinition field : classDef.getFieldsDefinitions()) {
if (field.isKey()) {
if (!BuildUtils.isPrimitive(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
Label l11 = new Label();
mv.visitJumpInsn(IFNULL, l11);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitMethodInsn(INVOKEVIRTUAL, BuildUtils.getInternalType(field.getTypeName()), "equals", "(" + Type.getDescriptor(Object.class) + ")Z", false);
Label l12 = new Label();
mv.visitJumpInsn(IFNE, l12);
Label l13 = new Label();
mv.visitJumpInsn(GOTO, l13);
mv.visitLabel(l11);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitJumpInsn(IFNULL, l12);
mv.visitLabel(l13);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l12);
} else if ("double".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Double.class), "compare", "(DD)I", false);
Label l5 = new Label();
mv.visitJumpInsn(IFEQ, l5);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l5);
x = Math.max(x, 4);
} else if ("float".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Float.class), "compare", "(FF)I", false);
Label l6 = new Label();
mv.visitJumpInsn(IFEQ, l6);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l6);
} else if ("long".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitInsn(LCMP);
Label l8 = new Label();
mv.visitJumpInsn(IFEQ, l8);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l8);
x = Math.max(x, 4);
} else {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
Label l4 = new Label();
mv.visitJumpInsn(IF_ICMPEQ, l4);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l4);
}
}
}
mv.visitInsn(ICONST_1);
mv.visitInsn(IRETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}
use of org.drools.core.factmodel.FieldDefinition in project drools by kiegroup.
the class TraitTriplePropertyWrapperClassBuilderImpl method buildGet.
protected void buildGet(ClassVisitor cw, String wrapperName, ClassDefinition core) {
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "get", "(" + Type.getDescriptor(Object.class) + ")" + Type.getDescriptor(Object.class), null, null);
mv.visitCode();
if (core.getFieldsDefinitions().size() > 0) {
for (FieldDefinition field : core.getFieldsDefinitions()) {
invokeGet(mv, wrapperName, core, field.getName(), field);
}
}
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TripleBasedStruct.class), "get", "(" + Type.getDescriptor(Object.class) + ")" + Type.getDescriptor(Object.class), false);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}
use of org.drools.core.factmodel.FieldDefinition in project drools by kiegroup.
the class TraitTriplePropertyWrapperClassBuilderImpl method buildClear.
protected void buildClear(ClassWriter cw, String wrapperName, ClassDefinition trait, ClassDefinition core) {
String internalWrapper = BuildUtils.getInternalType(wrapperName);
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "clear", "()V", null, null);
mv.visitCode();
for (FieldDefinition field : core.getFieldsDefinitions()) {
if (field.isKey())
continue;
TraitFactory.invokeInjector(mv, wrapperName, core, field, true, 1);
}
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TripleBasedStruct.class), "clear", "()V", false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, internalWrapper, "clearSoftFields", "()V", false);
mv.visitInsn(RETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}
use of org.drools.core.factmodel.FieldDefinition in project drools by kiegroup.
the class TraitTriplePropertyWrapperClassBuilderImpl method buildRemove.
protected void buildRemove(ClassWriter cw, String wrapperName, ClassDefinition trait, ClassDefinition core, BitSet mask) {
String internalWrapper = BuildUtils.getInternalType(wrapperName);
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "remove", "(" + Type.getDescriptor(Object.class) + ")" + Type.getDescriptor(Object.class), null, null);
mv.visitCode();
int stack = 0;
for (FieldDefinition field : core.getFieldsDefinitions()) {
stack = Math.max(stack, BuildUtils.sizeOf(field.getTypeName()));
invokeRemove(mv, wrapperName, core, field.getName(), field);
}
int j = 0;
for (FieldDefinition field : trait.getFieldsDefinitions()) {
boolean isSoftField = TraitRegistry.isSoftField(field, j++, mask);
if (isSoftField) {
stack = Math.max(stack, BuildUtils.sizeOf(field.getTypeName()));
mv.visitLdcInsn(field.getName());
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(String.class), "equals", "(" + Type.getDescriptor(Object.class) + ")Z", false);
Label l2 = new Label();
mv.visitJumpInsn(IFEQ, l2);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, internalWrapper, "store", Type.getDescriptor(TripleStore.class));
mv.visitVarInsn(ALOAD, 0);
mv.visitLdcInsn(field.getName());
mv.visitMethodInsn(INVOKEVIRTUAL, internalWrapper, "propertyKey", "(" + Type.getDescriptor(Object.class) + ")" + Type.getDescriptor(Triple.class), false);
mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(TripleStore.class), "get", "(" + Type.getDescriptor(Triple.class) + ")" + Type.getDescriptor(Triple.class), false);
mv.visitVarInsn(ASTORE, 2);
mv.visitVarInsn(ALOAD, 0);
mv.visitLdcInsn(field.getName());
mv.visitInsn(BuildUtils.zero(field.getTypeName()));
if (BuildUtils.isPrimitive(field.getTypeName())) {
TraitFactory.valueOf(mv, field.getTypeName());
}
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TripleBasedStruct.class), "put", "(" + Type.getDescriptor(String.class) + Type.getDescriptor(Object.class) + ")" + Type.getDescriptor(Object.class), false);
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, 2);
mv.visitInsn(ARETURN);
mv.visitLabel(l2);
}
}
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TripleBasedStruct.class), "remove", "(" + Type.getDescriptor(Object.class) + ")" + Type.getDescriptor(Object.class), false);
mv.visitVarInsn(ASTORE, 2);
mv.visitVarInsn(ALOAD, 2);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}
Aggregations