From f629f398a4fabd17cb153f6d526432b63f17a5e2 Mon Sep 17 00:00:00 2001 From: blickly Date: Mon, 10 Jul 2017 10:50:54 -0700 Subject: [PATCH] Better fix for goog.defines in .i.js files work correctly ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=161412565 --- .../jscomp/ProcessClosurePrimitives.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java b/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java index c947ec5834c..a65536f78d8 100644 --- a/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java +++ b/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java @@ -230,6 +230,22 @@ 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 */ @@ -237,10 +253,11 @@ 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);