Skip to content

Commit

Permalink
Preserve type annotations for arbitrary template types, not just Array.
Browse files Browse the repository at this point in the history
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=92316544
  • Loading branch information
shicks authored and blickly committed Apr 29, 2015
1 parent 2ce70c9 commit e38cd3c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 9 deletions.
16 changes: 9 additions & 7 deletions src/com/google/javascript/jscomp/JSDocInfoPrinter.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,16 @@ private static void appendTypeNode(StringBuilder sb, Node typeNode) {
} else if (typeNode.getType() == Token.VOID) {
sb.append("void");
} else {
if (typeNode.getString().equals("Array")) {
if (typeNode.hasChildren()) {
sb.append("Array.<");
appendTypeNode(sb, typeNode.getFirstChild().getFirstChild());
sb.append(">");
} else {
sb.append("Array");
if (typeNode.hasChildren()) {
sb.append(typeNode.getString())
.append("<");
Node child = typeNode.getFirstChild();
appendTypeNode(sb, child.getFirstChild());
for (int i = 1; i < child.getChildCount(); i++) {
sb.append(",");
appendTypeNode(sb, child.getChildAtIndex(i));
}
sb.append(">");
} else {
sb.append(typeNode.getString());
}
Expand Down
21 changes: 19 additions & 2 deletions test/com/google/javascript/jscomp/JSDocInfoPrinterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,32 @@ public void testTypes() {

// Array types
builder.recordType(new JSTypeExpression(
JsDocInfoParser.parseTypeString("!Array.<(number|string)>"), ""));
JsDocInfoParser.parseTypeString("!Array<(number|string)>"), ""));
info = builder.buildAndReset();
assertEquals(
"/**@type {!Array.<(number|string)>} */", JSDocInfoPrinter.print(info));
"/**@type {!Array<(number|string)>} */", JSDocInfoPrinter.print(info));
builder.recordType(new JSTypeExpression(
JsDocInfoParser.parseTypeString("Array"), ""));
builder.recordInlineType();
info = builder.buildAndReset();
assertEquals("/** Array */", JSDocInfoPrinter.print(info));

// Other template types
builder.recordType(new JSTypeExpression(
JsDocInfoParser.parseTypeString("!Set<number|string>"), ""));
info = builder.buildAndReset();
assertEquals(
"/**@type {!Set<(number|string)>} */", JSDocInfoPrinter.print(info));
builder.recordType(new JSTypeExpression(
JsDocInfoParser.parseTypeString("!Map<!Foo, !Bar<!Baz|string>>"), ""));
info = builder.buildAndReset();
assertEquals(
"/**@type {!Map<!Foo,!Bar<(!Baz|string)>>} */", JSDocInfoPrinter.print(info));
builder.recordType(new JSTypeExpression(
JsDocInfoParser.parseTypeString("Map"), ""));
builder.recordInlineType();
info = builder.buildAndReset();
assertEquals("/** Map */", JSDocInfoPrinter.print(info));
}

public void testInheritance() {
Expand Down

0 comments on commit e38cd3c

Please sign in to comment.