[Bug] Fix a name collision in String Array Storage

This commit is contained in:
2019-10-04 22:47:02 +03:00
parent 6216896978
commit fb7f898243
8 changed files with 30 additions and 19 deletions
@@ -30,14 +30,16 @@ export abstract class AbstractIdentifierNamesGenerator implements IIdentifierNam
}
/**
* @param {number} nameLength
* @returns {string}
*/
public abstract generate (): string;
public abstract generate (nameLength?: number): string;
/**
* @param {number} nameLength
* @returns {string}
*/
public abstract generateWithPrefix (): string;
public abstract generateWithPrefix (nameLength?: number): string;
/**
* @param {string} name
@@ -32,18 +32,23 @@ export class HexadecimalIdentifierNamesGenerator extends AbstractIdentifierNames
}
/**
* @param {number} nameLength
* @returns {string}
*/
public generate (): string {
public generate (nameLength?: number): string {
const rangeMinInteger: number = 10000;
const rangeMaxInteger: number = 99_999_999;
const randomInteger: number = this.randomGenerator.getRandomInteger(rangeMinInteger, rangeMaxInteger);
const hexadecimalNumber: string = NumberUtils.toHex(randomInteger);
const baseIdentifierName: string = hexadecimalNumber.substr(0, HexadecimalIdentifierNamesGenerator.baseIdentifierNameLength);
const prefixLength: number = Utils.hexadecimalPrefix.length + 1;
const baseNameLength: number = nameLength
? nameLength - prefixLength
: HexadecimalIdentifierNamesGenerator.baseIdentifierNameLength;
const baseIdentifierName: string = hexadecimalNumber.substr(0, baseNameLength);
const identifierName: string = `_${Utils.hexadecimalPrefix}${baseIdentifierName}`;
if (this.randomVariableNameSet.has(identifierName)) {
return this.generate();
return this.generate(nameLength);
}
this.randomVariableNameSet.add(identifierName);
@@ -52,10 +57,11 @@ export class HexadecimalIdentifierNamesGenerator extends AbstractIdentifierNames
}
/**
* @param {number} nameLength
* @returns {string}
*/
public generateWithPrefix (): string {
const identifierName: string = this.generate();
public generateWithPrefix (nameLength?: number): string {
const identifierName: string = this.generate(nameLength);
return `${this.options.identifiersPrefix}${identifierName}`.replace('__', '_');
}
@@ -46,9 +46,11 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
}
/**
* We can only ignore limited nameLength, it has no sense here
* @param {number} nameLength
* @returns {string}
*/
public generate (): string {
public generate (nameLength?: number): string {
const identifierName: string = this.generateNewMangledName(this.previousMangledName);
this.previousMangledName = identifierName;
@@ -57,13 +59,14 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
}
/**
* @param {number} nameLength
* @returns {string}
*/
public generateWithPrefix (): string {
public generateWithPrefix (nameLength?: number): string {
const prefix: string = this.options.identifiersPrefix ?
`${this.options.identifiersPrefix}_`
: '';
const identifierName: string = this.generate();
const identifierName: string = this.generate(nameLength);
return `${prefix}${identifierName}`;
}
@@ -1,13 +1,15 @@
export interface IIdentifierNamesGenerator {
/**
* @param {number} nameLength
* @returns {string}
*/
generate (): string;
generate (nameLength?: number): string;
/**
* @param {number} nameLength
* @returns {string}
*/
generateWithPrefix (): string;
generateWithPrefix (nameLength?: number): string;
/**
* @param {string} identifierName
@@ -51,11 +51,9 @@ export class StringArrayStorage extends ArrayStorage <string> {
super.initialize();
const baseStringArrayName: string = this.identifierNamesGenerator
.generate()
.slice(0, StringArrayStorage.stringArrayNameLength);
.generate(StringArrayStorage.stringArrayNameLength);
const baseStringArrayCallsWrapperName: string = this.identifierNamesGenerator
.generate()
.slice(0, StringArrayStorage.stringArrayNameLength);
.generate(StringArrayStorage.stringArrayNameLength);
const stringArrayName: string = `${this.options.identifiersPrefix}${baseStringArrayName}`;
const stringArrayCallsWrapperName: string = `${this.options.identifiersPrefix}${baseStringArrayCallsWrapperName}`;