public void execute()
{
methodGen.setMaxLocals();
methodGen.setMaxStack();
BCELMember targetField = fieldConfig.getEnhanceField();
Type smType = BCELUtils.getJDOMethodType(targetField.getType());
Type nativeType = targetField.getType();
String fieldName;
if(!((AbstractMemberMetaData)fieldConfig).isProperty())
{
fieldName = targetField.getName();
}
else
{
fieldName = ClassUtils.getFieldNameForJavaBeanGetter(targetField.getName());
}
InstructionHandle jumpTarget;
BranchInstruction jump1 = null;
if( (fieldConfig.getJdoFieldFlag() & PersistenceCapable.CHECK_READ) == PersistenceCapable.CHECK_READ)
{
il.append(InstructionConstants.ALOAD_0);
il.append(factory.createGetField(className, ClassEnhancer.FN_Flag, Type.BYTE));
jump1 = new IFEQ(null);
il.append(jump1);
}
il.append(InstructionConstants.ALOAD_0);
il.append(factory.createGetField(className, ClassEnhancer.FN_StateManager, BCELClassEnhancer.OT_StateManager));
BranchInstruction jump2 = new IFNULL(null);
il.append(jump2);
il.append(InstructionConstants.ALOAD_0);
il.append(factory.createGetField(className, ClassEnhancer.FN_StateManager, BCELClassEnhancer.OT_StateManager));
il.append(InstructionConstants.ALOAD_0);
il.append(BCELUtils.getBIPUSH(fieldConfig.getFieldId()));
if (cmd.getPersistenceCapableSuperclass() != null)
{
il.append(factory.createGetStatic(className, ClassEnhancer.FN_JdoInheritedFieldCount, Type.INT));
il.append(InstructionConstants.IADD);
}
il.append(factory.createInvoke(ClassEnhancer.CN_StateManager, "isLoaded", Type.BOOLEAN,
new Type[]{BCELClassEnhancer.OT_PersistenceCapable, Type.INT}, Constants.INVOKEINTERFACE));
BranchInstruction jump3 = new IFNE(null);
il.append(jump3);
// statemanager.getXXXfield();
il.append(InstructionConstants.ALOAD_0);
il.append(factory.createGetField(className, ClassEnhancer.FN_StateManager, BCELClassEnhancer.OT_StateManager));
il.append(InstructionConstants.ALOAD_0);
il.append(BCELUtils.getBIPUSH(fieldConfig.getFieldId()));
if (cmd.getPersistenceCapableSuperclass() != null)
{
il.append(factory.createGetStatic(className, ClassEnhancer.FN_JdoInheritedFieldCount, Type.INT));
il.append(InstructionConstants.IADD);
}
//jdoGetXXX
il.append(InstructionConstants.ALOAD_0);
il.append(factory.createInvoke(
className,
"jdo"+BCELUtils.getGetterName(fieldName),
nativeType,
new Type[] {},
Constants.INVOKEVIRTUAL));
il.append(factory.createInvoke(ClassEnhancer.CN_StateManager, "get" + BCELUtils.getJDOMethodName(targetField.getType()) + "Field",
smType, new Type[]{BCELClassEnhancer.OT_PersistenceCapable, Type.INT, smType}, Constants.INVOKEINTERFACE));
if (nativeType instanceof ReferenceType)
{
String type = null;