Skip to content

Commit 7482a2a

Browse files
committed
0.20.0 - Add method generic type parameters support and several in-testing performance optimizations. Several dependency updates.
1 parent 9967d65 commit 7482a2a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+676
-374
lines changed

CHANGELOG.md

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

55

66
--------
7-
### [0.19.2](N/A) - 2020-05-23
7+
### [0.20.0](N/A) - 2020-11-22
8+
__Method generic type parameters parsing support__ (i.e. 'public T Create<T>()' in C#).
9+
#### Added
10+
* Method generic type parameters added - `MethodSig` and sub-classes have a new `typeParameters` field. Note: if these 'types' contain lower/upper type bounds these are included in the `typeName` property in Java and are not yet included in C# parsing
11+
* Added basic unit tests for this new method generic type parameters parsing support
12+
* `AstFragType.isBlock(CodeToken, char)` overload for attempted performance optimization
13+
14+
#### Changed
15+
* Renamed `DataTypeExtractor` -> `TypeExtractor`
16+
* Added `EnhancedListIterator` as a replacement for `TokenListIterable` to try and simplify fragment iteration since it is a fairly hot section of code in most parsing scenarios
17+
* `ParseTimes.TrackerAction` enums renamed:
18+
* `LOAD` -> `READ`
19+
* `PARSE` -> `EXTRACT_AST`
20+
* Update dependency jtext-tokenizer@0.6.0 and code to match
21+
* Adjustments to `new CharParserMatchableFactory()` and `CharConditions.Identifier.newInstance()` calls in `IdentifierTokenizer` and `NumberTokenizer`
22+
* JSON output now excludes empty `annotations` arrays on fields, methods, and parameters
23+
* Additional performance log counters added to several methods and printed when performance info is enabled via `-debug` CLI flag
24+
25+
#### Removed
26+
* `AstFragType.isType()` static method and overloads since they were unused
27+
* Unused `CommentTokenizer.createCommentTokenizerForJava()`
28+
29+
#### Fixed
30+
* An exception being thrown when resolving class names if a file imported a namespace and also imported a child namespace of the first namespace
31+
32+
33+
--------
34+
### [0.19.2](https://github.com/TeamworkGuy2/JParseCode/commit/9967d655b7c274b8d58892ab74b7fd1fe4dea522) - 2020-05-23
835
__Parameter varargs parsing support__ (i.e. 'int...' in Java).
936
#### Changed
1037
* Update dependency `jtext-parser@0.16.0` and `jtext-tokenizer@0.4.0`

bin/jparse_code-with-tests.jar

2.7 KB
Binary file not shown.

bin/jparse_code.jar

1.71 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.19.2",
2+
"version" : "0.20.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",

rsc/csharp/ParserExamples/Models/TrackInfo.cs

+5
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,13 @@ public int CompareTo(Implementer other) {
3333

3434

3535
public void GetObjectData(SerializationInfo info, StreamingContext context) {
36+
var a = Int32.Parse("");
3637
}
3738

39+
40+
public TType Refresh<TType>(TType tt) where TType : IConvertible {
41+
return tt;
42+
}
3843
}
3944

4045
}

rsc/java/ParserExamples/Models/TrackInfo.java

+5
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,9 @@ public int compareTo(TrackInfo o) {
3333
return other != null ? (this.Name != null ? this.Name.CompareTo(other.Name) : (other.Name != null ? 1 : 0)) : (this.Name != null ? -1 : 0);
3434
}
3535

36+
37+
public <TType extends Number> TType refresh(TType tt) {
38+
return tt;
39+
}
40+
3641
}

src/twg2/ast/interm/annotation/AnnotationSig.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,25 @@
44
import java.util.List;
55
import java.util.Map;
66

7-
import lombok.AllArgsConstructor;
87
import twg2.annotations.Immutable;
98
import twg2.parser.codeParser.tools.NameUtil;
109
import twg2.parser.output.JsonWritableSig;
1110
import twg2.parser.output.WriteSettings;
1211

1312
@Immutable
14-
@AllArgsConstructor
1513
public class AnnotationSig implements JsonWritableSig {
1614
public final String name;
1715
public final List<String> fullName;
1816
public final Map<String, String> arguments;
1917

2018

19+
public AnnotationSig(String name, List<String> fullName, Map<String, String> arguments) {
20+
this.name = name;
21+
this.fullName = fullName;
22+
this.arguments = arguments;
23+
}
24+
25+
2126
@Override
2227
public void toJson(Appendable dst, WriteSettings st) throws IOException {
2328
dst.append(" {");

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

+20-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import java.io.IOException;
44
import java.util.List;
55

6-
import lombok.AllArgsConstructor;
76
import lombok.Getter;
87
import twg2.annotations.Immutable;
98
import twg2.ast.interm.annotation.AnnotationSig;
109
import twg2.ast.interm.type.TypeSig;
10+
import twg2.ast.interm.type.TypeSig.TypeSigResolved;
1111
import twg2.io.json.stringify.JsonStringify;
1212
import twg2.parser.codeParser.Keyword;
1313
import twg2.parser.codeParser.tools.NameUtil;
@@ -18,7 +18,6 @@
1818
* @since 2015-12-5
1919
*/
2020
@Immutable
21-
@AllArgsConstructor
2221
public class ClassSigResolved implements ClassSig {
2322
private final @Getter List<String> fullName;
2423
/** This type's generic type parameters, if any */
@@ -33,6 +32,25 @@ public class ClassSigResolved implements ClassSig {
3332
private final @Getter List<TypeSig.TypeSigResolved> implementInterfaces;
3433

3534

35+
public ClassSigResolved(List<String> fullName, List<? extends TypeSigResolved> params, Keyword accessModifier, List<? extends AnnotationSig> annotations,
36+
String declarationType, TypeSigResolved extendClass, List<? extends TypeSigResolved> implementInterfaces) {
37+
@SuppressWarnings("unchecked")
38+
var paramsCast = (List<TypeSigResolved>)params;
39+
@SuppressWarnings("unchecked")
40+
var annotationsCast = (List<AnnotationSig>)annotations;
41+
@SuppressWarnings("unchecked")
42+
var implementInterfacesCast = (List<TypeSigResolved>)implementInterfaces;
43+
44+
this.fullName = fullName;
45+
this.params = paramsCast;
46+
this.accessModifier = accessModifier;
47+
this.annotations = annotationsCast;
48+
this.declarationType = declarationType;
49+
this.extendClass = extendClass;
50+
this.implementInterfaces = implementInterfacesCast;
51+
}
52+
53+
3654
@Override
3755
public String getSimpleName() {
3856
return fullName.get(fullName.size() - 1);

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

+17-2
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@
33
import java.io.IOException;
44
import java.util.List;
55

6-
import lombok.AllArgsConstructor;
76
import lombok.Getter;
87
import twg2.annotations.Immutable;
98
import twg2.ast.interm.annotation.AnnotationSig;
109
import twg2.ast.interm.type.TypeSig;
10+
import twg2.ast.interm.type.TypeSig.TypeSigSimple;
1111
import twg2.io.json.stringify.JsonStringify;
1212
import twg2.parser.codeParser.Keyword;
1313
import twg2.parser.codeParser.tools.NameUtil;
1414
import twg2.parser.output.WriteSettings;
1515

1616
@Immutable
17-
@AllArgsConstructor
1817
public class ClassSigSimple implements ClassSig {
1918
private final @Getter List<String> fullName;
2019
/** This type's generic type parameters, if any */
@@ -28,6 +27,22 @@ public class ClassSigSimple implements ClassSig {
2827
private final @Getter List<String> extendImplementSimpleNames;
2928

3029

30+
31+
public ClassSigSimple(List<String> fullName, List<? extends TypeSigSimple> params, Keyword accessModifier, List<? extends AnnotationSig> annotations, String declarationType, List<String> extendImplementSimpleNames) {
32+
@SuppressWarnings("unchecked")
33+
var paramsCast = (List<TypeSigSimple>)params;
34+
@SuppressWarnings("unchecked")
35+
var annotationsCast = (List<AnnotationSig>)annotations;
36+
37+
this.fullName = fullName;
38+
this.params = paramsCast;
39+
this.accessModifier = accessModifier;
40+
this.annotations = annotationsCast;
41+
this.declarationType = declarationType;
42+
this.extendImplementSimpleNames = extendImplementSimpleNames;
43+
}
44+
45+
3146
@Override
3247
public String getSimpleName() {
3348
return fullName.get(fullName.size() - 1);

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

+7-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import twg2.ast.interm.type.TypeSig.TypeSigSimple;
1010
import twg2.io.json.stringify.JsonStringify;
1111
import twg2.parser.codeParser.Keyword;
12-
import twg2.parser.codeParser.extractors.DataTypeExtractor;
12+
import twg2.parser.codeParser.extractors.TypeExtractor;
1313
import twg2.parser.codeParser.tools.NameUtil;
1414
import twg2.parser.fragment.CodeToken;
1515
import twg2.parser.fragment.CodeTokenType;
@@ -46,8 +46,10 @@ public void toJson(Appendable dst, WriteSettings st) throws IOException {
4646
json.comma(dst).propName("accessModifiers", dst)
4747
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4848

49-
json.comma(dst).propName("annotations", dst)
50-
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
49+
if(annotations != null && annotations.size() > 0) {
50+
json.comma(dst).propName("annotations", dst)
51+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
52+
}
5153

5254
initializerToJson(initializer, true, dst, st);
5355

@@ -72,7 +74,7 @@ public static void initializerToJson(SimpleTree<CodeToken> astNode, boolean preC
7274
boolean isNumOrBoolOrNull = false;
7375
if(astNode != null && !astNode.hasChildren() && (data = astNode.getData()) != null &&
7476
(data.getTokenType() == CodeTokenType.STRING ||
75-
(isNumOrBoolOrNull = DataTypeExtractor.isDefaultValueLiteral(data)))) {
77+
(isNumOrBoolOrNull = TypeExtractor.isDefaultValueLiteral(data)))) {
7678
if(preClosingComma) {
7779
dst.append(", ");
7880
}
@@ -91,7 +93,7 @@ else if(astNode != null && astNode.hasChildren()) {
9193
dst.append(", ");
9294
}
9395
dst.append("\"initializerExpression\": ");
94-
if((data = astNode.getData()) != null && !DataTypeExtractor.isNullLiteral(data)) {
96+
if((data = astNode.getData()) != null && !TypeExtractor.isNullLiteral(data)) {
9597
dst.append('"');
9698
dst.append(StringEscapeJson.toJsonString(data.getText()));
9799
dst.append('"');

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ public void toJson(Appendable dst, WriteSettings st) throws IOException {
4343
json.comma(dst).propName("accessModifiers", dst)
4444
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4545

46-
json.comma(dst).propName("annotations", dst)
47-
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
46+
if(annotations != null && annotations.size() > 0) {
47+
json.comma(dst).propName("annotations", dst)
48+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
49+
}
4850

4951
FieldDef.initializerToJson(initializer, true, dst, st);
5052

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

+20-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import java.io.IOException;
44
import java.util.List;
55

6-
import lombok.AllArgsConstructor;
76
import lombok.Getter;
87
import twg2.annotations.Immutable;
98
import twg2.ast.interm.annotation.AnnotationSig;
109
import twg2.ast.interm.type.TypeSig;
10+
import twg2.ast.interm.type.TypeSig.TypeSigSimple;
1111
import twg2.io.json.stringify.JsonStringify;
1212
import twg2.parser.codeParser.Keyword;
1313
import twg2.parser.codeParser.tools.NameUtil;
@@ -19,7 +19,6 @@
1919
* @since 2015-12-4
2020
*/
2121
@Immutable
22-
@AllArgsConstructor
2322
public class FieldSig implements JsonWritableSig {
2423
final @Getter String name;
2524
final @Getter List<String> fullName;
@@ -29,6 +28,21 @@ public class FieldSig implements JsonWritableSig {
2928
final @Getter List<String> comments;
3029

3130

31+
public FieldSig(String name, List<String> fullName, TypeSigSimple fieldType, List<? extends Keyword> accessModifiers, List<? extends AnnotationSig> annotations, List<String> comments) {
32+
@SuppressWarnings("unchecked")
33+
var accessModifiersCast = (List<Keyword>)accessModifiers;
34+
@SuppressWarnings("unchecked")
35+
var annotationsCast = (List<AnnotationSig>)annotations;
36+
37+
this.name = name;
38+
this.fullName = fullName;
39+
this.fieldType = fieldType;
40+
this.accessModifiers = accessModifiersCast;
41+
this.annotations = annotationsCast;
42+
this.comments = comments;
43+
}
44+
45+
3246
@Override
3347
public void toJson(Appendable dst, WriteSettings st) throws IOException {
3448
var json = JsonStringify.inst;
@@ -42,8 +56,10 @@ public void toJson(Appendable dst, WriteSettings st) throws IOException {
4256
json.comma(dst).propName("accessModifiers", dst)
4357
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4458

45-
json.comma(dst).propName("annotations", dst)
46-
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
59+
if(annotations != null && annotations.size() > 0) {
60+
json.comma(dst).propName("annotations", dst)
61+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
62+
}
4763

4864
json.comma(dst).propName("comments", dst)
4965
.toStringArray(comments, dst);

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

+20-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import java.io.IOException;
44
import java.util.List;
55

6-
import lombok.AllArgsConstructor;
76
import lombok.Getter;
87
import twg2.annotations.Immutable;
98
import twg2.ast.interm.annotation.AnnotationSig;
109
import twg2.ast.interm.type.TypeSig;
10+
import twg2.ast.interm.type.TypeSig.TypeSigResolved;
1111
import twg2.io.json.stringify.JsonStringify;
1212
import twg2.parser.codeParser.Keyword;
1313
import twg2.parser.codeParser.tools.NameUtil;
@@ -19,7 +19,6 @@
1919
* @since 2016-1-4
2020
*/
2121
@Immutable
22-
@AllArgsConstructor
2322
public class FieldSigResolved implements JsonWritableSig {
2423
final @Getter String name;
2524
final @Getter List<String> fullName;
@@ -29,6 +28,21 @@ public class FieldSigResolved implements JsonWritableSig {
2928
final @Getter List<String> comments;
3029

3130

31+
public FieldSigResolved(String name, List<String> fullName, TypeSigResolved fieldType, List<? extends Keyword> accessModifiers, List<? extends AnnotationSig> annotations, List<String> comments) {
32+
@SuppressWarnings("unchecked")
33+
var accessModifiersCast = (List<Keyword>)accessModifiers;
34+
@SuppressWarnings("unchecked")
35+
var annotationsCast = (List<AnnotationSig>)annotations;
36+
37+
this.name = name;
38+
this.fullName = fullName;
39+
this.fieldType = fieldType;
40+
this.accessModifiers = accessModifiersCast;
41+
this.annotations = annotationsCast;
42+
this.comments = comments;
43+
}
44+
45+
3246
@Override
3347
public void toJson(Appendable dst, WriteSettings st) throws IOException {
3448
var json = JsonStringify.inst;
@@ -42,8 +56,10 @@ public void toJson(Appendable dst, WriteSettings st) throws IOException {
4256
json.comma(dst).propName("accessModifiers", dst)
4357
.toStringArray(accessModifiers, dst, (acs) -> acs.toSrc());
4458

45-
json.comma(dst).propName("annotations", dst)
46-
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
59+
if(annotations != null && annotations.size() > 0) {
60+
json.comma(dst).propName("annotations", dst)
61+
.toArrayConsume(annotations, dst, (ann) -> ann.toJson(dst, st));
62+
}
4763

4864
json.comma(dst).propName("comments", dst)
4965
.toStringArray(comments, dst);

0 commit comments

Comments
 (0)