From 68b02eb1202b66c6f9e52066f80a591a248ff643 Mon Sep 17 00:00:00 2001 From: blickly Date: Tue, 3 Apr 2018 16:13:56 -0700 Subject: [PATCH] Preserve enum declarations inside namespaces in .i.js files ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=191516095 --- .../jscomp/ijs/PotentialDeclaration.java | 40 +++++++++++-------- .../ijs/ConvertToTypedInterfaceTest.java | 6 +++ 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/com/google/javascript/jscomp/ijs/PotentialDeclaration.java b/src/com/google/javascript/jscomp/ijs/PotentialDeclaration.java index d4085d80929..dfc7ffb8a81 100644 --- a/src/com/google/javascript/jscomp/ijs/PotentialDeclaration.java +++ b/src/com/google/javascript/jscomp/ijs/PotentialDeclaration.java @@ -166,13 +166,7 @@ void simplify(AbstractCompiler compiler) { Node nameNode = getLhs(); JSDocInfo jsdoc = getJsDoc(); if (jsdoc != null && jsdoc.hasEnumParameterType()) { - // Remove values from enums - if (getRhs().isObjectLit() && getRhs().hasChildren()) { - for (Node key : getRhs().children()) { - removeStringKeyValue(key); - } - compiler.reportChangeToEnclosingScope(getRhs()); - } + super.simplifyEnumValues(compiler); return; } if (NodeUtil.isNamespaceDecl(nameNode)) { @@ -298,16 +292,18 @@ void simplify(AbstractCompiler compiler) { if (shouldPreserve()) { return; } - if (!isTypedRhs(getRhs())) { - Node key = getLhs(); - removeStringKeyValue(key); - JSDocInfo jsdoc = getJsDoc(); - if (jsdoc == null - || !jsdoc.containsDeclaration() - || isConstToBeInferred()) { - key.setJSDocInfo(JsdocUtil.getUnusableTypeJSDoc(jsdoc)); - } - compiler.reportChangeToEnclosingScope(key); + JSDocInfo jsdoc = getJsDoc(); + if (jsdoc != null && jsdoc.hasEnumParameterType()) { + super.simplifyEnumValues(compiler); + return; + } + Node key = getLhs(); + removeStringKeyValue(key); + compiler.reportChangeToEnclosingScope(key); + if (jsdoc == null + || !jsdoc.containsDeclaration() + || isConstToBeInferred()) { + key.setJSDocInfo(JsdocUtil.getUnusableTypeJSDoc(jsdoc)); } } @@ -336,6 +332,16 @@ Node getRemovableNode() { } + /** Remove values from enums */ + private void simplifyEnumValues(AbstractCompiler compiler) { + if (getRhs().isObjectLit() && getRhs().hasChildren()) { + for (Node key : getRhs().children()) { + removeStringKeyValue(key); + } + compiler.reportChangeToEnclosingScope(getRhs()); + } + } + boolean isDefiniteDeclaration() { Node parent = getLhs().getParent(); switch (parent.getToken()) { diff --git a/test/com/google/javascript/jscomp/ijs/ConvertToTypedInterfaceTest.java b/test/com/google/javascript/jscomp/ijs/ConvertToTypedInterfaceTest.java index cb0e2985f6e..48e776f621d 100644 --- a/test/com/google/javascript/jscomp/ijs/ConvertToTypedInterfaceTest.java +++ b/test/com/google/javascript/jscomp/ijs/ConvertToTypedInterfaceTest.java @@ -887,6 +887,12 @@ public void testEnums() { "/** @const {*} */ var x; /** @enum {number} */ var E = { A: 0 };"); } + public void testEnumInsideNamespace() { + test( + "const ns = { /** @enum {number} */ ENUM: { A: 1, B: 2, C: 3} };", + "const ns = { /** @enum {number} */ ENUM: { A: 0, B: 0, C: 0} };"); + } + public void testTryCatch() { test( "try { /** @type {number} */ var n = foo(); } catch (e) { console.log(e); }",