LocalVariable localVariable = new LocalVariable(localName, fieldType);
LocalVariableDeclaration localDeclaration = new LocalVariableDeclaration(localVariable);
javaMethod.addStatement(localDeclaration);
Assignment localAssignment = new Assignment(localVariable, field);
InstanceOf checkType = new InstanceOf(localAssignment, JavaTypeNames.RTRESULT_FUNCTION);
MethodInvocation getValue = new MethodInvocation.Instance(localVariable, "getValue", JavaTypeNames.RTVALUE, MethodInvocation.InvocationType.VIRTUAL);
Assignment fieldAssignment = new Assignment(field, getValue);
ReturnStatement returnNewVal = new ReturnStatement(fieldAssignment);
IfThenElseStatement ifThen = new IfThenElseStatement(checkType, returnNewVal);
javaMethod.addStatement(ifThen);
javaMethod.addStatement(new ReturnStatement (localVariable));
} else {
javaMethod.addStatement(new ReturnStatement (field));
}
}
} else {
// This class should throw an error for any access. The methods will
// be overridden by derived classes for each data constructor.
// We can simply call the method badFieldAccessor() implemented in
// RTCons.
MethodInvocation mi =
new MethodInvocation.Instance(
null,
"badFieldAccessor",
LiteralWrapper.make(fieldName),
JavaTypeName.STRING,