diff --git a/src/com/google/javascript/jscomp/ConvertToTypedInterface.java b/src/com/google/javascript/jscomp/ConvertToTypedInterface.java index 9934f4c45ca..117bb813062 100644 --- a/src/com/google/javascript/jscomp/ConvertToTypedInterface.java +++ b/src/com/google/javascript/jscomp/ConvertToTypedInterface.java @@ -365,13 +365,21 @@ JSDocInfo getJsDoc() { return NodeUtil.getBestJSDocInfo(lhs); } + /** + * Remove this "potential declaration" completely. + * Usually, this is because the same symbol has already been declared in this file. + */ void remove(AbstractCompiler compiler) { Node statement = getStatement(); NodeUtil.deleteNode(statement, compiler); statement.removeChildren(); } - void maybeRemoveRhs(AbstractCompiler compiler) { + /** + * Simplify this declaration to only include what's necessary for typing. + * Usually, this means removing the RHS and leaving a type annotation. + */ + void simplify(AbstractCompiler compiler) { Node nameNode = lhs; JSDocInfo jsdoc = getJsDoc(); if (jsdoc != null && jsdoc.hasEnumParameterType()) { @@ -503,7 +511,7 @@ private void processName(PotentialDeclaration decl) { } break; case REMOVE_RHS: - decl.maybeRemoveRhs(compiler); + decl.simplify(compiler); break; case REMOVE_ALL: decl.remove(compiler); @@ -748,6 +756,9 @@ private static class JsdocUtil { private static JSDocInfo pullJsdocTypeFromAst( AbstractCompiler compiler, JSDocInfo oldJSDoc, Node nameNode) { checkArgument(nameNode.isQualifiedName()); + if (oldJSDoc != null && oldJSDoc.getDescription() != null) { + return getConstJSDoc(oldJSDoc, "string"); + } if (!nameNode.isFromExterns() && !isPrivate(oldJSDoc)) { compiler.report(JSError.make(nameNode, CONSTANT_WITHOUT_EXPLICIT_TYPE)); } diff --git a/test/com/google/javascript/jscomp/ConvertToTypedInterfaceTest.java b/test/com/google/javascript/jscomp/ConvertToTypedInterfaceTest.java index b7af8aca43b..21705319663 100644 --- a/test/com/google/javascript/jscomp/ConvertToTypedInterfaceTest.java +++ b/test/com/google/javascript/jscomp/ConvertToTypedInterfaceTest.java @@ -1076,4 +1076,20 @@ public void testGoogScopeLeftoversAreRemoved() { "", "a.b.c.d.e.f.g.Foo = class {};")); } + + public void testDescAnnotationCountsAsTyped() { + test( + LINE_JOINER.join( + "goog.module('a.b.c');", + "", + "/** @desc Some description */", + "exports.MSG_DESCRIPTION = goog.getMsg('Text');", + ""), + LINE_JOINER.join( + "goog.module('a.b.c');", + "", + "/** @const {string} @desc Some description */", + "exports.MSG_DESCRIPTION;", + "")); + } }