Skip to content

Commit 76734b1

Browse files
committed
0.13.0 - Added parameter modifier parsing support. Updated some toJson() methods to use JsonStringify.inst
1 parent a0ef508 commit 76734b1

35 files changed

+346
-233
lines changed

CHANGELOG.md

+23-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,29 @@ This project does its best to adhere to [Semantic Versioning](http://semver.org/
44

55

66
--------
7-
###[0.12.1](N/A) - 2016-10-02
7+
###[0.13.0](N/A) - 2016-10-26
8+
#### Added
9+
* Added ParameterSig and ParameterSigResolved 'parameterModifiers' field
10+
* Added KeywordUtil parameterModifiers() and isParameterModifier()
11+
12+
#### Changed
13+
__Parameter modifier parsing support__ (i.e. 'final' in Java or 'params' in C#):
14+
* MethodParametersParser.extractParamsFromSignature() to support parameter modifiers
15+
* Renamed CodeTokenizerBuilder addConstParser() -> addParser()
16+
* Added FieldDef.initializerToJson() 'preClosingComma' parameter
17+
* Updated dependencies, specifically jfile-io to 0.7.0 which no longer contains JsonWrite, so added json-stringify library for new equivalent JsonStringify class and updated related code
18+
* Updated toJson() methods to use JsonStringify.inst:
19+
* FieldDef
20+
* FieldDefResolved
21+
* FieldSig
22+
* FieldSigResolver
23+
* MethodSig
24+
* ParameterSig
25+
* ParameterSigResolved
26+
27+
28+
--------
29+
###[0.12.1](https://github.com/TeamworkGuy2/JParseCode/commit/a0ef508705fb685798e8762fbc08cd5a92eff273) - 2016-10-02
830
#### Changed
931
* Updated dependencies, specifically jfile-io to 0.7.0 which no longer contains JsonWrite, so added json-stringify library for new equivalent JsonStringify class and updated related code
1032

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
JParseCode
22
==============
3-
version: 0.12.1
3+
version: 0.13.0
44

55
In progress C#/Java/TypeScript parser tools built atop [JTextParser] (https://github.com/TeamworkGuy2/JTextParser), [Jackson] (https://github.com/FasterXML/jackson-core/) (core, databind, annotations) and half a dozen other utility libraries.
66

bin/jparse_code-with-tests.jar

2.23 KB
Binary file not shown.

bin/jparse_code.jar

2.01 KB
Binary file not shown.

package-lib.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version" : "0.12.1",
2+
"version" : "0.13.0",
33
"name" : "jparse-code",
44
"description" : "An in-progress suite of parsing/transpilation tools for C#, Java, and TypeScript code. Generates simple JSON ASTs.",
55
"homepage" : "https://github.com/TeamworkGuy2/JParseCode",

src/twg2/ast/interm/classes/ClassAst.java

+17-17
Original file line numberDiff line numberDiff line change
@@ -71,51 +71,51 @@ public Impl(T_SIG signature, List<List<String>> usingStatements, List<? extends
7171

7272
@Override
7373
public void toJson(Appendable dst, WriteSettings st) throws IOException {
74+
val json = JsonStringify.inst;
75+
7476
dst.append("{\n");
7577

76-
dst.append("\t\"classSignature\": ");
78+
json.indent('\t', dst).propName("classSignature", dst);
7779
signature.toJson(dst, st);
78-
dst.append(",\n");
7980

80-
dst.append("\t\"blockType\": \"" + blockType + "\",\n");
81+
json.comma("\n\t", dst).toProp("blockType", blockType.toString(), dst);
8182

82-
dst.append("\t\"using\": [");
83-
JsonStringify.join(usingStatements, ", ", dst, (us) -> '"' + NameUtil.joinFqName(us) + '"');
84-
dst.append("],\n");
83+
json.comma("\n\t", dst).propName("using", dst)
84+
.toStringArray(usingStatements, dst, (us) -> NameUtil.joinFqName(us));
8585

8686
if(enumMembers != null && blockType.isEnum()) {
87-
dst.append("\t\"enumMembers\": [");
87+
json.comma("\n\t", dst).propName("enumMembers", dst).append('[', dst);
8888
if(enumMembers.size() > 0) {
8989
dst.append("\n\t\t");
90-
JsonStringify.joinConsume(enumMembers, ",\n\t\t", dst, (f) -> f.toJson(dst, st));
90+
json.joinConsume(enumMembers, ",\n\t\t", dst, (f) -> f.toJson(dst, st));
9191
dst.append("\n\t");
9292
}
93-
dst.append("],\n");
93+
dst.append("]");
9494
}
9595

96-
dst.append("\t\"fields\": [");
96+
json.comma("\n\t", dst).propName("fields", dst).append('[', dst);
9797
if(fields.size() > 0) {
9898
dst.append("\n\t\t");
99-
JsonStringify.joinConsume(fields, ",\n\t\t", dst, (f) -> f.toJson(dst, st));
99+
json.joinConsume(fields, ",\n\t\t", dst, (f) -> f.toJson(dst, st));
100100
dst.append("\n\t");
101101
}
102-
dst.append("],\n");
102+
dst.append("]");
103103

104-
dst.append("\t\"methods\": [");
104+
json.comma("\n\t", dst).propName("methods", dst).append('[', dst);
105105
if(methods.size() > 0) {
106106
dst.append("\n\t\t");
107-
JsonStringify.joinConsume(methods, ",\n\t\t", dst, (m) -> m.toJson(dst, st));
107+
json.joinConsume(methods, ",\n\t\t", dst, (m) -> m.toJson(dst, st));
108108
dst.append("\n\t");
109109
}
110-
dst.append("]\n");
110+
dst.append("]");
111111

112-
dst.append("}");
112+
dst.append("\n}");
113113
}
114114

115115

116116
@Override
117117
public String toString() {
118-
return blockType + " " + signature.toString() + " { " + StringJoin.Objects.join(fields, "; ") + " " + StringJoin.Objects.join(methods, "; ") + " }";
118+
return blockType + " " + signature.toString() + " { " + StringJoin.join(fields, "; ") + " " + StringJoin.join(methods, "; ") + " }";
119119
}
120120

121121
}

src/twg2/ast/interm/classes/ClassSig.java

+21-25
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import lombok.AllArgsConstructor;
77
import lombok.Getter;
8+
import lombok.val;
89
import twg2.annotations.Immutable;
910
import twg2.ast.interm.type.TypeSig;
1011
import twg2.io.json.stringify.JsonStringify;
@@ -55,27 +56,25 @@ public boolean isGeneric() {
5556

5657
@Override
5758
public void toJson(Appendable dst, WriteSettings st) throws IOException {
59+
val json = JsonStringify.inst;
60+
5861
dst.append("{ ");
59-
dst.append("\"access\": \"" + accessModifier + "\", ");
60-
dst.append("\"name\": \"" + (st.fullClassName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)) + "\"");
62+
63+
json.toProp("access", accessModifier.toSrc(), dst);
64+
json.comma(dst).toProp("name", (st.fullClassName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)), dst);
6165

6266
if(declarationType != null) {
63-
dst.append(", ");
64-
dst.append("\"declarationType\": \"" + declarationType + "\"");
67+
json.comma(dst).toProp("declarationType", declarationType, dst);
6568
}
6669

6770
if(params != null && params.size() > 0) {
68-
dst.append(", ");
69-
dst.append("\"genericParameters\": [");
70-
JsonStringify.joinConsume(params, ", ", dst, (p) -> p.toJson(dst, st));
71-
dst.append("]");
71+
json.comma(dst).propName("genericParameters", dst)
72+
.toArrayConsume(params, dst, (p) -> p.toJson(dst, st));
7273
}
7374

7475
if(extendImplementSimpleNames.size() > 0) {
75-
dst.append(", ");
76-
dst.append("\"extendImplementClassNames\": [");
77-
JsonStringify.join(extendImplementSimpleNames, ", ", dst, (n) -> '"' + n + '"');
78-
dst.append("] ");
76+
json.comma(dst).propName("extendImplementClassNames", dst)
77+
.toStringArray(extendImplementSimpleNames, dst);
7978
}
8079

8180
dst.append(" }");
@@ -122,29 +121,26 @@ public boolean isGeneric() {
122121

123122
@Override
124123
public void toJson(Appendable dst, WriteSettings st) throws IOException {
124+
val json = JsonStringify.inst;
125+
125126
dst.append("{ ");
126-
dst.append("\"access\": \"" + accessModifier + "\", ");
127-
dst.append("\"name\": \"" + (st.fullClassName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)) + "\", ");
128-
dst.append("\"declarationType\": \"" + declarationType + "\"");
127+
json.toProp("access", accessModifier.toSrc(), dst).comma(dst)
128+
.toProp("name", (st.fullClassName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)), dst).comma(dst)
129+
.toProp("declarationType", declarationType, dst);
129130

130131
if(params != null && params.size() > 0) {
131-
dst.append(", ");
132-
dst.append("\"genericParameters\": [");
133-
JsonStringify.joinConsume(params, ", ", dst, (p) -> p.toJson(dst, st));
134-
dst.append("]");
132+
json.comma(dst).append("\"genericParameters\": ", dst);
133+
json.toArrayConsume(params, dst, (p) -> p.toJson(dst, st));
135134
}
136135

137136
if(extendClass != null) {
138-
dst.append(", ");
139-
dst.append("\"extendClassName\": ");
137+
json.comma(dst).append("\"extendClassName\": ", dst);
140138
extendClass.toJson(dst, st);
141139
}
142140

143141
if(implementInterfaces.size() > 0) {
144-
dst.append(", ");
145-
dst.append("\"implementClassNames\": [");
146-
JsonStringify.joinConsume(implementInterfaces, ", ", dst, (intfType) -> intfType.toJson(dst, st));
147-
dst.append("] ");
142+
json.comma(dst).append("\"implementClassNames\": ", dst);
143+
json.toArrayConsume(implementInterfaces, dst, (intfType) -> intfType.toJson(dst, st));
148144
}
149145

150146
dst.append(" }");

src/twg2/ast/interm/field/FieldDef.java

+19-16
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.List;
55

66
import lombok.Getter;
7+
import lombok.val;
78
import twg2.annotations.Immutable;
89
import twg2.ast.interm.annotation.AnnotationSig;
910
import twg2.ast.interm.type.TypeSig.TypeSigSimple;
@@ -35,26 +36,24 @@ public FieldDef(String name, List<String> fullName, TypeSigSimple fieldType, Lis
3536

3637
@Override
3738
public void toJson(Appendable dst, WriteSettings st) throws IOException {
39+
val json = JsonStringify.inst;
40+
3841
dst.append("{ ");
39-
dst.append("\"name\": \"" + (st.fullFieldName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)) + "\", ");
42+
json.toProp("name", (st.fullFieldName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)), dst);
4043

41-
dst.append("\"type\": ");
44+
json.comma(dst).propName("type", dst);
4245
fieldType.toJson(dst, st);
43-
dst.append(", ");
4446

45-
dst.append("\"accessModifiers\": [");
46-
JsonStringify.join(accessModifiers, ", ", dst, (acs) -> '"' + acs.toSrc() + '"');
47-
dst.append("], ");
47+
json.comma(dst).propName("accessModifiers", dst)
48+
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4849

49-
dst.append("\"annotations\": [");
50-
JsonStringify.joinConsume(annotations, ", ", dst, (ann) -> ann.toJson(dst, st));
51-
dst.append("], ");
50+
json.comma(dst).propName("annotations", dst)
51+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
5252

53-
initializerToJson(initializer, dst, st);
53+
initializerToJson(initializer, true, dst, st);
5454

55-
dst.append("\"comments\": [");
56-
JsonStringify.joinConsume(comments, ", ", dst, (str) -> { dst.append('"'); StringEscapeJson.toJsonString(str, 0, str.length(), dst); dst.append('"'); });
57-
dst.append("]");
55+
json.comma(dst).propName("comments", dst)
56+
.toStringArray(comments, dst);
5857

5958
dst.append(" }");
6059
}
@@ -69,12 +68,15 @@ public String toString() {
6968
/** Write a field initializer to a JSON field named 'initializer' if the value is a number, boolean, string, or null literal, else write it to a field named 'initializerExpression'
7069
* @throws IOException
7170
*/
72-
public static void initializerToJson(SimpleTree<CodeFragment> astNode, Appendable dst, WriteSettings st) throws IOException {
71+
public static void initializerToJson(SimpleTree<CodeFragment> astNode, boolean preClosingComma, Appendable dst, WriteSettings st) throws IOException {
7372
CodeFragment data = null;
7473
boolean isNumOrBoolOrNull = false;
7574
if(astNode != null && !astNode.hasChildren() && (data = astNode.getData()) != null &&
7675
(data.getFragmentType() == CodeFragmentType.STRING ||
7776
(isNumOrBoolOrNull = (data.getFragmentType() == CodeFragmentType.NUMBER || DataTypeExtractor.isBooleanLiteral(data) || DataTypeExtractor.isNullLiteral(data))))) {
77+
if(preClosingComma) {
78+
dst.append(", ");
79+
}
7880
dst.append("\"initializer\": ");
7981
if(isNumOrBoolOrNull) {
8082
dst.append(data.getText());
@@ -84,9 +86,11 @@ public static void initializerToJson(SimpleTree<CodeFragment> astNode, Appendabl
8486
dst.append(StringEscapeJson.toJsonString(data.getText()));
8587
dst.append('"');
8688
}
87-
dst.append(", ");
8889
}
8990
else if(astNode != null && astNode.hasChildren()) {
91+
if(preClosingComma) {
92+
dst.append(", ");
93+
}
9094
dst.append("\"initializerExpression\": ");
9195
if((data = astNode.getData()) != null && !DataTypeExtractor.isNullLiteral(data)) {
9296
dst.append('"');
@@ -96,7 +100,6 @@ else if(astNode != null && astNode.hasChildren()) {
96100
else {
97101
dst.append(null);
98102
}
99-
dst.append(", ");
100103
}
101104
}
102105

src/twg2/ast/interm/field/FieldDefResolved.java

+12-14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.List;
55

66
import lombok.Getter;
7+
import lombok.val;
78
import twg2.annotations.Immutable;
89
import twg2.ast.interm.annotation.AnnotationSig;
910
import twg2.ast.interm.type.TypeSig.TypeSigResolved;
@@ -12,7 +13,6 @@
1213
import twg2.parser.codeParser.tools.NameUtil;
1314
import twg2.parser.fragment.CodeFragment;
1415
import twg2.parser.output.WriteSettings;
15-
import twg2.text.stringEscape.StringEscapeJson;
1616
import twg2.treeLike.simpleTree.SimpleTree;
1717

1818
/** A {@link FieldSigResolved} with an initializer
@@ -33,26 +33,24 @@ public FieldDefResolved(String name, List<String> fullName, TypeSigResolved fiel
3333

3434
@Override
3535
public void toJson(Appendable dst, WriteSettings st) throws IOException {
36+
val json = JsonStringify.inst;
37+
3638
dst.append("{ ");
37-
dst.append("\"name\": \"" + (st.fullFieldName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)) + "\", ");
39+
json.toProp("name", (st.fullFieldName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)), dst);
3840

39-
dst.append("\"type\": ");
41+
json.comma(dst).propName("type", dst);
4042
fieldType.toJson(dst, st);
41-
dst.append(", ");
4243

43-
dst.append("\"accessModifiers\": [");
44-
JsonStringify.join(accessModifiers, ", ", dst, (acs) -> '"' + acs.toSrc() + '"');
45-
dst.append("], ");
44+
json.comma(dst).propName("accessModifiers", dst)
45+
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4646

47-
dst.append("\"annotations\": [");
48-
JsonStringify.joinConsume(annotations, ", ", dst, (ann) -> ann.toJson(dst, st));
49-
dst.append("], ");
47+
json.comma(dst).propName("annotations", dst)
48+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
5049

51-
FieldDef.initializerToJson(initializer, dst, st);
50+
FieldDef.initializerToJson(initializer, true, dst, st);
5251

53-
dst.append("\"comments\": [");
54-
JsonStringify.joinConsume(comments, ", ", dst, (str) -> { dst.append('"'); StringEscapeJson.toJsonString(str, 0, str.length(), dst); dst.append('"'); });
55-
dst.append("]");
52+
json.comma(dst).propName("comments", dst)
53+
.toStringArray(comments, dst);
5654

5755
dst.append(" }");
5856
}

src/twg2/ast/interm/field/FieldSig.java

+12-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import lombok.AllArgsConstructor;
77
import lombok.Getter;
8+
import lombok.val;
89
import twg2.annotations.Immutable;
910
import twg2.ast.interm.annotation.AnnotationSig;
1011
import twg2.ast.interm.type.TypeSig;
@@ -13,16 +14,14 @@
1314
import twg2.parser.codeParser.tools.NameUtil;
1415
import twg2.parser.output.JsonWritableSig;
1516
import twg2.parser.output.WriteSettings;
16-
import twg2.text.stringEscape.StringEscapeJson;
1717

18-
/**
18+
/** Represents a class field
1919
* @author TeamworkGuy2
2020
* @since 2015-12-4
2121
*/
2222
@Immutable
2323
@AllArgsConstructor
2424
public class FieldSig implements JsonWritableSig {
25-
// package-private
2625
final @Getter String name;
2726
final @Getter List<String> fullName;
2827
final @Getter TypeSig.TypeSigSimple fieldType;
@@ -33,24 +32,22 @@ public class FieldSig implements JsonWritableSig {
3332

3433
@Override
3534
public void toJson(Appendable dst, WriteSettings st) throws IOException {
35+
val json = JsonStringify.inst;
36+
3637
dst.append("{ ");
37-
dst.append("\"name\": \"" + (st.fullFieldName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)) + "\", ");
38+
json.toProp("name", (st.fullFieldName ? NameUtil.joinFqName(fullName) : fullName.get(fullName.size() - 1)), dst);
3839

39-
dst.append("\"type\": ");
40+
json.comma(dst).propName("type", dst);
4041
fieldType.toJson(dst, st);
41-
dst.append(", ");
4242

43-
dst.append("\"accessModifiers\": [");
44-
JsonStringify.join(accessModifiers, ", ", dst, (acs) -> '"' + acs.toSrc() + '"');
45-
dst.append("], ");
43+
json.comma(dst).propName("accessModifiers", dst)
44+
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4645

47-
dst.append("\"annotations\": [");
48-
JsonStringify.joinConsume(annotations, ", ", dst, (ann) -> ann.toJson(dst, st));
49-
dst.append("], ");
46+
json.comma(dst).propName("annotations", dst)
47+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
5048

51-
dst.append("\"comments\": [");
52-
JsonStringify.joinConsume(comments, ", ", dst, (str) -> { dst.append('"'); StringEscapeJson.toJsonString(str, 0, str.length(), dst); dst.append('"'); });
53-
dst.append("]");
49+
json.comma(dst).propName("comments", dst)
50+
.toStringArray(comments, dst);
5451

5552
dst.append(" }");
5653
}

0 commit comments

Comments
 (0)