getFieldInitializationValue method

String? getFieldInitializationValue(
  1. TypeInfo fieldType,
  2. 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;
  }
}