diff options
-rw-r--r-- | javaparser-core/src/main/java/com/github/javaparser/printer/JsonPrinter.java | 27 | ||||
-rw-r--r-- | javaparser-testing/src/test/java/com/github/javaparser/printer/JsonPrinterTest.java | 13 |
2 files changed, 26 insertions, 14 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/JsonPrinter.java b/javaparser-core/src/main/java/com/github/javaparser/printer/JsonPrinter.java index 65481322f..7d069ee65 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/JsonPrinter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/JsonPrinter.java @@ -4,9 +4,10 @@ import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.metamodel.NodeMetaModel; import com.github.javaparser.metamodel.PropertyMetaModel; -import com.github.javaparser.utils.SeparatedItemStringBuilder; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static com.github.javaparser.utils.Utils.assertNotNull; import static java.util.stream.Collectors.toList; @@ -33,40 +34,38 @@ public class JsonPrinter { List<PropertyMetaModel> subNodes = allPropertyMetaModels.stream().filter(PropertyMetaModel::isNode).filter(PropertyMetaModel::isSingular).collect(toList()); List<PropertyMetaModel> subLists = allPropertyMetaModels.stream().filter(PropertyMetaModel::isNodeList).collect(toList()); - final SeparatedItemStringBuilder content; - if (name == null) { - content = new SeparatedItemStringBuilder("{", ",", "}"); - } else { - content = new SeparatedItemStringBuilder(q(name) + ":{", ",", "}"); - } + final List<String> content = new ArrayList<>(); if (outputNodeType) { - content.append(q("type") + ":" + q(metaModel.getTypeName())); + content.add(q("type") + ":" + q(metaModel.getTypeName())); } for (PropertyMetaModel attributeMetaModel : attributes) { - content.append(q(attributeMetaModel.getName()) + ":" + q(attributeMetaModel.getValue(node).toString())); + content.add(q(attributeMetaModel.getName()) + ":" + q(attributeMetaModel.getValue(node).toString())); } for (PropertyMetaModel subNodeMetaModel : subNodes) { Node value = (Node) subNodeMetaModel.getValue(node); if (value != null) { - content.append(output(value, subNodeMetaModel.getName(), level + 1)); + content.add(output(value, subNodeMetaModel.getName(), level + 1)); } } for (PropertyMetaModel subListMetaModel : subLists) { NodeList<? extends Node> subList = (NodeList<? extends Node>) subListMetaModel.getValue(node); if (subList != null && !subList.isEmpty()) { - SeparatedItemStringBuilder listContent = new SeparatedItemStringBuilder(q(subListMetaModel.getName()) + ":[", ",", "]"); + final List<String> listContent = new ArrayList<>(); for (Node subListNode : subList) { - listContent.append(output(subListNode, null, level + 1)); + listContent.add(output(subListNode, null, level + 1)); } - content.append(listContent.toString()); + content.add(listContent.stream().collect(Collectors.joining(",", q(subListMetaModel.getName()) + ":[", "]"))); } } - return content.toString(); + if (name == null) { + return content.stream().collect(Collectors.joining(",", "{", "}")); + } + return content.stream().collect(Collectors.joining(",", q(name) + ":{", "}")); } private static String q(String value) { diff --git a/javaparser-testing/src/test/java/com/github/javaparser/printer/JsonPrinterTest.java b/javaparser-testing/src/test/java/com/github/javaparser/printer/JsonPrinterTest.java index 7170f3faf..4a78e212b 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/printer/JsonPrinterTest.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/printer/JsonPrinterTest.java @@ -1,6 +1,7 @@ package com.github.javaparser.printer; import com.github.javaparser.JavaParser; +import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.expr.Expression; import org.junit.Test; @@ -26,4 +27,16 @@ public class JsonPrinterTest { assertEquals("{\"operator\":\"PLUS\",\"left\":{\"value\":\"1\"},\"right\":{\"value\":\"1\"}}", output); } + + @Test + public void issue1338() { + String code = "class Test {" + + " public void method() {" + + " String.format(\"I'm using %s\", \"JavaParser\");" + + " }" + + "}"; + CompilationUnit unit = JavaParser.parse(code); + JsonPrinter printer = new JsonPrinter(true); + printer.output(unit); + } }
\ No newline at end of file |