Skip to content

Commit

Permalink
Better fix for goog.defines in .i.js files work correctly
Browse files Browse the repository at this point in the history
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161412565
  • Loading branch information
blickly authored and Tyler Breisacher committed Jul 11, 2017
1 parent f230473 commit f629f39
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions src/com/google/javascript/jscomp/ProcessClosurePrimitives.java
Expand Up @@ -230,17 +230,34 @@ public void process(Node externs, Node root) {
}
}

private Node getAnyValueOfType(JSDocInfo jsdoc) {
checkArgument(jsdoc.hasType());
Node typeAst = jsdoc.getType().getRoot();
checkState(typeAst.isString());
switch (typeAst.getString()) {
case "boolean":
return IR.falseNode();
case "string":
return IR.string("");
case "number":
return IR.number(0);
default:
throw new RuntimeException(typeAst.getString());
}
}

/**
* @param n
*/
private void replaceGoogDefines(Node n) {
Node parent = n.getParent();
checkState(parent.isExprResult());
String name = n.getSecondChild().getString();
Node value = n.isFromExterns() ? null : n.getChildAtIndex(2).detach();
JSDocInfo jsdoc = n.getJSDocInfo();
Node value =
n.isFromExterns() ? getAnyValueOfType(jsdoc).srcref(n) : n.getChildAtIndex(2).detach();

Node replacement = NodeUtil.newQNameDeclaration(
compiler, name, value, n.getJSDocInfo());
Node replacement = NodeUtil.newQNameDeclaration(compiler, name, value, jsdoc);
replacement.useSourceInfoIfMissingFromForTree(parent);
parent.replaceWith(replacement);
compiler.reportChangeToEnclosingScope(replacement);
Expand Down

0 comments on commit f629f39

Please sign in to comment.