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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user