Skip to content

Commit

Permalink
Expose the ExternsSkippingCallback for use in PolymerPass
Browse files Browse the repository at this point in the history
The next step is to update the PolymerPass to run on the externsAndJsRoot,
which will cause it to be run over type-summary files.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=227749765
  • Loading branch information
blickly authored and lauraharker committed Jan 4, 2019
1 parent c0cb605 commit 240e37b
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 13 deletions.
9 changes: 1 addition & 8 deletions src/com/google/javascript/jscomp/InlineAliases.java
Expand Up @@ -17,7 +17,7 @@
package com.google.javascript.jscomp;

import com.google.common.base.Predicates;
import com.google.javascript.jscomp.NodeTraversal.Callback;
import com.google.javascript.jscomp.NodeTraversal.ExternsSkippingCallback;
import com.google.javascript.rhino.JSDocInfo;
import com.google.javascript.rhino.JSDocInfo.Visibility;
import com.google.javascript.rhino.Node;
Expand Down Expand Up @@ -60,13 +60,6 @@ public void process(Node externs, Node root) {
NodeTraversal.traverseRoots(compiler, new AliasesInliner(), externs, root);
}

private abstract static class ExternsSkippingCallback implements Callback {
@Override
public final boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {
return !n.isScript() || !n.isFromExterns() || NodeUtil.isFromTypeSummary(n);
}
}

private class AliasesCollector extends ExternsSkippingCallback {
@Override
public void visit(NodeTraversal t, Node n, Node parent) {
Expand Down
11 changes: 11 additions & 0 deletions src/com/google/javascript/jscomp/NodeTraversal.java
Expand Up @@ -145,6 +145,17 @@ public final boolean shouldTraverse(NodeTraversal nodeTraversal, Node n, Node pa
}
}

/**
* Abstract callback to visit all non-extern nodes in postorder. Note: Even though type-summary
* nodes are included under the externs roots, they are traversed by this callback.
*/
public abstract static class ExternsSkippingCallback implements Callback {
@Override
public final boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {
return !n.isScript() || !n.isFromExterns() || NodeUtil.isFromTypeSummary(n);
}
}

/** Abstract callback to visit all nodes in postorder. */
@FunctionalInterface
public static interface AbstractPostOrderCallbackInterface {
Expand Down
7 changes: 4 additions & 3 deletions src/com/google/javascript/jscomp/PolymerPass.java
Expand Up @@ -24,7 +24,7 @@

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
import com.google.javascript.jscomp.NodeTraversal.ExternsSkippingCallback;
import com.google.javascript.rhino.IR;
import com.google.javascript.rhino.JSDocInfo;
import com.google.javascript.rhino.JSDocInfoBuilder;
Expand All @@ -44,7 +44,7 @@
*
* @author jlklein@google.com (Jeremy Klein)
*/
final class PolymerPass extends AbstractPostOrderCallback implements HotSwapCompilerPass {
final class PolymerPass extends ExternsSkippingCallback implements HotSwapCompilerPass {
private static final String VIRTUAL_FILE = "<PolymerPass.java>";

private final AbstractCompiler compiler;
Expand Down Expand Up @@ -97,6 +97,7 @@ public void process(Node externs, Node root) {

globalNames = new GlobalNamespace(compiler, externs, root);

// TODO(b/111701088): Use externsAndJsRoot instead of root to get proper typechecking in js_lib
hotSwapScript(root, null);
}

Expand All @@ -116,7 +117,7 @@ public void visit(NodeTraversal traversal, Node node, Node parent) {
if (polymerElementExterns != null) {
rewritePolymer1ClassDefinition(node, parent, traversal);
} else if (!warnedPolymer1ExternsMissing) {
compiler.report(JSError.make(POLYMER_MISSING_EXTERNS));
compiler.report(JSError.make(node, POLYMER_MISSING_EXTERNS));
warnedPolymer1ExternsMissing = true;
}
} else if (PolymerPassStaticUtils.isPolymerClass(node)) {
Expand Down
Expand Up @@ -15,7 +15,7 @@
*/
package com.google.javascript.jscomp;

import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
import com.google.javascript.jscomp.NodeTraversal.ExternsSkippingCallback;
import com.google.javascript.jscomp.PolymerPass.MemberDefinition;
import com.google.javascript.rhino.JSDocInfoBuilder;
import com.google.javascript.rhino.Node;
Expand All @@ -25,7 +25,7 @@
* For every Polymer Behavior, strip property type annotations and add suppress checktypes on
* functions.
*/
final class PolymerPassSuppressBehaviors extends AbstractPostOrderCallback {
final class PolymerPassSuppressBehaviors extends ExternsSkippingCallback {

private final AbstractCompiler compiler;

Expand Down

0 comments on commit 240e37b

Please sign in to comment.