getFieldInitializationValue method
String?
getFieldInitializationValue(
- TypeInfo fieldType,
- FieldElement field
)
Implementation
String? getFieldInitializationValue(TypeInfo fieldType, FieldElement field) {
if (field.getter == null) {
return null;
}
switch (elementInjectionType(field.getter!)) {
case '@Inject':
if (fieldType.fullName == 'SubtypesOf') {
TypeInfo type = fieldType.typeArguments[0];
typeMap.subtypesOf[type.uniqueName] = type;
return '\$om.subtypesOf${type.flatName}';
} else {
return typeMap.generateTypeGetter(fieldType);
}
case '@InjectConfig':
if (!typeConfig.containsKey(field.name)) {
if (field.getter!.isAbstract) {
if (!fieldType.isNullable) {
throw Exception(
"missing config value for non nullable field ${fieldType.fullName} ${field.name}",
);
}
return 'null';
} else {
return null;
}
}
switch (fieldType.uniqueName) {
case "String":
case "String?":
return '"${typeConfig[field.name].replaceAll('"', '\\"').replaceAll('\n', '\\n')}"';
case "int":
case "double":
case "bool":
case "int?":
case "double?":
case "bool?":
return typeConfig[field.name].toString();
case "List<String>":
return '[${typeConfig[field.name].map((e) => '"${e.replaceAll('"', '\\"').replaceAll('\n', '\\n')}"').join(',')}]';
case "Map<dynamic,dynamic>?":
return jsonEncode(typeConfig[field.name]);
case "Map<dynamic,dynamic>":
return jsonEncode(typeConfig[field.name]);
default:
//TODO: check why fieldType.type.isDartCoreEnum does not return true for enums here
var value = typeConfig[field.name];
//element is null for such types so this is a workaround
if (fieldType.element == null /*fieldType.type.isDartCoreEnum*/ ) {
if (value is int) {
return '${fieldType.uniqueName}.values.length > ${value.toString()} ? ${fieldType.uniqueName}.values[${value.toString()}] : ${fieldType.uniqueName}.values[0]';
} else {
return '${fieldType.uniqueName}.$value';
}
}
if (value is String) {
return 'new ${fieldType.fullName}.fromString("$value")';
} else {
return null;
}
}
case '@InjectInstances':
TypeInfo type = fieldType.typeArguments[1];
typeMap.subtypeInstanes[type.uniqueName] = type;
return '\$om.instancesOf${type.flatName}';
case '@InjectClassName':
return classCodeAsReference;
case '@InjectClassNames':
List<String> path = [];
for (var type in allTypeInfoPath()) {
if (field.enclosingElement == type.element) break;
path.add(type.classCodeAsReference);
}
return '[${path.reversed.join(',')}]';
default:
return null;
}
}