Index: lib/merge.ts |
diff --git a/lib/merge.ts b/lib/merge.ts |
index 4b3bd9e560d560b4a7d698d6fc203af27505bbc9..0a99b6676de595eb9ea7152d50211a0d95cbe49c 100644 |
--- a/lib/merge.ts |
+++ b/lib/merge.ts |
@@ -51,25 +51,22 @@ export class MergedType { |
default: |
break; |
} |
- this.types[this.fc.generateDartTypeName(t, {insideComment: true})] = t; |
+ this.types.set(this.fc.generateDartTypeName(t, {insideComment: true}), t); |
} |
} |
toTypeNode(): ts.TypeNode { |
- let names = Object.getOwnPropertyNames(this.types); |
+ let names = Array.from(this.types.keys()); |
if (names.length === 0) { |
return null; |
} |
if (names.length === 1) { |
- return this.types[names[0]]; |
+ return this.types.get(names[0]); |
} |
let union = <ts.UnionTypeNode>ts.createNode(ts.SyntaxKind.UnionType); |
- base.copyLocation(this.types[names[0]], union); |
+ base.copyLocation(this.types.get(names[0]), union); |
- union.types = <ts.NodeArray<ts.TypeNode>>[]; |
- for (let i = 0; i < names.length; ++i) { |
- union.types.push(this.types[names[i]]); |
- } |
+ union.types = Array.from(this.types.values()) as ts.NodeArray<ts.TypeNode>; |
return union; |
} |
@@ -97,7 +94,7 @@ export class MergedType { |
return merged; |
} |
- private types: {[name: string]: ts.TypeNode} = {}; |
+ private types: Map<string, ts.TypeNode> = new Map(); |
} |
/** |
@@ -112,7 +109,7 @@ export class MergedParameter { |
} |
merge(param: ts.ParameterDeclaration) { |
- this.name[base.ident(param.name)] = true; |
+ this.name.add(base.ident(param.name)); |
if (!this.optional) { |
this.optional = !!param.questionToken; |
} |
@@ -122,7 +119,7 @@ export class MergedParameter { |
toParameterDeclaration(): ts.ParameterDeclaration { |
let ret = <ts.ParameterDeclaration>ts.createNode(ts.SyntaxKind.Parameter); |
let nameIdentifier = <ts.Identifier>ts.createNode(ts.SyntaxKind.Identifier); |
- nameIdentifier.text = Object.getOwnPropertyNames(this.name).join('_'); |
+ nameIdentifier.text = Array.from(this.name).join('_'); |
ret.name = nameIdentifier; |
if (this.optional) { |
ret.questionToken = ts.createNode(ts.SyntaxKind.QuestionToken); |
@@ -136,7 +133,7 @@ export class MergedParameter { |
this.optional = true; |
} |
- private name: {[s: string]: boolean} = {}; |
+ private name: Set<string> = new Set(); |
private type: MergedType; |
private optional: boolean = false; |
private textRange: ts.TextRange; |
@@ -185,7 +182,7 @@ export class MergedTypeParameter { |
* multiple method overloads. |
*/ |
export class MergedTypeParameters { |
- private mergedParameters: {[s: string]: MergedTypeParameter} = {}; |
+ private mergedParameters: Map<string, MergedTypeParameter> = new Map(); |
private textRange: ts.TextRange; |
constructor(private fc: FacadeConverter) {} |
@@ -198,28 +195,28 @@ export class MergedTypeParameters { |
for (let i = 0; i < params.length; i++) { |
let param = params[i]; |
let name = base.ident(param.name); |
- if (Object.hasOwnProperty.call(this.mergedParameters, name)) { |
- let merged = this.mergedParameters[name]; |
+ if (this.mergedParameters.has(name)) { |
+ let merged = this.mergedParameters.get(name); |
if (merged) { |
merged.merge(param); |
} |
} else { |
- this.mergedParameters[name] = new MergedTypeParameter(param, this.fc); |
+ this.mergedParameters.set(name, new MergedTypeParameter(param, this.fc)); |
} |
} |
} |
toTypeParameters(): ts.NodeArray<ts.TypeParameterDeclaration> { |
- let names = Object.getOwnPropertyNames(this.mergedParameters); |
- if (names.length === 0) { |
+ if (this.mergedParameters.size === 0) { |
return undefined; |
} |
let ret = [] as ts.NodeArray<ts.TypeParameterDeclaration>; |
base.copyLocation(this.textRange, ret); |
- for (let i = 0; i < names.length; ++i) { |
- ret.push(this.mergedParameters[names[i]].toTypeParameterDeclaration()); |
- } |
+ this.mergedParameters.forEach((mergedParameter) => { |
+ ret.push(mergedParameter.toTypeParameterDeclaration()); |
+ }); |
+ |
return ret; |
} |
} |
@@ -228,7 +225,7 @@ export class MergedTypeParameters { |
* Normalize a SourceFile |
*/ |
export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
- let modules: {[name: string]: ts.ModuleDeclaration} = {}; |
+ let modules: Map<string, ts.ModuleDeclaration> = new Map(); |
// Merge top level modules. |
for (let i = 0; i < f.statements.length; ++i) { |
@@ -236,8 +233,8 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
if (statement.kind !== ts.SyntaxKind.ModuleDeclaration) continue; |
let moduleDecl = <ts.ModuleDeclaration>statement; |
let name = moduleDecl.name.text; |
- if (Object.hasOwnProperty.call(modules, name)) { |
- let srcBody = modules[name].body; |
+ if (modules.has(name)) { |
+ let srcBody = modules.get(name).body; |
let srcBodyBlock: ts.ModuleBlock; |
if (srcBody.kind !== ts.SyntaxKind.ModuleBlock) { |
@@ -257,7 +254,7 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
f.statements.splice(i, 1); |
i--; |
} else { |
- modules[name] = moduleDecl; |
+ modules.set(name, moduleDecl); |
} |
} |
@@ -270,7 +267,7 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
n.modifiers.push(modifier); |
} |
- function mergeVariablesIntoClasses(n: ts.Node, classes: {[name: string]: base.ClassLike}) { |
+ function mergeVariablesIntoClasses(n: ts.Node, classes: Map<string, base.ClassLike>) { |
switch (n.kind) { |
case ts.SyntaxKind.VariableStatement: |
let statement = <ts.VariableStatement>n; |
@@ -278,7 +275,7 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
declaration: ts.VariableDeclaration) { |
if (declaration.name.kind === ts.SyntaxKind.Identifier) { |
let name: string = (<ts.Identifier>(declaration.name)).text; |
- let existingClass = Object.hasOwnProperty.call(classes, name); |
+ let existingClass = classes.has(name); |
let hasConstructor = false; |
if (declaration.type) { |
let type: ts.TypeNode = declaration.type; |
@@ -334,10 +331,10 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
clazz.members = <ts.NodeArray<ts.ClassElement>>[]; |
base.copyLocation(declaration, clazz.members); |
replaceNode(n, clazz); |
- classes[name] = clazz; |
+ classes.set(name, clazz); |
} |
- let existing = classes[name]; |
+ let existing = classes.get(name); |
if (existing.kind === ts.SyntaxKind.InterfaceDeclaration) { |
let interfaceDecl = existing as base.ExtendedInterfaceDeclaration; |
// It is completely safe to assume that we know the precise class like variable |
@@ -457,7 +454,7 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
} |
} |
- function gatherClasses(n: ts.Node, classes: {[name: string]: base.ClassLike}) { |
+ function gatherClasses(n: ts.Node, classes: Map<string, base.ClassLike>) { |
switch (n.kind) { |
case ts.SyntaxKind.ClassDeclaration: |
case ts.SyntaxKind.InterfaceDeclaration: |
@@ -465,21 +462,21 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
let name = classDecl.name.text; |
// TODO(jacobr): validate that the classes have consistent |
// modifiers, etc. |
- if (Object.hasOwnProperty.call(classes, name)) { |
- let existing = classes[name]; |
+ if (classes.has(name)) { |
+ let existing = classes.get(name); |
(classDecl.members as Array<ts.ClassElement>).forEach((e: ts.ClassElement) => { |
(existing.members as Array<ts.ClassElement>).push(e); |
e.parent = existing; |
}); |
removeNode(classDecl); |
} else { |
- classes[name] = classDecl; |
+ classes.set(name, classDecl); |
// Perform other class level post processing here. |
} |
break; |
case ts.SyntaxKind.ModuleDeclaration: |
case ts.SyntaxKind.SourceFile: |
- let moduleClasses: {[name: string]: base.ClassLike} = {}; |
+ let moduleClasses: Map<string, base.ClassLike> = new Map(); |
ts.forEachChild(n, (child) => gatherClasses(child, moduleClasses)); |
ts.forEachChild(n, (child) => mergeVariablesIntoClasses(child, moduleClasses)); |
@@ -491,5 +488,5 @@ export function normalizeSourceFile(f: ts.SourceFile, fc: FacadeConverter) { |
break; |
} |
} |
- gatherClasses(f, {}); |
+ gatherClasses(f, new Map()); |
} |