mirror of
https://github.com/esiur/esiur-dart.git
synced 2025-06-27 14:53:11 +00:00
null-safety
This commit is contained in:
@ -21,7 +21,7 @@ class TemplateGenerator {
|
||||
rt.writeln("class ${className} extends IRecord {");
|
||||
|
||||
template.properties.forEach((p) {
|
||||
var ptTypeName = getTypeName(template, p.valueType, templates);
|
||||
var ptTypeName = getTypeName(template, p.valueType, templates, false);
|
||||
rt.writeln("${ptTypeName}? ${p.name};");
|
||||
rt.writeln();
|
||||
});
|
||||
@ -53,8 +53,8 @@ class TemplateGenerator {
|
||||
var descProps = template.properties.map((p) {
|
||||
var isArray = p.valueType.type & 0x80 == 0x80;
|
||||
var ptType = p.valueType.type & 0x7F;
|
||||
var ptTypeName = getTypeName(
|
||||
template, TemplateDataType(ptType, p.valueType.typeGuid), templates);
|
||||
var ptTypeName = getTypeName(template,
|
||||
TemplateDataType(ptType, p.valueType.typeGuid), templates, false);
|
||||
// return "Prop(\"${p.name}\", ${ptTypeName}, ${isArray})";
|
||||
return "Prop('${p.name}', ${ptTypeName}, ${isArray}, ${_escape(p.readExpansion)}, ${_escape(p.writeExpansion)})";
|
||||
}).join(', ');
|
||||
@ -67,17 +67,20 @@ class TemplateGenerator {
|
||||
return rt.toString();
|
||||
}
|
||||
|
||||
static String _translateClassName(String className) {
|
||||
static String _translateClassName(String className, bool nullable) {
|
||||
var cls = className.split('.');
|
||||
var nameSpace = cls.take(cls.length - 1).join('_').toLowerCase();
|
||||
return "$nameSpace.${cls.last}";
|
||||
return "$nameSpace.${cls.last}${nullable ? '?' : ''}";
|
||||
}
|
||||
|
||||
static String getTypeName(TypeTemplate forTemplate,
|
||||
TemplateDataType templateDataType, List<TypeTemplate> templates) {
|
||||
static String getTypeName(
|
||||
TypeTemplate forTemplate,
|
||||
TemplateDataType templateDataType,
|
||||
List<TypeTemplate> templates,
|
||||
bool nullable) {
|
||||
if (templateDataType.type == DataType.Resource) {
|
||||
if (templateDataType.typeGuid == forTemplate.classId)
|
||||
return forTemplate.className.split('.').last;
|
||||
return forTemplate.className.split('.').last + (nullable ? "?" : "");
|
||||
else {
|
||||
var tmp = templates.firstWhere((x) =>
|
||||
x.classId == templateDataType.typeGuid &&
|
||||
@ -86,11 +89,11 @@ class TemplateGenerator {
|
||||
|
||||
if (tmp == null) return "dynamic"; // something went wrong
|
||||
|
||||
return _translateClassName(tmp.className);
|
||||
return _translateClassName(tmp.className, nullable);
|
||||
}
|
||||
} else if (templateDataType.type == DataType.ResourceArray) {
|
||||
if (templateDataType.typeGuid == forTemplate.classId)
|
||||
return "List<${forTemplate.className.split('.').last}>";
|
||||
return "List<${forTemplate.className.split('.').last + (nullable ? '?' : '')}>";
|
||||
else {
|
||||
var tmp = templates.firstWhere((x) =>
|
||||
x.classId == templateDataType.typeGuid &&
|
||||
@ -99,27 +102,27 @@ class TemplateGenerator {
|
||||
|
||||
if (tmp == null) return "dynamic"; // something went wrong
|
||||
|
||||
return "List<${_translateClassName(tmp.className)}>";
|
||||
return "List<${_translateClassName(tmp.className, nullable)}>";
|
||||
}
|
||||
} else if (templateDataType.type == DataType.Record) {
|
||||
if (templateDataType.typeGuid == forTemplate.classId)
|
||||
return forTemplate.className.split('.').last;
|
||||
return forTemplate.className.split('.').last + (nullable ? '?' : '');
|
||||
else {
|
||||
var tmp = templates.firstWhere((x) =>
|
||||
x.classId == templateDataType.typeGuid &&
|
||||
x.type == TemplateType.Record);
|
||||
if (tmp == null) return "dynamic"; // something went wrong
|
||||
return _translateClassName(tmp.className);
|
||||
return _translateClassName(tmp.className, nullable);
|
||||
}
|
||||
} else if (templateDataType.type == DataType.RecordArray) {
|
||||
if (templateDataType.typeGuid == forTemplate.classId)
|
||||
return "List<${forTemplate.className.split('.').last}>";
|
||||
return "List<${forTemplate.className.split('.').last + (nullable ? '?' : '')}?>";
|
||||
else {
|
||||
var tmp = templates.firstWhere((x) =>
|
||||
x.classId == templateDataType.typeGuid &&
|
||||
x.type == TemplateType.Record);
|
||||
if (tmp == null) return "dynamic"; // something went wrong
|
||||
return "List<${_translateClassName(tmp.className)}>";
|
||||
return "List<${_translateClassName(tmp.className, nullable)}>";
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,13 +133,13 @@ class TemplateGenerator {
|
||||
case DataType.BoolArray:
|
||||
return "List<bool>";
|
||||
case DataType.Char:
|
||||
return "String";
|
||||
return "String" + (nullable ? "?" : "");
|
||||
case DataType.CharArray:
|
||||
return "List<String>";
|
||||
return "List<String${nullable ? '?' : ''}>";
|
||||
case DataType.DateTime:
|
||||
return "DateTime";
|
||||
case DataType.DateTimeArray:
|
||||
return "List<DateTime>";
|
||||
return "List<DateTime${nullable ? '?' : ''}>";
|
||||
case DataType.Decimal:
|
||||
return "double";
|
||||
case DataType.DecimalArray:
|
||||
@ -168,11 +171,11 @@ class TemplateGenerator {
|
||||
case DataType.String:
|
||||
return "String";
|
||||
case DataType.StringArray:
|
||||
return "List<String>";
|
||||
return "List<String${nullable ? '?' : ''}>";
|
||||
case DataType.Structure:
|
||||
return "Structure";
|
||||
return "Structure" + (nullable ? "?" : "");
|
||||
case DataType.StructureArray:
|
||||
return "List<Structure>";
|
||||
return "List<Structure${(nullable ? '?' : '')}>";
|
||||
case DataType.UInt16:
|
||||
return "int";
|
||||
case DataType.UInt16Array:
|
||||
@ -206,24 +209,24 @@ class TemplateGenerator {
|
||||
}
|
||||
|
||||
static Future<String> getTemplate(String url,
|
||||
[String dir = null,
|
||||
String username = null,
|
||||
String password = null]) async {
|
||||
[String? dir = null,
|
||||
String? username = null,
|
||||
String? password = null]) async {
|
||||
try {
|
||||
if (!_urlRegex.hasMatch(url)) throw Exception("Invalid IIP URL");
|
||||
|
||||
var path = _urlRegex.allMatches(url).first;
|
||||
var con = await Warehouse.get<DistributedConnection>(
|
||||
path[1] + "://" + path[2],
|
||||
(path[1] as String) + "://" + (path[2] as String),
|
||||
!isNullOrEmpty(username) && !isNullOrEmpty(password)
|
||||
? {username: username, password: password}
|
||||
: null);
|
||||
|
||||
if (con == null) throw Exception("Can't connect to server");
|
||||
|
||||
if (isNullOrEmpty(dir)) dir = path[2].replaceAll(":", "_");
|
||||
if (isNullOrEmpty(dir)) dir = (path[2] as String).replaceAll(":", "_");
|
||||
|
||||
var templates = await con.getLinkTemplates(path[3]);
|
||||
var templates = await con.getLinkTemplates(path[3] as String);
|
||||
|
||||
// no longer needed
|
||||
Warehouse.remove(con);
|
||||
@ -234,7 +237,7 @@ class TemplateGenerator {
|
||||
|
||||
//Map<String, String> namesMap = Map<String, String>();
|
||||
|
||||
var makeImports = (TypeTemplate skipTemplate) {
|
||||
var makeImports = (TypeTemplate? skipTemplate) {
|
||||
var imports = StringBuffer();
|
||||
imports.writeln("import 'dart:async';");
|
||||
imports.writeln("import 'package:esiur/esiur.dart';");
|
||||
@ -270,12 +273,12 @@ class TemplateGenerator {
|
||||
|
||||
var defineCreators = templates.map((tmp) {
|
||||
// creator
|
||||
var className = _translateClassName(tmp.className);
|
||||
return "Warehouse.defineCreator(${className}, () => ${className}(), () => <${className}>[]);";
|
||||
var className = _translateClassName(tmp.className, false);
|
||||
return "Warehouse.defineCreator(${className}, () => ${className}(), () => <${className}?>[]);";
|
||||
}).join("\r\n");
|
||||
|
||||
var putTemplates = templates.map((tmp) {
|
||||
var className = _translateClassName(tmp.className);
|
||||
var className = _translateClassName(tmp.className, false);
|
||||
return "Warehouse.putTemplate(TypeTemplate.fromType(${className}));";
|
||||
}).join("\r\n");
|
||||
|
||||
@ -291,7 +294,7 @@ class TemplateGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
static String _escape(String str) {
|
||||
static String _escape(String? str) {
|
||||
if (str == null)
|
||||
return "null";
|
||||
else
|
||||
@ -316,10 +319,11 @@ class TemplateGenerator {
|
||||
rt.writeln("}");
|
||||
|
||||
template.functions.forEach((f) {
|
||||
var rtTypeName = getTypeName(template, f.returnType, templates);
|
||||
var rtTypeName = getTypeName(template, f.returnType, templates, true);
|
||||
rt.write("AsyncReply<$rtTypeName> ${f.name}(");
|
||||
rt.write(f.arguments
|
||||
.map((x) => getTypeName(template, x.type, templates) + " " + x.name)
|
||||
.map((x) =>
|
||||
getTypeName(template, x.type, templates, true) + " " + x.name)
|
||||
.join(","));
|
||||
|
||||
rt.writeln(") {");
|
||||
@ -333,14 +337,14 @@ class TemplateGenerator {
|
||||
});
|
||||
|
||||
template.properties.forEach((p) {
|
||||
var ptTypeName = getTypeName(template, p.valueType, templates);
|
||||
var ptTypeName = getTypeName(template, p.valueType, templates, true);
|
||||
rt.writeln("${ptTypeName} get ${p.name} { return get(${p.index}); }");
|
||||
rt.writeln(
|
||||
"set ${p.name}(${ptTypeName} value) { set(${p.index}, value); }");
|
||||
});
|
||||
|
||||
template.events.forEach((e) {
|
||||
var etTypeName = getTypeName(template, e.argumentType, templates);
|
||||
var etTypeName = getTypeName(template, e.argumentType, templates, true);
|
||||
|
||||
rt.writeln(
|
||||
"final _${e.name}Controller = StreamController<$etTypeName>();");
|
||||
@ -353,22 +357,22 @@ class TemplateGenerator {
|
||||
var descProps = template.properties.map((p) {
|
||||
var isArray = p.valueType.type & 0x80 == 0x80;
|
||||
var ptType = p.valueType.type & 0x7F;
|
||||
var ptTypeName = getTypeName(
|
||||
template, TemplateDataType(ptType, p.valueType.typeGuid), templates);
|
||||
var ptTypeName = getTypeName(template,
|
||||
TemplateDataType(ptType, p.valueType.typeGuid), templates, false);
|
||||
return "Prop('${p.name}', ${ptTypeName}, ${isArray}, ${_escape(p.readExpansion)}, ${_escape(p.writeExpansion)})";
|
||||
}).join(', ');
|
||||
|
||||
var descFuncs = template.functions.map((f) {
|
||||
var isArray = f.returnType.type & 0x80 == 0x80;
|
||||
var ftType = f.returnType.type & 0x7F;
|
||||
var ftTypeName = getTypeName(
|
||||
template, TemplateDataType(ftType, f.returnType.typeGuid), templates);
|
||||
var ftTypeName = getTypeName(template,
|
||||
TemplateDataType(ftType, f.returnType.typeGuid), templates, false);
|
||||
|
||||
var args = f.arguments.map((a) {
|
||||
var isArray = a.type.type & 0x80 == 0x80;
|
||||
var atType = a.type.type & 0x7F;
|
||||
var atTypeName = getTypeName(
|
||||
template, TemplateDataType(atType, a.type.typeGuid), templates);
|
||||
var atTypeName = getTypeName(template,
|
||||
TemplateDataType(atType, a.type.typeGuid), templates, false);
|
||||
return "Arg('${a.name}', ${atTypeName}, ${isArray})";
|
||||
}).join(', ');
|
||||
|
||||
@ -379,7 +383,7 @@ class TemplateGenerator {
|
||||
var isArray = e.argumentType.type & 0x80 == 0x80;
|
||||
var etType = e.argumentType.type & 0x7F;
|
||||
var etTypeName = getTypeName(template,
|
||||
TemplateDataType(etType, e.argumentType.typeGuid), templates);
|
||||
TemplateDataType(etType, e.argumentType.typeGuid), templates, false);
|
||||
return "Evt('${e.name}', ${etTypeName}, ${isArray}, ${e.listenable}, ${_escape(e.expansion)})";
|
||||
}).join(', ');
|
||||
|
||||
|
Reference in New Issue
Block a user