From 572f39324e0308ff0b9ecca56c0840df94b0ff41 Mon Sep 17 00:00:00 2001 From: sdh Date: Thu, 4 Jan 2018 01:14:36 -0800 Subject: [PATCH] Make TypedScopeCreator a little more readable. * Move the call to Node#setJSType out of the DeferredSetType constructor (which is a surprising side effect) and directly into the deferredSetType() method. * Factor the call to NodeTraversal#traverseTyped into AbstractScopeBuilder#build and consolidate how global and local scopes are treated. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=180769654 --- .../javascript/jscomp/TypedScopeCreator.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/com/google/javascript/jscomp/TypedScopeCreator.java b/src/com/google/javascript/jscomp/TypedScopeCreator.java index ddb9d4cc1bc..f7a0d7da6f4 100644 --- a/src/com/google/javascript/jscomp/TypedScopeCreator.java +++ b/src/com/google/javascript/jscomp/TypedScopeCreator.java @@ -179,10 +179,6 @@ private class DeferredSetType { checkNotNull(type); this.node = node; this.type = type; - - // Other parts of this pass may read off the node. - // (like when we set the LHS of an assign with a typed RHS function.) - node.setJSType(type); } void resolve(TypedScope scope) { @@ -241,16 +237,12 @@ public TypedScope createScope(Node root, Scope parent) { // Find all the classes in the global scope. newScope = createInitialScope(root); - - GlobalScopeBuilder globalScopeBuilder = new GlobalScopeBuilder(newScope); - scopeBuilder = globalScopeBuilder; - NodeTraversal.traverseTyped(compiler, root, scopeBuilder); + scopeBuilder = new GlobalScopeBuilder(newScope); } else { newScope = new TypedScope(typedParent, root); - LocalScopeBuilder localScopeBuilder = new LocalScopeBuilder(newScope); - scopeBuilder = localScopeBuilder; - localScopeBuilder.build(); + scopeBuilder = new LocalScopeBuilder(newScope); } + scopeBuilder.build(); scopeBuilder.resolveStubDeclarations(); @@ -470,7 +462,16 @@ private AbstractScopeBuilder(TypedScope scope) { this.scope = scope; } + /** Traverse the scope root and build it. */ + void build() { + NodeTraversal.traverseTyped(compiler, scope.getRootNode(), this); + } + + /** Set the type for a node now, and enqueue it to be updated with a resolved type later. */ void setDeferredType(Node node, JSType type) { + // Other parts of this pass may read the not-yet-resolved type off the node. + // (like when we set the LHS of an assign with a typed RHS function.) + node.setJSType(type); deferredSetTypes.add(new DeferredSetType(node, type)); } @@ -1942,8 +1943,9 @@ private LocalScopeBuilder(TypedScope scope) { /** * Traverse the scope root and build it. */ + @Override void build() { - NodeTraversal.traverseTyped(compiler, scope.getRootNode(), this); + super.build(); AstFunctionContents contents = getFunctionAnalysisResults(scope.getRootNode());