2
0
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:
2021-07-24 13:12:43 +03:00
parent 6be04c39ed
commit 614c6853e3
48 changed files with 3022 additions and 3320 deletions

View File

@ -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(', ');