2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2026-04-02 09:38:20 +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

@@ -3,32 +3,30 @@ import '../../Data/BinaryList.dart';
import "../../Data/ParseResult.dart";
import './TemplateDataType.dart';
class ArgumentTemplate
{
String name;
class ArgumentTemplate {
String name;
TemplateDataType type;
TemplateDataType type;
static ParseResult<ArgumentTemplate> parse(DC data, int offset)
{
var cs = data[offset++];
var name = data.getString(offset, cs);
offset += cs;
var tdr = TemplateDataType.parse(data, offset);
static ParseResult<ArgumentTemplate> parse(DC data, int offset) {
var cs = data[offset++];
var name = data.getString(offset, cs);
offset += cs;
var tdr = TemplateDataType.parse(data, offset);
return ParseResult<ArgumentTemplate>(cs + 1 + tdr.size, ArgumentTemplate(name, tdr.value));
}
ArgumentTemplate(this.name, this.type);
DC compose()
{
var name = DC.stringToBytes(this.name);
return new BinaryList()
.addUint8(name.length)
.addDC(name)
.addDC(type.compose())
.toDC();
}
return ParseResult<ArgumentTemplate>(
cs + 1 + tdr.size, ArgumentTemplate(name, tdr.value));
}
ArgumentTemplate(this.name, this.type);
DC compose() {
var name = DC.stringToBytes(this.name);
return (BinaryList()
..addUint8(name.length)
..addDC(name)
..addDC(type.compose()))
.toDC();
}
}

View File

@@ -6,7 +6,7 @@ import 'MemberType.dart';
import 'TemplateDataType.dart';
class EventTemplate extends MemberTemplate {
String expansion;
String? expansion;
bool listenable;
TemplateDataType argumentType;
@@ -14,21 +14,21 @@ class EventTemplate extends MemberTemplate {
var name = super.compose();
if (expansion != null) {
var exp = DC.stringToBytes(expansion);
return new BinaryList()
.addUint8(listenable ? 0x58 : 0x50)
.addUint8(name.length)
.addDC(name)
.addDC(argumentType.compose())
.addInt32(exp.length)
.addDC(exp)
var exp = DC.stringToBytes(expansion as String);
return (BinaryList()
..addUint8(listenable ? 0x58 : 0x50)
..addUint8(name.length)
..addDC(name)
..addDC(argumentType.compose())
..addInt32(exp.length)
..addDC(exp))
.toDC();
} else {
return new BinaryList()
.addUint8(listenable ? 0x48 : 0x40)
.addUint8(name.length)
.addDC(name)
.addDC(argumentType.compose())
return (BinaryList()
..addUint8(listenable ? 0x48 : 0x40)
..addUint8(name.length)
..addDC(name)
..addDC(argumentType.compose()))
.toDC();
}
}

View File

@@ -7,8 +7,8 @@ import 'ArgumentTemplate.dart';
import 'TemplateDataType.dart';
class FunctionTemplate extends MemberTemplate {
String expansion;
bool isVoid;
String? expansion;
// bool isVoid;
TemplateDataType returnType;
List<ArgumentTemplate> arguments;
@@ -18,10 +18,10 @@ class FunctionTemplate extends MemberTemplate {
var name = super.compose();
var bl = new BinaryList()
.addUint8(name.length)
.addDC(name)
.addDC(returnType.compose())
.addUint8(arguments.length);
..addUint8(name.length)
..addDC(name)
..addDC(returnType.compose())
..addUint8(arguments.length);
for (var i = 0; i < arguments.length; i++)
bl.addDC(arguments[i].compose());
@@ -29,9 +29,9 @@ class FunctionTemplate extends MemberTemplate {
if (expansion != null)
{
var exp = DC.stringToBytes(expansion);
bl.addInt32(exp.length)
.addDC(exp);
var exp = DC.stringToBytes(expansion as String);
bl..addInt32(exp.length)
..addDC(exp);
bl.insertUint8(0, 0x10);
}
else
@@ -41,9 +41,9 @@ class FunctionTemplate extends MemberTemplate {
}
FunctionTemplate(TypeTemplate template, int index, String name,
this.arguments, this.returnType, String expansion)
this.arguments, this.returnType, this.expansion)
: super(template, MemberType.Property, index, name) {
this.isVoid = isVoid;
this.expansion = expansion;
}
}

View File

@@ -17,12 +17,8 @@ class MemberTemplate
TypeTemplate get template => _template;
MemberTemplate(TypeTemplate template, MemberType type, int index, String name)
MemberTemplate(this._template, this._type, this._index, this._name)
{
this._template = template;
this._type = type;
this._index = index;
this._name = name;
}
String get fullname => _template.className + "." + _name;

View File

@@ -14,63 +14,59 @@ class PropertyTemplate extends MemberTemplate {
int storage;
String readExpansion;
String? readExpansion;
String writeExpansion;
String? writeExpansion;
DC compose() {
var name = super.compose();
var pv = ((permission) << 1) | (storage == StorageMode.Recordable ? 1 : 0);
if (writeExpansion != null && readExpansion != null) {
var rexp = DC.stringToBytes(readExpansion);
var wexp = DC.stringToBytes(writeExpansion);
return new BinaryList()
.addUint8(0x38 | pv)
.addUint8(name.length)
.addDC(name)
.addDC(valueType.compose())
.addInt32(wexp.length)
.addDC(wexp)
.addInt32(rexp.length)
.addDC(rexp)
var rexp = DC.stringToBytes(readExpansion as String);
var wexp = DC.stringToBytes(writeExpansion as String);
return (BinaryList()
..addUint8(0x38 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose())
..addInt32(wexp.length)
..addDC(wexp)
..addInt32(rexp.length)
..addDC(rexp))
.toDC();
} else if (writeExpansion != null) {
var wexp = DC.stringToBytes(writeExpansion);
return new BinaryList()
.addUint8(0x30 | pv)
.addUint8(name.length)
.addDC(name)
.addDC(valueType.compose())
.addInt32(wexp.length)
.addDC(wexp)
var wexp = DC.stringToBytes(writeExpansion as String);
return (BinaryList()
..addUint8(0x30 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose())
..addInt32(wexp.length)
..addDC(wexp))
.toDC();
} else if (readExpansion != null) {
var rexp = DC.stringToBytes(readExpansion);
return new BinaryList()
.addUint8(0x28 | pv)
.addUint8(name.length)
.addDC(name)
.addDC(valueType.compose())
.addInt32(rexp.length)
.addDC(rexp)
var rexp = DC.stringToBytes(readExpansion as String);
return (BinaryList()
..addUint8(0x28 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose())
..addInt32(rexp.length)
..addDC(rexp))
.toDC();
} else
return new BinaryList()
.addUint8(0x20 | pv)
.addUint8(name.length)
.addDC(name)
.addDC(valueType.compose())
return (BinaryList()
..addUint8(0x20 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose()))
.toDC();
}
PropertyTemplate(TypeTemplate template, int index, String name,
TemplateDataType valueType, String read, String write, int storage)
this.valueType, this.readExpansion, this.writeExpansion, this.storage)
: super(template, MemberType.Property, index, name) {
//this.Recordable = recordable;
this.storage = storage;
this.readExpansion = read;
this.writeExpansion = write;
this.valueType = valueType;
}
}

View File

@@ -16,11 +16,12 @@ import '../../Resource/Warehouse.dart';
import 'TemplateType.dart';
class TemplateDataType {
int type;
TypeTemplate get typeTemplate =>
typeGuid == null ? null : Warehouse.getTemplateByClassId(typeGuid);
late int type;
TypeTemplate? get typeTemplate => typeGuid == null
? null
: Warehouse.getTemplateByClassId(typeGuid as Guid);
Guid typeGuid;
Guid? typeGuid;
// @TODO: implement fromType
TemplateDataType.fromType(type, bool isArray) {
@@ -98,7 +99,10 @@ class TemplateDataType {
type == DataType.ResourceArray ||
type == DataType.Record ||
type == DataType.RecordArray) {
return BinaryList().addUint8(type).addDC(typeGuid.value).toDC();
return (BinaryList()
..addUint8(type)
..addDC((typeGuid as Guid).value))
.toDC();
} else
return DC.fromList([type]);
}

View File

@@ -1,9 +1,9 @@
import '../../Data/DataType.dart';
class TemplateDescriber {
final List<Prop> properties;
final List<Evt> events;
final List<Func> functions;
final List<Prop>? properties;
final List<Evt>? events;
final List<Func>? functions;
final String nameSpace;
final int version;
@@ -47,8 +47,8 @@ class Prop {
final String name;
final Type type;
final bool isArray;
final String readAnnotation;
final String writeAnnotation;
final String? readAnnotation;
final String? writeAnnotation;
Prop(this.name, this.type, this.isArray,
[this.readAnnotation = null, this.writeAnnotation = null]);
}
@@ -58,7 +58,7 @@ class Evt {
final bool listenable;
final Type type;
final bool isArray;
final String annotation;
final String? annotation;
Evt(this.name, this.type, this.isArray,
[this.listenable = false, this.annotation]);
@@ -69,7 +69,7 @@ class Func {
final Type returnType;
final List<Arg> argsType;
final bool isArray;
final String annotation;
final String? annotation;
Func(this.name, this.returnType, this.isArray, this.argsType,
[this.annotation = null]);

View File

@@ -22,26 +22,26 @@ import 'TemplateDataType.dart';
import 'TemplateType.dart';
class TypeTemplate {
Guid _classId;
String _className;
late Guid _classId;
late String _className;
List<MemberTemplate> _members = [];
List<FunctionTemplate> _functions = [];
List<EventTemplate> _events = [];
List<PropertyTemplate> _properties = [];
int _version;
late int _version;
//bool isReady;
TemplateType _templateType;
late TemplateType _templateType;
DC _content;
late DC _content;
DC get content => _content;
TemplateType get type => _templateType;
Type _definedType;
Type? _definedType;
Type get definedType => _definedType;
Type? get definedType => _definedType;
/*
MemberTemplate getMemberTemplate(MemberInfo member)
{
@@ -59,32 +59,32 @@ class TypeTemplate {
//@TODO: implement
static List<TypeTemplate> getDependencies(TypeTemplate template) => [];
EventTemplate getEventTemplateByName(String eventName) {
EventTemplate? getEventTemplateByName(String eventName) {
for (var i in _events) if (i.name == eventName) return i;
return null;
}
EventTemplate getEventTemplateByIndex(int index) {
EventTemplate? getEventTemplateByIndex(int index) {
for (var i in _events) if (i.index == index) return i;
return null;
}
FunctionTemplate getFunctionTemplateByName(String functionName) {
FunctionTemplate? getFunctionTemplateByName(String functionName) {
for (var i in _functions) if (i.name == functionName) return i;
return null;
}
FunctionTemplate getFunctionTemplateByIndex(int index) {
FunctionTemplate? getFunctionTemplateByIndex(int index) {
for (var i in _functions) if (i.index == index) return i;
return null;
}
PropertyTemplate getPropertyTemplateByIndex(int index) {
PropertyTemplate? getPropertyTemplateByIndex(int index) {
for (var i in _properties) if (i.index == index) return i;
return null;
}
PropertyTemplate getPropertyTemplateByName(String propertyName) {
PropertyTemplate? getPropertyTemplateByName(String propertyName) {
for (var i in _properties) if (i.name == propertyName) return i;
return null;
}
@@ -143,9 +143,11 @@ class TypeTemplate {
if (addToWarehouse) Warehouse.putTemplate(this);
// _templates.add(template.classId, template);
if (describer.properties != null)
for (var i = 0; i < describer.properties.length; i++) {
var pi = describer.properties[i];
if (describer.properties != null) {
var props = describer.properties as List<Prop>;
for (var i = 0; i < props.length; i++) {
var pi = props[i];
var pt = PropertyTemplate(
this,
i,
@@ -156,10 +158,13 @@ class TypeTemplate {
0);
properties.add(pt);
}
}
if (describer.functions != null)
for (var i = 0; i < describer.functions.length; i++) {
var fi = describer.functions[i];
if (describer.functions != null) {
var funcs = describer.functions as List<Func>;
for (var i = 0; i < funcs.length; i++) {
var fi = funcs[i];
List<ArgumentTemplate> args = fi.argsType
.map((arg) => ArgumentTemplate(
@@ -176,10 +181,12 @@ class TypeTemplate {
functions.add(ft);
}
}
if (describer.events != null)
for (var i = 0; i < describer.events.length; i++) {
var ei = describer.events[i];
if (describer.events != null) {
var evts = describer.events as List<Evt>;
for (var i = 0; i < evts.length; i++) {
var ei = evts[i];
var et = new EventTemplate(
this,
@@ -191,6 +198,7 @@ class TypeTemplate {
events.add(et);
}
}
// append signals
events.forEach(_members.add);
@@ -200,14 +208,13 @@ class TypeTemplate {
properties.forEach(_members.add);
// bake it binarily
var b = new BinaryList();
b
.addUint8(_templateType.index)
.addGuid(classId)
.addUint8(className.length)
.addString(className)
.addInt32(_version)
.addUint16(_members.length);
var b = BinaryList()
..addUint8(_templateType.index)
..addGuid(classId)
..addUint8(className.length)
..addString(className)
..addInt32(_version)
..addUint16(_members.length);
functions.forEach((ft) => b.addDC(ft.compose()));
properties.forEach((pt) => b.addDC(pt.compose()));
@@ -429,7 +436,7 @@ class TypeTemplate {
*/
TypeTemplate.parse(DC data, [int offset = 0, int contentLength]) {
TypeTemplate.parse(DC data, [int offset = 0, int? contentLength]) {
// cool Dart feature
contentLength ??= data.length;
@@ -464,7 +471,7 @@ class TypeTemplate {
if (type == 0) // function
{
String expansion = null;
String? expansion = null;
var hasExpansion = ((data[offset++] & 0x10) == 0x10);
var name = data.getString(offset + 1, data[offset]);
@@ -497,7 +504,7 @@ class TypeTemplate {
_functions.add(ft);
} else if (type == 1) // property
{
String readExpansion = null, writeExpansion = null;
String? readExpansion = null, writeExpansion = null;
var hasReadExpansion = ((data[offset] & 0x8) == 0x8);
var hasWriteExpansion = ((data[offset] & 0x10) == 0x10);
@@ -539,7 +546,7 @@ class TypeTemplate {
_properties.add(pt);
} else if (type == 2) // Event
{
String expansion = null;
String? expansion = null;
var hasExpansion = ((data[offset] & 0x10) == 0x10);
var listenable = ((data[offset++] & 0x8) == 0x8);