SpeedoField sp,
int nbField,
Map ctx) throws SpeedoException {
SpeedoClass moClass = sp.moClass;
f.name = sp.name;
TypedElement te = moClass.jormclass.getTypedElement(f.name);
f.type = sp.type();
f.jvmType = sp.type;
f.nameUpperFirst = Character.toUpperCase(f.name.charAt(0))
+ f.name.substring(1);
f.number = sp.number;
f.getter = NamingRules.getterName(sp.moClass, sp.name);
f.setter = NamingRules.setterName(sp.moClass, sp.name);
f.isClassical = isClassicalType(sp.type());
f.modifier = sp.modifier();
f.isKey = sp.primaryKey;
f.jormmeth = jormTools.upperFL(te.getName());
f.jormfield = te.getName();
f.isNotauthorizedToBeNull = (sp.nullValue == SpeedoNullValue.EXCEPTION);
f.declaration = sp.publicSignature();
f.defaultFetchGroup = sp.defaultFetchGroup;
String cacheName = sp.getExtensionValueByKey(SpeedoProperties.USER_CACHE);
if (cacheName != null) {
f.userCacheNames = Collections.singleton(cacheName);
} else {
f.userCacheNames = Collections.EMPTY_SET;
}
// looks for identity type of the field and tests if it is an array
Type fieldType = Type.getReturnType(sp.type);
if (!f.isClassical && fieldType.getSort() == Type.OBJECT) {
SpeedoClass jdoclass = scp.smi.getSpeedoClass(
fieldType.getClassName(),
sp.moClass.moPackage.xmlDescriptor);
if (jdoclass != null) {
f.isContainerId = jdoclass.identity.isDataStore();
} else {
f.isContainerId = true;
}
f.isArray = false;
} else {
f.isArray = sp.jdoTuple instanceof SpeedoArray;
}
f.jormMeth = jormTools.upperFL(f.name);
//Field Id
f.jormFieldIdLongPos = sp.number / 64;
f.jormFieldId = 1L << (sp.number % 64);
f.jormFielIdDecl = "new long[]{";
String sep = "";
for (int i = 0; i <= (nbField / 64); i++) {
f.jormFielIdDecl += sep + (i == f.jormFieldIdLongPos
? f.jormFieldId + "L" : "0L");
sep = ", ";
}
f.jormFielIdDecl += "}";
f.isReference = jormTools.isReference(te);
if (f.isReference) { //reference field
fillReferenceInfo(f, sp, te, ctx, fieldType);
} else { //primitive field
f.jormType = te.getType().getJavaName();
f.memoryType = sp.type();
f.jormcast = sp.type();
f.toMemory = "val";
if (te.getType().getTypeCode() == PType.TYPECODE_SERIALIZED) {
f.toMemory = "(" + f.memoryType + ")" + f.toMemory;
}
f.toStorage = f.name;
fillUserFieldMappingInfo(f, sp);
}