From b9b2fcbf846a61396b4498f869f2dcc7807f5330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zsef=20Farkas?= Date: Sat, 23 Apr 2016 23:45:05 +0200 Subject: [PATCH] Fix type lost caused by incorrect inheritance of ClassArray --- config-serializer/ClassArray.ts | 12 ++++++------ config-serializer/Serializable.ts | 9 +++++---- config-serializer/config-items/KeyActions.ts | 5 ++--- config-serializer/config-items/KeyMap.ts | 2 +- config-serializer/config-items/KeyMaps.ts | 5 ++--- config-serializer/config-items/Layer.ts | 2 +- config-serializer/config-items/Layers.ts | 5 ++--- config-serializer/config-items/Macro.ts | 2 +- config-serializer/config-items/MacroActions.ts | 5 ++--- config-serializer/config-items/Macros.ts | 5 ++--- config-serializer/config-items/Module.ts | 2 +- .../config-items/ModuleConfigurations.ts | 5 ++--- config-serializer/config-items/Modules.ts | 5 ++--- config-serializer/config-items/UhkConfiguration.ts | 6 +++--- 14 files changed, 32 insertions(+), 38 deletions(-) diff --git a/config-serializer/ClassArray.ts b/config-serializer/ClassArray.ts index 6b902950..bb887263 100644 --- a/config-serializer/ClassArray.ts +++ b/config-serializer/ClassArray.ts @@ -1,18 +1,18 @@ import {Serializable} from './Serializable'; import {UhkBuffer} from './UhkBuffer'; -export abstract class ClassArray extends Serializable { +export abstract class ClassArray> extends Serializable> { - elements: Serializable[] = []; + elements: T[] = []; - _fromJsObject(jsObjects: any): Serializable { + _fromJsObject(jsObjects: any): ClassArray { for (let jsObject of jsObjects) { this.elements.push(this.jsObjectToClass(jsObject)); } return this; } - _fromBinary(buffer: UhkBuffer): Serializable { + _fromBinary(buffer: UhkBuffer): ClassArray { let arrayLength = buffer.readCompactLength(); if (buffer.enableDump) { @@ -49,6 +49,6 @@ export abstract class ClassArray extends Serializable { return `<${this.constructor.name} length="${this.elements.length}">`; } - abstract jsObjectToClass(jsObject: any): Serializable; - abstract binaryToClass(buffer: UhkBuffer): Serializable; + abstract jsObjectToClass(jsObject: any): T; + abstract binaryToClass(buffer: UhkBuffer): T; } diff --git a/config-serializer/Serializable.ts b/config-serializer/Serializable.ts index a5b040aa..1180b8e8 100644 --- a/config-serializer/Serializable.ts +++ b/config-serializer/Serializable.ts @@ -8,7 +8,7 @@ export abstract class Serializable { private static maxDisplayedJsonLength = 160; private static enableDump = true; - fromJsObject(jsObject: any): Serializable { + 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 { return value; } - fromBinary(buffer: UhkBuffer): Serializable { + 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 { 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 { return value; } - abstract _fromJsObject(jsObject: any): Serializable; - abstract _fromBinary(buffer: UhkBuffer): Serializable; + abstract _fromJsObject(jsObject: any): T; + abstract _fromBinary(buffer: UhkBuffer): T; abstract _toJsObject(): any; abstract _toBinary(buffer: UhkBuffer): void; diff --git a/config-serializer/config-items/KeyActions.ts b/config-serializer/config-items/KeyActions.ts index 2aa543f2..0d85eed3 100644 --- a/config-serializer/config-items/KeyActions.ts +++ b/config-serializer/config-items/KeyActions.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): KeyAction { switch (jsObject.keyActionType) { case keyActionType.NoneAction: return new NoneAction().fromJsObject(jsObject); @@ -39,7 +38,7 @@ export class KeyActions extends ClassArray { } } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): KeyAction { let keyActionFirstByte = buffer.readUInt8(); buffer.backtrack(); diff --git a/config-serializer/config-items/KeyMap.ts b/config-serializer/config-items/KeyMap.ts index b34287e6..20d9e5fd 100644 --- a/config-serializer/config-items/KeyMap.ts +++ b/config-serializer/config-items/KeyMap.ts @@ -13,7 +13,7 @@ export class KeyMap extends Serializable { isDefault: boolean; - layers: Serializable; + layers: Layers; _fromJsObject(jsObject: any): KeyMap { this.id = jsObject.id; diff --git a/config-serializer/config-items/KeyMaps.ts b/config-serializer/config-items/KeyMaps.ts index 817de27b..d6172a95 100644 --- a/config-serializer/config-items/KeyMaps.ts +++ b/config-serializer/config-items/KeyMaps.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): KeyMap { return new KeyMap().fromJsObject(jsObject); } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): KeyMap { return new KeyMap().fromBinary(buffer); } diff --git a/config-serializer/config-items/Layer.ts b/config-serializer/config-items/Layer.ts index 14e0fdc5..97b0698b 100644 --- a/config-serializer/config-items/Layer.ts +++ b/config-serializer/config-items/Layer.ts @@ -4,7 +4,7 @@ import {UhkBuffer} from '../UhkBuffer'; export class Layer extends Serializable { - modules: Serializable; + modules: Modules; _fromJsObject(jsObject: any): Layer { this.modules = new Modules().fromJsObject(jsObject.modules); diff --git a/config-serializer/config-items/Layers.ts b/config-serializer/config-items/Layers.ts index 403079fe..35ee3ab4 100644 --- a/config-serializer/config-items/Layers.ts +++ b/config-serializer/config-items/Layers.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): Layer { return new Layer().fromJsObject(jsObject); } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): Layer { return new Layer().fromBinary(buffer); } diff --git a/config-serializer/config-items/Macro.ts b/config-serializer/config-items/Macro.ts index 258a43f2..18c522f3 100644 --- a/config-serializer/config-items/Macro.ts +++ b/config-serializer/config-items/Macro.ts @@ -13,7 +13,7 @@ export class Macro extends Serializable { name: string; - macroActions: Serializable; + macroActions: MacroActions; _fromJsObject(jsObject: any): Macro { this.id = jsObject.id; diff --git a/config-serializer/config-items/MacroActions.ts b/config-serializer/config-items/MacroActions.ts index 9d6afa86..dd08f8d0 100644 --- a/config-serializer/config-items/MacroActions.ts +++ b/config-serializer/config-items/MacroActions.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): MacroAction { switch (jsObject.macroActionType) { case macroActionType.PressKeyMacroAction: return new PressKeyMacroAction().fromJsObject(jsObject); @@ -51,7 +50,7 @@ export class MacroActions extends ClassArray { } } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): MacroAction { let macroActionFirstByte = buffer.readUInt8(); buffer.backtrack(); diff --git a/config-serializer/config-items/Macros.ts b/config-serializer/config-items/Macros.ts index 1b9bb615..2bc1f48b 100644 --- a/config-serializer/config-items/Macros.ts +++ b/config-serializer/config-items/Macros.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): Macro { return new Macro().fromJsObject(jsObject); } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): Macro { return new Macro().fromBinary(buffer); } diff --git a/config-serializer/config-items/Module.ts b/config-serializer/config-items/Module.ts index c26db5e0..bdb861b9 100644 --- a/config-serializer/config-items/Module.ts +++ b/config-serializer/config-items/Module.ts @@ -13,7 +13,7 @@ export class Module extends Serializable { // @assertUInt8 id: number; - keyActions: Serializable; + keyActions: KeyActions; // @assertEnum(PointerRole) private pointerRole: PointerRole; diff --git a/config-serializer/config-items/ModuleConfigurations.ts b/config-serializer/config-items/ModuleConfigurations.ts index 20365a02..ec468e90 100644 --- a/config-serializer/config-items/ModuleConfigurations.ts +++ b/config-serializer/config-items/ModuleConfigurations.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): ModuleConfiguration { return new ModuleConfiguration().fromJsObject(jsObject); } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): ModuleConfiguration { return new ModuleConfiguration().fromBinary(buffer); } diff --git a/config-serializer/config-items/Modules.ts b/config-serializer/config-items/Modules.ts index a0c4aeec..f33407e7 100644 --- a/config-serializer/config-items/Modules.ts +++ b/config-serializer/config-items/Modules.ts @@ -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 { - jsObjectToClass(jsObject: any): Serializable { + jsObjectToClass(jsObject: any): Module { return new Module().fromJsObject(jsObject); } - binaryToClass(buffer: UhkBuffer): Serializable { + binaryToClass(buffer: UhkBuffer): Module { return new Module().fromBinary(buffer); } diff --git a/config-serializer/config-items/UhkConfiguration.ts b/config-serializer/config-items/UhkConfiguration.ts index 0245fafe..f7be5a73 100644 --- a/config-serializer/config-items/UhkConfiguration.ts +++ b/config-serializer/config-items/UhkConfiguration.ts @@ -20,11 +20,11 @@ export class UhkConfiguration extends Serializable { // @assertUInt8 brandId: number; - moduleConfigurations: Serializable; + moduleConfigurations: ModuleConfigurations; - keyMaps: Serializable; + keyMaps: KeyMaps; - macros: Serializable; + macros: Macros; // @assertUInt32 epilogue: number;