From 52f72d3ac5352fadc2e791700485b45fef624c48 Mon Sep 17 00:00:00 2001 From: tbreisacher Date: Wed, 13 Sep 2017 17:57:35 -0700 Subject: [PATCH] Fix a spot where we were calling cloneNode instead of cloneTree on a GETPROP node. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=168624053 --- .../jscomp/DeclaredGlobalExternsOnWindow.java | 2 +- .../DeclaredGlobalExternsOnWindowTest.java | 27 ++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java b/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java index d0fdad37717..7e21a630965 100644 --- a/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java +++ b/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java @@ -97,7 +97,7 @@ private static void addExtern(Node node) { Node rhs = NodeUtil.getRValueOfLValue(node); // Type-aliasing definition if (oldJSDocInfo.hasConstAnnotation() && rhs != null && rhs.isQualifiedName()) { - newNode = IR.assign(getprop, rhs.cloneNode()); + newNode = IR.assign(getprop, rhs.cloneTree()); } } builder = JSDocInfoBuilder.copyFrom(oldJSDocInfo); diff --git a/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java b/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java index b9efdb87d93..c66c20d4109 100644 --- a/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java +++ b/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java @@ -101,7 +101,7 @@ public void testWindowProperty7() { "/** @suppress {const,duplicate} @const */ window.ns = ns;")); } - public void testNamespaceAliasing() { + public void testNameAliasing() { testExternChanges( LINE_JOINER.join( "var window;", @@ -122,6 +122,31 @@ public void testNamespaceAliasing() { "window.ns2 = ns;")); } + public void testQualifiedNameAliasing() { + testExternChanges( + LINE_JOINER.join( + "var window;", + "/** @const */", + "var ns = {};", + "/** @type {number} A very important constant */", + "ns.THE_NUMBER;", + "/** @const */", + "var num = ns.THE_NUMBER;"), + "", + LINE_JOINER.join( + "var window;", + "/** @const */", + "var ns = {};", + "/** @type {number} A very important constant */", + "ns.THE_NUMBER;", + "/** @const */", + "var num = ns.THE_NUMBER;", + "/** @suppress {const,duplicate} @const */", + "window.ns=ns;", + "/** @suppress {const,duplicate} @const */", + "window.num = ns.THE_NUMBER;")); + } + public void testWindowProperty8() { testExternChanges("var window; /** @constructor */ function Foo() {}", "", LINE_JOINER.join(