mirror of
				https://github.com/esiur/esiur-dart.git
				synced 2025-10-30 23:31:36 +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