message: Do not create unnecessary arrays in the base class
diff: @@ -185,13 +185,13 @@ export class Base {
  }
  private propertyHash: { [index: string]: any } = {};
  - private localizableStrings: { [index: string]: LocalizableString } = {};
  - private arraysInfo: { [index: string]: any } = {};
  + private localizableStrings: { [index: string]: LocalizableString };
  + private arraysInfo: { [index: string]: any };
  private onPropChangeFunctions: Array<{
  name: string;
  func: (...args: any[]) => void;
  key: string;
  - }> = [];
  + }>;
  protected isLoadingFromJsonValue: boolean = false;
  public onPropertyChanged: Event<
  (sender: Base, options: any) => any,
  @@ -241,6 +241,7 @@ export class Base {
  return new JsonObject().toJsonObject(this);
  }
  public locStrsChanged() {
  + if (!!this.arraysInfo) {
  for (let key in this.arraysInfo) {
  let item = this.arraysInfo[key];
  if (item && item.isItemValues) {
  @@ -249,11 +250,14 @@ export class Base {
  Base.itemValueLocStrChanged(arr);
  }
  }
  + }
  + if (!!this.localizableStrings) {
  for (let key in this.localizableStrings) {
  let item = this.getLocalizableString(key);
  if (item) item.strChanged();
  }
  }
  + }
  /**
  * Returns the property value by name
  * @param name property name
  @@ -311,6 +315,7 @@ export class Base {
  oldValue: oldValue,
  newValue: newValue
  });
  + if (!this.onPropChangeFunctions) return;
  for (var i = 0; i < this.onPropChangeFunctions.length; i++) {
  if (this.onPropChangeFunctions[i].name == name)
  this.onPropChangeFunctions[i].func(newValue);
  @@ -327,6 +332,9 @@ export class Base {
  func: any,
  key: string = null
  ) {
  + if (!this.onPropChangeFunctions) {
  + this.onPropChangeFunctions = [];
  + }
  if (key) {
  for (var i = 0; i < this.onPropChangeFunctions.length; i++) {
  var item = this.onPropChangeFunctions[i];
  @@ -362,6 +370,7 @@ export class Base {
  name: string,
  key: string = null
  ) {
  + if (!this.onPropChangeFunctions) return;
  for (var i = 0; i < this.onPropChangeFunctions.length; i++) {
  var item = this.onPropChangeFunctions[i];
  if (item.name == name && item.key == key) {
  @@ -394,11 +403,14 @@ export class Base {
  useMarkDown: boolean = false
  ): LocalizableString {
  var locStr = new LocalizableString(owner, useMarkDown);
  + if (!this.localizableStrings) {
  + this.localizableStrings = {};
  + }
  this.localizableStrings[name] = locStr;
  return locStr;
  }
  public getLocalizableString(name: string): LocalizableString {
  - return this.localizableStrings[name];
  + return !!this.localizableStrings ? this.localizableStrings[name] : null;
  }
  public getLocalizableStringText(
  name: string,
  @@ -435,6 +447,9 @@ export class Base {
  ): Array<any> {
  var newArray = new Array<any>();
  this.setPropertyValueCore(this.propertyHash, name, newArray);
  + if (!this.arraysInfo) {
  + this.arraysInfo = {};
  + }
  this.arraysInfo[name] = { onPush: onPush, isItemValues: false };
  var self = this;
  newArray.push = function(value): number {
  