New upstream version 3.6.27
Emmanuel Bourg
2 years ago
3 | 3 | script: mvn test -P AlsoSlowTests |
4 | 4 | jdk: |
5 | 5 | - oraclejdk8 |
6 | - oraclejdk10 | |
6 | # - openjdk11 | |
7 | 7 | notifications: |
8 | 8 | webhooks: |
9 | 9 | urls: |
0 | Version 3.6.27 | |
1 | ------------------ | |
2 | * The Json serialization now serializes more fields, | |
3 | which *should* not impact existing code. | |
4 | ||
5 | [issues resolved](https://github.com/javaparser/javaparser/milestone/111?closed=1) | |
6 | ||
0 | 7 | Version 3.6.26 |
1 | 8 | ------------------ |
2 | 9 | * BREAKING: Node.getData now throws an exception if the data was not set before. |
3 | 10 | This can be rewritten by checking with Node.containsData before doing getData. |
4 | 11 | |
5 | [issues resolved](https://github.com/javaparser/javaparser/milestone/109?closed=1) | |
12 | [issues resolved](https://github.com/javaparser/javaparser/milestone/110?closed=1) | |
6 | 13 | |
7 | 14 | Version 3.6.25 |
8 | 15 | ------------------ |
1 | 1 | <parent> |
2 | 2 | <artifactId>javaparser-parent</artifactId> |
3 | 3 | <groupId>com.github.javaparser</groupId> |
4 | <version>3.6.26</version> | |
4 | <version>3.6.27</version> | |
5 | 5 | </parent> |
6 | 6 | <modelVersion>4.0.0</modelVersion> |
7 | 7 |
21 | 21 | package com.github.javaparser.ast; |
22 | 22 | |
23 | 23 | import java.util.EnumSet; |
24 | import java.util.Set; | |
24 | 25 | |
25 | 26 | /** |
26 | 27 | * One of the modifiers known in Java. |
57 | 58 | return EnumSet.of(this); |
58 | 59 | } |
59 | 60 | |
60 | public static AccessSpecifier getAccessSpecifier(EnumSet<Modifier> modifiers) { | |
61 | public static AccessSpecifier getAccessSpecifier(Set<Modifier> modifiers) { | |
61 | 62 | if (modifiers.contains(Modifier.PUBLIC)) { |
62 | 63 | return AccessSpecifier.PUBLIC; |
63 | 64 | } else if (modifiers.contains(Modifier.PROTECTED)) { |
2 | 2 | <parent> |
3 | 3 | <artifactId>javaparser-parent</artifactId> |
4 | 4 | <groupId>com.github.javaparser</groupId> |
5 | <version>3.6.26</version> | |
5 | <version>3.6.27</version> | |
6 | 6 | </parent> |
7 | 7 | <modelVersion>4.0.0</modelVersion> |
8 | 8 |
2 | 2 | <parent> |
3 | 3 | <artifactId>javaparser-parent</artifactId> |
4 | 4 | <groupId>com.github.javaparser</groupId> |
5 | <version>3.6.26</version> | |
5 | <version>3.6.27</version> | |
6 | 6 | </parent> |
7 | 7 | <modelVersion>4.0.0</modelVersion> |
8 | 8 |
1 | 1 | <parent> |
2 | 2 | <artifactId>javaparser-parent</artifactId> |
3 | 3 | <groupId>com.github.javaparser</groupId> |
4 | <version>3.6.26</version> | |
4 | <version>3.6.27</version> | |
5 | 5 | </parent> |
6 | 6 | <modelVersion>4.0.0</modelVersion> |
7 | 7 |
+71
-10
19 | 19 | */ |
20 | 20 | package com.github.javaparser.serialization; |
21 | 21 | |
22 | import com.github.javaparser.*; | |
23 | import com.github.javaparser.ast.CompilationUnit; | |
22 | 24 | import com.github.javaparser.ast.Modifier; |
23 | 25 | import com.github.javaparser.ast.Node; |
24 | 26 | import com.github.javaparser.ast.NodeList; |
27 | import com.github.javaparser.ast.comments.Comment; | |
25 | 28 | import com.github.javaparser.metamodel.BaseNodeMetaModel; |
26 | 29 | import com.github.javaparser.metamodel.PropertyMetaModel; |
27 | 30 | import com.github.javaparser.utils.Log; |
28 | 31 | |
29 | import javax.json.JsonArray; | |
30 | import javax.json.JsonObject; | |
31 | import javax.json.JsonReader; | |
32 | import javax.json.JsonString; | |
33 | import java.util.EnumSet; | |
34 | import java.util.HashMap; | |
35 | import java.util.Map; | |
32 | import javax.json.*; | |
33 | import java.util.*; | |
36 | 34 | import java.util.stream.Collectors; |
37 | 35 | |
38 | 36 | import static com.github.javaparser.ast.NodeList.toNodeList; |
56 | 54 | BaseNodeMetaModel nodeMetaModel = getNodeMetaModel(Class.forName(serializedNodeType)) |
57 | 55 | .orElseThrow(() -> new IllegalStateException("Trying to deserialize an unknown node type: " + serializedNodeType)); |
58 | 56 | Map<String, Object> parameters = new HashMap<>(); |
57 | Map<String, JsonValue> deferredJsonValues = new HashMap<>(); | |
58 | ||
59 | 59 | for (String name : nodeJson.keySet()) { |
60 | 60 | if (name.equals(SERIALIZED_CLASS_KEY)) { |
61 | 61 | continue; |
62 | 62 | } |
63 | 63 | |
64 | PropertyMetaModel propertyMetaModel = nodeMetaModel.getAllPropertyMetaModels().stream() | |
64 | Optional<PropertyMetaModel> optionalPropertyMetaModel = nodeMetaModel.getAllPropertyMetaModels().stream() | |
65 | 65 | .filter(mm -> mm.getName().equals(name)) |
66 | .findFirst().orElseThrow(() -> new IllegalStateException("Unknown property: " + nodeMetaModel.getQualifiedClassName() + "." + name)); | |
66 | .findFirst(); | |
67 | if (!optionalPropertyMetaModel.isPresent()) { | |
68 | deferredJsonValues.put(name, nodeJson.get(name)); | |
69 | continue; | |
70 | } | |
67 | 71 | |
72 | PropertyMetaModel propertyMetaModel = optionalPropertyMetaModel.get(); | |
68 | 73 | if (propertyMetaModel.isNodeList()) { |
69 | 74 | JsonArray nodeListJson = nodeJson.getJsonArray(name); |
70 | 75 | parameters.put(name, deserializeNodeList(nodeListJson)); |
87 | 92 | } |
88 | 93 | } |
89 | 94 | |
90 | return nodeMetaModel.construct(parameters); | |
95 | Node node = nodeMetaModel.construct(parameters); | |
96 | // Note: comment is a property meta model, but it is not listed as constructor parameter and not attached to node | |
97 | // @see BaseNodeMetaModel.getConstructorParameters | |
98 | if (parameters.containsKey("comment")) { | |
99 | node.setComment((Comment)parameters.get("comment")); | |
100 | } | |
101 | ||
102 | for (String name : deferredJsonValues.keySet()) { | |
103 | if (!readNonMetaProperties(name, deferredJsonValues.get(name), node)) { | |
104 | throw new IllegalStateException("Unknown property: " + nodeMetaModel.getQualifiedClassName() + "." + name); | |
105 | } | |
106 | } | |
107 | setSymbolResolverIfCompilationUnit(node); | |
108 | ||
109 | return node; | |
91 | 110 | } catch (ClassNotFoundException e) { |
92 | 111 | throw new RuntimeException(e); |
93 | 112 | } |
100 | 119 | private NodeList<?> deserializeNodeList(JsonArray nodeListJson) { |
101 | 120 | return nodeListJson.stream().map(nodeJson -> deserializeObject((JsonObject) nodeJson)).collect(toNodeList()); |
102 | 121 | } |
122 | ||
123 | protected boolean readNonMetaProperties(String name, JsonValue jsonValue, Node node) { | |
124 | return readRange(name, jsonValue, node) | |
125 | || readTokenRange(name, jsonValue, node); | |
126 | } | |
127 | ||
128 | protected boolean readRange(String name, JsonValue jsonValue, Node node) { | |
129 | if (name.equals("range")) { | |
130 | JsonObject jsonObject = (JsonObject)jsonValue; | |
131 | Position begin = new Position(jsonObject.getInt("beginLine"), jsonObject.getInt("beginColumn")); | |
132 | Position end = new Position(jsonObject.getInt("endLine"), jsonObject.getInt("endColumn")); | |
133 | node.setRange(new Range(begin, end)); | |
134 | return true; | |
135 | } | |
136 | return false; | |
137 | } | |
138 | ||
139 | protected boolean readTokenRange(String name, JsonValue jsonValue, Node node) { | |
140 | if (name.equals("tokenRange")) { | |
141 | JsonObject jsonObject = (JsonObject)jsonValue; | |
142 | JavaToken begin = readToken("beginToken", jsonObject); | |
143 | JavaToken end = readToken("endToken", jsonObject); | |
144 | node.setTokenRange(new TokenRange(begin, end)); | |
145 | return true; | |
146 | } | |
147 | return false; | |
148 | } | |
149 | ||
150 | protected JavaToken readToken(String name, JsonObject jsonObject) { | |
151 | JsonObject tokenJson = jsonObject.getJsonObject(name); | |
152 | return new JavaToken( | |
153 | tokenJson.getInt("kind"), | |
154 | tokenJson.getString("text") | |
155 | ); | |
156 | } | |
157 | ||
158 | private void setSymbolResolverIfCompilationUnit(Node node) { | |
159 | if (node instanceof CompilationUnit && JavaParser.getStaticConfiguration().getSymbolResolver().isPresent()) { | |
160 | CompilationUnit cu = (CompilationUnit)node; | |
161 | cu.setData(Node.SYMBOL_RESOLVER_KEY, JavaParser.getStaticConfiguration().getSymbolResolver().get()); | |
162 | } | |
163 | } | |
103 | 164 | } |
+39
-0
19 | 19 | */ |
20 | 20 | package com.github.javaparser.serialization; |
21 | 21 | |
22 | import com.github.javaparser.JavaToken; | |
23 | import com.github.javaparser.Range; | |
24 | import com.github.javaparser.TokenRange; | |
22 | 25 | import com.github.javaparser.ast.Node; |
23 | 26 | import com.github.javaparser.ast.NodeList; |
24 | 27 | import com.github.javaparser.metamodel.BaseNodeMetaModel; |
53 | 56 | generator.writeStartObject(nodeName); |
54 | 57 | } |
55 | 58 | generator.write(SERIALIZED_CLASS_KEY, node.getClass().getName()); |
59 | this.writeNonMetaProperties(node, generator); | |
56 | 60 | for (PropertyMetaModel propertyMetaModel : nodeMetaModel.getAllPropertyMetaModels()) { |
57 | 61 | String name = propertyMetaModel.getName(); |
58 | 62 | Object value = propertyMetaModel.getValue(node); |
80 | 84 | } |
81 | 85 | generator.writeEnd(); |
82 | 86 | } |
87 | ||
88 | protected void writeNonMetaProperties(Node node, JsonGenerator generator) { | |
89 | this.writeRange(node, generator); | |
90 | this.writeTokens(node, generator); | |
91 | } | |
92 | ||
93 | protected void writeRange(Node node, JsonGenerator generator) { | |
94 | if (node.getRange().isPresent()) { | |
95 | Range range = node.getRange().get(); | |
96 | generator.writeStartObject("range"); | |
97 | generator.write("beginLine", range.begin.line); | |
98 | generator.write("beginColumn", range.begin.column); | |
99 | generator.write("endLine", range.end.line); | |
100 | generator.write("endColumn", range.end.column); | |
101 | generator.writeEnd(); | |
102 | } | |
103 | } | |
104 | ||
105 | protected void writeTokens(Node node, JsonGenerator generator) { | |
106 | if (node.getTokenRange().isPresent()) { | |
107 | TokenRange tokenRange = node.getTokenRange().get(); | |
108 | generator.writeStartObject("tokenRange"); | |
109 | writeToken("beginToken", tokenRange.getBegin(), generator); | |
110 | writeToken("endToken", tokenRange.getEnd(), generator); | |
111 | generator.writeEnd(); | |
112 | } | |
113 | } | |
114 | ||
115 | protected void writeToken(String name, JavaToken token, JsonGenerator generator) { | |
116 | generator.writeStartObject(name); | |
117 | generator.write("kind", token.getKind()); | |
118 | generator.write("text", token.getText()); | |
119 | generator.writeEnd(); | |
120 | } | |
121 | ||
83 | 122 | } |
+79
-0
20 | 20 | package com.github.javaparser.serialization; |
21 | 21 | |
22 | 22 | import com.github.javaparser.JavaParser; |
23 | import com.github.javaparser.Position; | |
24 | import com.github.javaparser.Range; | |
25 | import com.github.javaparser.TokenRange; | |
23 | 26 | import com.github.javaparser.ast.CompilationUnit; |
24 | 27 | import com.github.javaparser.ast.Node; |
28 | import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; | |
29 | import com.github.javaparser.ast.body.MethodDeclaration; | |
30 | import com.github.javaparser.ast.comments.Comment; | |
25 | 31 | import com.github.javaparser.ast.expr.Expression; |
26 | 32 | import com.github.javaparser.ast.type.Type; |
33 | import com.github.javaparser.resolution.SymbolResolver; | |
34 | import com.github.javaparser.resolution.types.ResolvedType; | |
27 | 35 | import org.junit.jupiter.api.Test; |
28 | 36 | |
29 | 37 | import javax.json.Json; |
38 | import javax.json.JsonObject; | |
39 | import javax.json.stream.JsonGenerator; | |
30 | 40 | |
31 | 41 | import java.io.StringReader; |
42 | import java.util.HashMap; | |
43 | import java.util.LinkedList; | |
44 | import java.util.List; | |
45 | import java.util.Map; | |
32 | 46 | |
33 | 47 | import static com.github.javaparser.serialization.JavaParserJsonSerializerTest.*; |
34 | 48 | import static com.github.javaparser.utils.Utils.EOL; |
104 | 118 | assertEquals(type.hashCode(), deserialized.hashCode()); |
105 | 119 | } |
106 | 120 | |
121 | @Test | |
122 | void testComment() { | |
123 | CompilationUnit cu = JavaParser.parse("/* block comment */\npublic class X{ \n // line comment\npublic void test() {}\n}"); | |
124 | String serialized = serialize(cu, false); | |
125 | ||
126 | CompilationUnit deserialized = (CompilationUnit)deserializer.deserializeObject(Json.createReader(new StringReader(serialized))); | |
127 | ClassOrInterfaceDeclaration classXDeclaration = deserialized.getClassByName("X").get(); | |
128 | assertEquals(classXDeclaration.getComment().isPresent(), true); | |
129 | ||
130 | Comment comment = classXDeclaration.getComment().get(); | |
131 | assertEquals(comment.getClass().getName(), "com.github.javaparser.ast.comments.BlockComment"); | |
132 | assertEquals(comment.getContent(), " block comment "); | |
133 | ||
134 | MethodDeclaration methodDeclaration = classXDeclaration.getMethods().get(0); | |
135 | assertEquals(methodDeclaration.getComment().isPresent(), true); | |
136 | assertEquals(methodDeclaration.getComment().get().getClass().getName(), "com.github.javaparser.ast.comments.LineComment"); | |
137 | assertEquals(methodDeclaration.getComment().get().getContent(), " line comment"); | |
138 | } | |
139 | ||
140 | @Test | |
141 | void testNonMetaProperties() { | |
142 | CompilationUnit cu = JavaParser.parse("public class X{} class Z{}"); | |
143 | String serialized = serialize(cu, false); | |
144 | ||
145 | CompilationUnit deserialized = (CompilationUnit)deserializer.deserializeObject(Json.createReader(new StringReader(serialized))); | |
146 | ||
147 | assertEquals(deserialized.getRange().isPresent(), true); | |
148 | Range range = deserialized.getRange().get(); | |
149 | assertEquals(range.begin.line, 1); | |
150 | assertEquals(range.begin.line, 1); | |
151 | assertEquals(range.end.column, 26); | |
152 | ||
153 | assertEquals(deserialized.getTokenRange().isPresent(), true); | |
154 | TokenRange tokenRange = deserialized.getTokenRange().get(); | |
155 | assertEquals(tokenRange.getBegin().getText(), "public"); | |
156 | assertEquals(tokenRange.getEnd().getText(), ""); | |
157 | } | |
158 | ||
159 | @Test | |
160 | void testAttachingSymbolResolver() { | |
161 | SymbolResolver stubResolver = new SymbolResolver() { | |
162 | @Override | |
163 | public <T> T resolveDeclaration(Node node, Class<T> resultClass) { | |
164 | return null; | |
165 | } | |
166 | ||
167 | @Override | |
168 | public <T> T toResolvedType(Type javaparserType, Class<T> resultClass) { | |
169 | return null; | |
170 | } | |
171 | ||
172 | @Override | |
173 | public ResolvedType calculateType(Expression expression) { | |
174 | return null; | |
175 | } | |
176 | }; | |
177 | JavaParser.getStaticConfiguration().setSymbolResolver(stubResolver); | |
178 | CompilationUnit cu = JavaParser.parse("public class X{} class Z{}"); | |
179 | String serialized = serialize(cu, false); | |
180 | ||
181 | CompilationUnit deserialized = (CompilationUnit)deserializer.deserializeObject(Json.createReader(new StringReader(serialized))); | |
182 | assertEquals(deserialized.containsData(Node.SYMBOL_RESOLVER_KEY), true); | |
183 | assertEquals(deserialized.getData(Node.SYMBOL_RESOLVER_KEY), stubResolver); | |
184 | } | |
185 | ||
107 | 186 | /** |
108 | 187 | * Assert that "actual" equals "expected", and that any EOL characters in "actual" are correct for the platform. |
109 | 188 | */ |
+3
-1
29 | 29 | import javax.json.stream.JsonGeneratorFactory; |
30 | 30 | import java.io.StringWriter; |
31 | 31 | import java.util.HashMap; |
32 | import java.util.LinkedList; | |
33 | import java.util.List; | |
32 | 34 | import java.util.Map; |
33 | 35 | |
34 | 36 | import static org.junit.jupiter.api.Assertions.assertEquals; |
40 | 42 | |
41 | 43 | String serialized = serialize(cu, false); |
42 | 44 | |
43 | assertEquals("{\"!\":\"com.github.javaparser.ast.CompilationUnit\",\"imports\":[],\"types\":[{\"!\":\"com.github.javaparser.ast.body.ClassOrInterfaceDeclaration\",\"extendedTypes\":[],\"implementedTypes\":[],\"isInterface\":\"false\",\"typeParameters\":[],\"members\":[{\"!\":\"com.github.javaparser.ast.body.FieldDeclaration\",\"modifiers\":[],\"variables\":[{\"!\":\"com.github.javaparser.ast.body.VariableDeclarator\",\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"identifier\":\"y\"},\"type\":{\"!\":\"com.github.javaparser.ast.type.ClassOrInterfaceType\",\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"identifier\":\"Y\"},\"scope\":{\"!\":\"com.github.javaparser.ast.type.ClassOrInterfaceType\",\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"identifier\":\"util\"},\"scope\":{\"!\":\"com.github.javaparser.ast.type.ClassOrInterfaceType\",\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"identifier\":\"java\"},\"annotations\":[]},\"annotations\":[]},\"annotations\":[]}}],\"annotations\":[]}],\"modifiers\":[],\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"identifier\":\"X\"},\"annotations\":[]}]}", serialized); | |
45 | assertEquals("{\"!\":\"com.github.javaparser.ast.CompilationUnit\",\"range\":{\"beginLine\":1,\"beginColumn\":1,\"endLine\":1,\"endColumn\":23},\"tokenRange\":{\"beginToken\":{\"kind\":19,\"text\":\"class\"},\"endToken\":{\"kind\":0,\"text\":\"\"}},\"imports\":[],\"types\":[{\"!\":\"com.github.javaparser.ast.body.ClassOrInterfaceDeclaration\",\"range\":{\"beginLine\":1,\"beginColumn\":1,\"endLine\":1,\"endColumn\":23},\"tokenRange\":{\"beginToken\":{\"kind\":19,\"text\":\"class\"},\"endToken\":{\"kind\":95,\"text\":\"}\"}},\"extendedTypes\":[],\"implementedTypes\":[],\"isInterface\":\"false\",\"typeParameters\":[],\"members\":[{\"!\":\"com.github.javaparser.ast.body.FieldDeclaration\",\"range\":{\"beginLine\":1,\"beginColumn\":9,\"endLine\":1,\"endColumn\":22},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"java\"},\"endToken\":{\"kind\":98,\"text\":\";\"}},\"modifiers\":[],\"variables\":[{\"!\":\"com.github.javaparser.ast.body.VariableDeclarator\",\"range\":{\"beginLine\":1,\"beginColumn\":21,\"endLine\":1,\"endColumn\":21},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"y\"},\"endToken\":{\"kind\":89,\"text\":\"y\"}},\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"range\":{\"beginLine\":1,\"beginColumn\":21,\"endLine\":1,\"endColumn\":21},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"y\"},\"endToken\":{\"kind\":89,\"text\":\"y\"}},\"identifier\":\"y\"},\"type\":{\"!\":\"com.github.javaparser.ast.type.ClassOrInterfaceType\",\"range\":{\"beginLine\":1,\"beginColumn\":9,\"endLine\":1,\"endColumn\":19},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"java\"},\"endToken\":{\"kind\":89,\"text\":\"Y\"}},\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"range\":{\"beginLine\":1,\"beginColumn\":19,\"endLine\":1,\"endColumn\":19},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"Y\"},\"endToken\":{\"kind\":89,\"text\":\"Y\"}},\"identifier\":\"Y\"},\"scope\":{\"!\":\"com.github.javaparser.ast.type.ClassOrInterfaceType\",\"range\":{\"beginLine\":1,\"beginColumn\":9,\"endLine\":1,\"endColumn\":17},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"java\"},\"endToken\":{\"kind\":89,\"text\":\"util\"}},\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"range\":{\"beginLine\":1,\"beginColumn\":14,\"endLine\":1,\"endColumn\":17},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"util\"},\"endToken\":{\"kind\":89,\"text\":\"util\"}},\"identifier\":\"util\"},\"scope\":{\"!\":\"com.github.javaparser.ast.type.ClassOrInterfaceType\",\"range\":{\"beginLine\":1,\"beginColumn\":9,\"endLine\":1,\"endColumn\":12},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"java\"},\"endToken\":{\"kind\":89,\"text\":\"java\"}},\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"range\":{\"beginLine\":1,\"beginColumn\":9,\"endLine\":1,\"endColumn\":12},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"java\"},\"endToken\":{\"kind\":89,\"text\":\"java\"}},\"identifier\":\"java\"},\"annotations\":[]},\"annotations\":[]},\"annotations\":[]}}],\"annotations\":[]}],\"modifiers\":[],\"name\":{\"!\":\"com.github.javaparser.ast.expr.SimpleName\",\"range\":{\"beginLine\":1,\"beginColumn\":7,\"endLine\":1,\"endColumn\":7},\"tokenRange\":{\"beginToken\":{\"kind\":89,\"text\":\"X\"},\"endToken\":{\"kind\":89,\"text\":\"X\"}},\"identifier\":\"X\"},\"annotations\":[]}]}", serialized); | |
44 | 46 | } |
45 | 47 | |
46 | 48 | static String serialize(Node node, boolean prettyPrint) { |
1 | 1 | <parent> |
2 | 2 | <artifactId>javaparser-parent</artifactId> |
3 | 3 | <groupId>com.github.javaparser</groupId> |
4 | <version>3.6.26</version> | |
4 | <version>3.6.27</version> | |
5 | 5 | </parent> |
6 | 6 | <modelVersion>4.0.0</modelVersion> |
7 | 7 |
2 | 2 | <parent> |
3 | 3 | <artifactId>javaparser-parent</artifactId> |
4 | 4 | <groupId>com.github.javaparser</groupId> |
5 | <version>3.6.26</version> | |
5 | <version>3.6.27</version> | |
6 | 6 | </parent> |
7 | 7 | <modelVersion>4.0.0</modelVersion> |
8 | 8 |
2 | 2 | <parent> |
3 | 3 | <artifactId>javaparser-parent</artifactId> |
4 | 4 | <groupId>com.github.javaparser</groupId> |
5 | <version>3.6.26</version> | |
5 | <version>3.6.27</version> | |
6 | 6 | </parent> |
7 | 7 | <modelVersion>4.0.0</modelVersion> |
8 | 8 |
2 | 2 | <parent> |
3 | 3 | <artifactId>javaparser-parent</artifactId> |
4 | 4 | <groupId>com.github.javaparser</groupId> |
5 | <version>3.6.26</version> | |
5 | <version>3.6.27</version> | |
6 | 6 | </parent> |
7 | 7 | <modelVersion>4.0.0</modelVersion> |
8 | 8 |
2 | 2 | <parent> |
3 | 3 | <artifactId>javaparser-parent</artifactId> |
4 | 4 | <groupId>com.github.javaparser</groupId> |
5 | <version>3.6.26</version> | |
5 | <version>3.6.27</version> | |
6 | 6 | </parent> |
7 | 7 | <modelVersion>4.0.0</modelVersion> |
8 | 8 |
14 | 14 | <groupId>com.github.javaparser</groupId> |
15 | 15 | <artifactId>javaparser-parent</artifactId> |
16 | 16 | <packaging>pom</packaging> |
17 | <version>3.6.26</version> | |
17 | <version>3.6.27</version> | |
18 | 18 | |
19 | 19 | <name>javaparser-parent</name> |
20 | 20 | <url>https://github.com/javaparser</url> |
134 | 134 | <connection>scm:git:git://github.com/javaparser/javaparser.git</connection> |
135 | 135 | <developerConnection>scm:git:git@github.com:javaparser/javaparser.git</developerConnection> |
136 | 136 | <url>https://github.com/javaparser/javaparser.git</url> |
137 | <tag>javaparser-parent-3.6.26</tag> | |
137 | <tag>javaparser-parent-3.6.27</tag> | |
138 | 138 | </scm> |
139 | 139 | |
140 | 140 | <issueManagement> |
27 | 27 | <dependency> |
28 | 28 | <groupId>com.github.javaparser</groupId> |
29 | 29 | <artifactId>javaparser-symbol-solver-core</artifactId> |
30 | <version>3.6.26</version> | |
30 | <version>3.6.27</version> | |
31 | 31 | </dependency> |
32 | 32 | ``` |
33 | 33 | |
34 | 34 | **Gradle**: |
35 | 35 | |
36 | 36 | ``` |
37 | compile 'com.github.javaparser:javaparser-symbol-solver-core:3.6.26' | |
37 | compile 'com.github.javaparser:javaparser-symbol-solver-core:3.6.27' | |
38 | 38 | ``` |
39 | 39 | |
40 | 40 | Since Version 3.5.10, the JavaParser project includes the JavaSymbolSolver. |
49 | 49 | <dependency> |
50 | 50 | <groupId>com.github.javaparser</groupId> |
51 | 51 | <artifactId>javaparser-core</artifactId> |
52 | <version>3.6.26</version> | |
52 | <version>3.6.27</version> | |
53 | 53 | </dependency> |
54 | 54 | ``` |
55 | 55 | |
56 | 56 | **Gradle**: |
57 | 57 | |
58 | 58 | ``` |
59 | compile 'com.github.javaparser:javaparser-core:3.6.26' | |
59 | compile 'com.github.javaparser:javaparser-core:3.6.27' | |
60 | 60 | ``` |
61 | 61 | |
62 | 62 | Since version 3.6.17 the AST can be serialized to JSON. |
68 | 68 | <dependency> |
69 | 69 | <groupId>com.github.javaparser</groupId> |
70 | 70 | <artifactId>javaparser-core-serialization</artifactId> |
71 | <version>3.6.26</version> | |
71 | <version>3.6.27</version> | |
72 | 72 | </dependency> |
73 | 73 | ``` |
74 | 74 | |
75 | 75 | **Gradle**: |
76 | 76 | |
77 | 77 | ``` |
78 | compile 'com.github.javaparser:javaparser-core-serialization:3.6.26' | |
78 | compile 'com.github.javaparser:javaparser-core-serialization:3.6.27' | |
79 | 79 | ``` |
80 | 80 | |
81 | 81 | ## How To Compile Sources |