Fix type lost caused by incorrect inheritance of ClassArray

This commit is contained in:
József Farkas
2016-04-23 23:45:05 +02:00
parent 5a123d55c2
commit b9b2fcbf84
14 changed files with 32 additions and 38 deletions

View File

@@ -1,18 +1,18 @@
import {Serializable} from './Serializable';
import {UhkBuffer} from './UhkBuffer';
export abstract class ClassArray<T> extends Serializable<T> {
export abstract class ClassArray<T extends Serializable<T>> extends Serializable<ClassArray<T>> {
elements: Serializable<T>[] = [];
elements: T[] = [];
_fromJsObject(jsObjects: any): Serializable<T> {
_fromJsObject(jsObjects: any): ClassArray<T> {
for (let jsObject of jsObjects) {
this.elements.push(this.jsObjectToClass(jsObject));
}
return this;
}
_fromBinary(buffer: UhkBuffer): Serializable<T> {
_fromBinary(buffer: UhkBuffer): ClassArray<T> {
let arrayLength = buffer.readCompactLength();
if (buffer.enableDump) {
@@ -49,6 +49,6 @@ export abstract class ClassArray<T> extends Serializable<T> {
return `<${this.constructor.name} length="${this.elements.length}">`;
}
abstract jsObjectToClass(jsObject: any): Serializable<T>;
abstract binaryToClass(buffer: UhkBuffer): Serializable<T>;
abstract jsObjectToClass(jsObject: any): T;
abstract binaryToClass(buffer: UhkBuffer): T;
}

View File

@@ -8,7 +8,7 @@ export abstract class Serializable<T> {
private static maxDisplayedJsonLength = 160;
private static enableDump = true;
fromJsObject(jsObject: any): Serializable<T> {
fromJsObject(jsObject: any): T {
this.dump(`${this.getIndentation()}${this.constructor.name}.fromJsObject: ` +
`${this.strintifyJsObject(jsObject)}\n`);
Serializable.depth++;
@@ -18,7 +18,7 @@ export abstract class Serializable<T> {
return value;
}
fromBinary(buffer: UhkBuffer): Serializable<T> {
fromBinary(buffer: UhkBuffer): T {
this.dump(`\n${this.getIndentation()}${this.constructor.name}.fromBinary: [`);
Serializable.depth++;
buffer.enableDump = Serializable.enableDump;
@@ -38,6 +38,7 @@ export abstract class Serializable<T> {
return value;
}
// TODO: remove parameter and return the buffer
toBinary(buffer: UhkBuffer): void {
this.dump(`\n${this.getIndentation()}${this.constructor.name}.toBinary: ${this} [`);
Serializable.depth++;
@@ -49,8 +50,8 @@ export abstract class Serializable<T> {
return value;
}
abstract _fromJsObject(jsObject: any): Serializable<T>;
abstract _fromBinary(buffer: UhkBuffer): Serializable<T>;
abstract _fromJsObject(jsObject: any): T;
abstract _fromBinary(buffer: UhkBuffer): T;
abstract _toJsObject(): any;
abstract _toBinary(buffer: UhkBuffer): void;

View File

@@ -1,6 +1,5 @@
import {ClassArray} from '../ClassArray';
import {UhkBuffer} from '../UhkBuffer';
import {Serializable} from '../Serializable';
import {DualRoleKeystrokeAction} from './DualRoleKeystrokeAction';
import {NoneAction} from './NoneAction';
import {KeystrokeAction} from './KeystrokeAction';
@@ -14,7 +13,7 @@ import {PlayMacroAction} from './PlayMacroAction';
export class KeyActions extends ClassArray<KeyAction> {
jsObjectToClass(jsObject: any): Serializable<KeyAction> {
jsObjectToClass(jsObject: any): KeyAction {
switch (jsObject.keyActionType) {
case keyActionType.NoneAction:
return new NoneAction().fromJsObject(jsObject);
@@ -39,7 +38,7 @@ export class KeyActions extends ClassArray<KeyAction> {
}
}
binaryToClass(buffer: UhkBuffer): Serializable<KeyAction> {
binaryToClass(buffer: UhkBuffer): KeyAction {
let keyActionFirstByte = buffer.readUInt8();
buffer.backtrack();

View File

@@ -13,7 +13,7 @@ export class KeyMap extends Serializable<KeyMap> {
isDefault: boolean;
layers: Serializable<Layers>;
layers: Layers;
_fromJsObject(jsObject: any): KeyMap {
this.id = jsObject.id;

View File

@@ -1,15 +1,14 @@
import {ClassArray} from '../ClassArray';
import {Serializable} from '../Serializable';
import {UhkBuffer} from '../UhkBuffer';
import {KeyMap} from './KeyMap';
export class KeyMaps extends ClassArray<KeyMap> {
jsObjectToClass(jsObject: any): Serializable<KeyMap> {
jsObjectToClass(jsObject: any): KeyMap {
return new KeyMap().fromJsObject(jsObject);
}
binaryToClass(buffer: UhkBuffer): Serializable<KeyMap> {
binaryToClass(buffer: UhkBuffer): KeyMap {
return new KeyMap().fromBinary(buffer);
}

View File

@@ -4,7 +4,7 @@ import {UhkBuffer} from '../UhkBuffer';
export class Layer extends Serializable<Layer> {
modules: Serializable<Modules>;
modules: Modules;
_fromJsObject(jsObject: any): Layer {
this.modules = new Modules().fromJsObject(jsObject.modules);

View File

@@ -1,15 +1,14 @@
import {ClassArray} from '../ClassArray';
import {Serializable} from '../Serializable';
import {UhkBuffer} from '../UhkBuffer';
import {Layer} from './Layer';
export class Layers extends ClassArray<Layer> {
jsObjectToClass(jsObject: any): Serializable<Layer> {
jsObjectToClass(jsObject: any): Layer {
return new Layer().fromJsObject(jsObject);
}
binaryToClass(buffer: UhkBuffer): Serializable<Layer> {
binaryToClass(buffer: UhkBuffer): Layer {
return new Layer().fromBinary(buffer);
}

View File

@@ -13,7 +13,7 @@ export class Macro extends Serializable<Macro> {
name: string;
macroActions: Serializable<MacroActions>;
macroActions: MacroActions;
_fromJsObject(jsObject: any): Macro {
this.id = jsObject.id;

View File

@@ -1,5 +1,4 @@
import {ClassArray} from '../ClassArray';
import {Serializable} from '../Serializable';
import {UhkBuffer} from '../UhkBuffer';
import {DelayMacroAction} from './DelayMacroAction';
import {MacroAction, macroActionType, MacroActionId} from './MacroAction';
@@ -18,7 +17,7 @@ import {TextMacroAction} from './TextMacroAction';
export class MacroActions extends ClassArray<MacroAction> {
jsObjectToClass(jsObject: any): Serializable<MacroAction> {
jsObjectToClass(jsObject: any): MacroAction {
switch (jsObject.macroActionType) {
case macroActionType.PressKeyMacroAction:
return new PressKeyMacroAction().fromJsObject(jsObject);
@@ -51,7 +50,7 @@ export class MacroActions extends ClassArray<MacroAction> {
}
}
binaryToClass(buffer: UhkBuffer): Serializable<MacroAction> {
binaryToClass(buffer: UhkBuffer): MacroAction {
let macroActionFirstByte = buffer.readUInt8();
buffer.backtrack();

View File

@@ -1,15 +1,14 @@
import {ClassArray} from '../ClassArray';
import {Serializable} from '../Serializable';
import {Macro} from './Macro';
import {UhkBuffer} from '../UhkBuffer';
export class Macros extends ClassArray<Macro> {
jsObjectToClass(jsObject: any): Serializable<Macro> {
jsObjectToClass(jsObject: any): Macro {
return new Macro().fromJsObject(jsObject);
}
binaryToClass(buffer: UhkBuffer): Serializable<Macro> {
binaryToClass(buffer: UhkBuffer): Macro {
return new Macro().fromBinary(buffer);
}

View File

@@ -13,7 +13,7 @@ export class Module extends Serializable<Module> {
// @assertUInt8
id: number;
keyActions: Serializable<KeyActions>;
keyActions: KeyActions;
// @assertEnum(PointerRole)
private pointerRole: PointerRole;

View File

@@ -1,15 +1,14 @@
import {ClassArray} from '../ClassArray';
import {Serializable} from '../Serializable';
import {ModuleConfiguration} from './ModuleConfiguration';
import {UhkBuffer} from '../UhkBuffer';
export class ModuleConfigurations extends ClassArray<ModuleConfiguration> {
jsObjectToClass(jsObject: any): Serializable<ModuleConfiguration> {
jsObjectToClass(jsObject: any): ModuleConfiguration {
return new ModuleConfiguration().fromJsObject(jsObject);
}
binaryToClass(buffer: UhkBuffer): Serializable<ModuleConfiguration> {
binaryToClass(buffer: UhkBuffer): ModuleConfiguration {
return new ModuleConfiguration().fromBinary(buffer);
}

View File

@@ -1,15 +1,14 @@
import {ClassArray} from '../ClassArray';
import {Module} from './Module';
import {Serializable} from '../Serializable';
import {UhkBuffer} from '../UhkBuffer';
export class Modules extends ClassArray<Module> {
jsObjectToClass(jsObject: any): Serializable<Module> {
jsObjectToClass(jsObject: any): Module {
return new Module().fromJsObject(jsObject);
}
binaryToClass(buffer: UhkBuffer): Serializable<Module> {
binaryToClass(buffer: UhkBuffer): Module {
return new Module().fromBinary(buffer);
}

View File

@@ -20,11 +20,11 @@ export class UhkConfiguration extends Serializable<UhkConfiguration> {
// @assertUInt8
brandId: number;
moduleConfigurations: Serializable<ModuleConfigurations>;
moduleConfigurations: ModuleConfigurations;
keyMaps: Serializable<KeyMaps>;
keyMaps: KeyMaps;
macros: Serializable<Macros>;
macros: Macros;
// @assertUInt32
epilogue: number;