blob: 76b3be8da63597985045de1950423bf15364a0ce [file] [log] [blame]
import 'package:colorize/colorize.dart';
import 'package:core_generator/src/definition.dart';
import 'package:core_generator/src/field_type.dart';
import 'package:core_generator/src/key.dart';
class Property {
final String name;
final FieldType type;
final Definition definition;
String initialValue;
String initialValueRuntime;
bool isVirtual = false;
bool animates = false;
String group;
Key key;
String description;
bool isNullable = false;
bool isRuntime = true;
bool isCoop = true;
bool isSetOverride = false;
bool isGetOverride = false;
bool isEncoded = false;
FieldType typeRuntime;
factory Property(Definition type, String name, Map<String, dynamic> data) {
if (data['runtime'] is bool && data['runtime'] == false) {
return null;
}
var fieldType =
FieldType.find(data['typeRuntime']) ?? FieldType.find(data['type']);
if (fieldType == null) {
color('Invalid field type ${data['type']} for $name.', front: Styles.RED);
return null;
}
return Property.make(type, name, fieldType, data);
}
Property.make(
this.definition, this.name, this.type, Map<String, dynamic> data) {
dynamic encodedValue = data['encoded'];
if (encodedValue is bool) {
isEncoded = encodedValue;
}
dynamic descriptionValue = data['description'];
if (descriptionValue is String) {
description = descriptionValue;
}
dynamic nullableValue = data['nullable'];
if (nullableValue is bool) {
isNullable = nullableValue;
}
dynamic init = data['initialValue'];
if (init is String) {
initialValue = init;
}
dynamic initRuntime = data['initialValueRuntime'];
if (initRuntime is String) {
initialValueRuntime = initRuntime;
}
dynamic overrideSet = data['overrideSet'];
if (overrideSet is bool && overrideSet) {
isSetOverride = true;
}
dynamic overrideGet = data['overrideGet'];
if (overrideGet is bool && overrideGet) {
isGetOverride = true;
}
dynamic a = data['animates'];
if (a is bool) {
animates = a;
}
dynamic virtualValue = data['virtual'];
isVirtual = virtualValue is bool && virtualValue;
dynamic g = data['group'];
if (g is String) {
group = g;
}
dynamic e = data['editorOnly'];
if (e is bool && e) {
isCoop = false;
}
dynamic r = data['runtime'];
if (r is bool) {
isRuntime = r;
}
dynamic c = data['coop'];
if (c is bool) {
isCoop = c;
}
dynamic rt = data['typeRuntime'];
if (rt is String) {
typeRuntime = FieldType.find(rt);
}
key = Key.fromJSON(data['key']) ?? Key.forProperty(this);
}
FieldType getExportType() => typeRuntime ?? type;
@override
String toString() {
return '$name(${key.intValue})';
}
String get capitalizedName => '${name[0].toUpperCase()}${name.substring(1)}'
.replaceAll('<', '')
.replaceAll('>', '');
}