Skip to content
This repository was archived by the owner on Mar 8, 2020. It is now read-only.

Commit f7df6f2

Browse files
committed
native: Handle start and end position information natively
1 parent 9e4ca66 commit f7df6f2

116 files changed

Lines changed: 8927 additions & 916 deletions

File tree

Some content is hidden

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

driver/normalizer/parser.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ import (
77

88
var ToNoder = &native.ObjectToNoder{
99
InternalTypeKey: "internalClass",
10-
LineKey: "line",
10+
LineKey: "startLine",
11+
ColumnKey: "startColumn",
1112
OffsetKey: "startPosition",
13+
EndLineKey: "endLine",
14+
EndColumnKey: "endColumn",
15+
EndOffsetKey: "endPosition",
16+
1217
//TODO: Should this be part of the UAST rules?
1318
TokenKeys: map[string]bool{
1419
"identifier": true, // SimpleName
@@ -25,23 +30,9 @@ var ToNoder = &native.ObjectToNoder{
2530
// children node properties.
2631
}
2732

28-
func transformationParser(opts driver.ParserOptions) (tr driver.Parser, err error) {
29-
parser, err := native.ExecParser(ToNoder, opts.NativeBin)
30-
if err != nil {
31-
return tr, err
32-
}
33-
34-
tr = &driver.TransformationParser{
35-
Parser: parser,
36-
Transformation: driver.FillLineColFromOffset,
37-
}
38-
39-
return tr, nil
40-
}
41-
4233
// ParserBuilder creates a parser that transform source code files into *uast.Node.
4334
func ParserBuilder(opts driver.ParserOptions) (driver.Parser, error) {
44-
parser, err := transformationParser(opts)
35+
parser, err := native.ExecParser(ToNoder, opts.NativeBin)
4536
if err != nil {
4637
return nil, err
4738
}

native/src/main/java/bblfsh/CompilationUnitSerializer.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@ private void serializeAll(CompilationUnit cu, ASTNode node, JsonGenerator jG, Se
5252
} else if (child != null) {
5353
jG.writeFieldName(descriptor.getId());
5454
jG.writeString(child.toString());
55-
jG.writeFieldName("startPosition");
56-
final int position = node.getStartPosition();
57-
jG.writeNumber(position);
58-
jG.writeFieldName("line");
59-
jG.writeNumber(cu.getLineNumber(position));
55+
serializePosition(cu, node, jG);
6056
}
6157
}
6258

@@ -72,11 +68,7 @@ private void serializeAll(CompilationUnit cu, ASTNode node, JsonGenerator jG, Se
7268
String name = c.nodeClassForType(type).getName().substring(25);
7369
jG.writeFieldName("internalClass");
7470
jG.writeString(name);
75-
jG.writeFieldName("startPosition");
76-
final int position = c.getStartPosition();
77-
jG.writeNumber(position);
78-
jG.writeFieldName("line");
79-
jG.writeNumber(cu.getLineNumber(position));
71+
serializePosition(cu, (ASTNode)c, jG);
8072
jG.writeEndObject();
8173
}
8274
jG.writeEndArray();
@@ -102,4 +94,22 @@ private void serializeChild(CompilationUnit cu, ASTNode child, JsonGenerator jG,
10294
jG.writeFieldName(descriptor.getId());
10395
serializeAll(cu, child, jG, provider);
10496
}
97+
98+
private void serializePosition(CompilationUnit cu, ASTNode node, JsonGenerator jG) throws IOException {
99+
final int startPosition = node.getStartPosition();
100+
jG.writeFieldName("startPosition");
101+
jG.writeNumber(startPosition);
102+
jG.writeFieldName("startLine");
103+
jG.writeNumber(cu.getLineNumber(startPosition));
104+
jG.writeFieldName("startColumn");
105+
jG.writeNumber(cu.getColumnNumber(startPosition) + 1); // 1-based numbering
106+
107+
final int endPosition = startPosition + node.getLength();
108+
jG.writeFieldName("endPosition");
109+
jG.writeNumber(endPosition);
110+
jG.writeFieldName("endLine");
111+
jG.writeNumber(cu.getLineNumber(endPosition));
112+
jG.writeFieldName("endColumn");
113+
jG.writeNumber(cu.getColumnNumber(endPosition) + 1); // 1-based numbering
114+
}
105115
}

tests/annotation_type_declaration.native

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@
88
{
99
"internalClass": "AnnotationTypeDeclaration",
1010
"name": {
11+
"endColumn": 13,
12+
"endLine": 1,
13+
"endPosition": 12,
1114
"identifier": "A",
1215
"internalClass": "SimpleName",
13-
"line": 1,
16+
"startColumn": 12,
17+
"startLine": 1,
1418
"startPosition": 11
1519
}
1620
}

tests/annotation_type_declaration.uast

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ CompilationUnit {
1818
. . . . . . Line: 1
1919
. . . . . . Col: 12
2020
. . . . . }
21+
. . . . . EndPosition: {
22+
. . . . . . Offset: 12
23+
. . . . . . Line: 1
24+
. . . . . . Col: 13
25+
. . . . . }
2126
. . . . . Properties: {
2227
. . . . . . internalRole: name
2328
. . . . . }

tests/annotation_type_member_declaration.native

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,47 @@
99
"bodyDeclarations": [
1010
{
1111
"default": {
12+
"endColumn": 20,
13+
"endLine": 2,
14+
"endPosition": 34,
1215
"internalClass": "NumberLiteral",
13-
"line": 2,
16+
"startColumn": 19,
17+
"startLine": 2,
1418
"startPosition": 33,
1519
"token": "0"
1620
},
1721
"internalClass": "AnnotationTypeMemberDeclaration",
1822
"name": {
23+
"endColumn": 8,
24+
"endLine": 2,
25+
"endPosition": 22,
1926
"identifier": "a",
2027
"internalClass": "SimpleName",
21-
"line": 2,
28+
"startColumn": 7,
29+
"startLine": 2,
2230
"startPosition": 21
2331
},
2432
"type": {
33+
"endColumn": 6,
34+
"endLine": 2,
35+
"endPosition": 20,
2536
"internalClass": "PrimitiveType",
26-
"line": 2,
2737
"primitiveTypeCode": "int",
38+
"startColumn": 3,
39+
"startLine": 2,
2840
"startPosition": 17
2941
}
3042
}
3143
],
3244
"internalClass": "AnnotationTypeDeclaration",
3345
"name": {
46+
"endColumn": 13,
47+
"endLine": 1,
48+
"endPosition": 12,
3449
"identifier": "A",
3550
"internalClass": "SimpleName",
36-
"line": 1,
51+
"startColumn": 12,
52+
"startLine": 1,
3753
"startPosition": 11
3854
}
3955
}

tests/annotation_type_member_declaration.uast

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ CompilationUnit {
1818
. . . . . . Line: 1
1919
. . . . . . Col: 12
2020
. . . . . }
21+
. . . . . EndPosition: {
22+
. . . . . . Offset: 12
23+
. . . . . . Line: 1
24+
. . . . . . Col: 13
25+
. . . . . }
2126
. . . . . Properties: {
2227
. . . . . . internalRole: name
2328
. . . . . }
@@ -36,6 +41,11 @@ CompilationUnit {
3641
. . . . . . . . Line: 2
3742
. . . . . . . . Col: 3
3843
. . . . . . . }
44+
. . . . . . . EndPosition: {
45+
. . . . . . . . Offset: 20
46+
. . . . . . . . Line: 2
47+
. . . . . . . . Col: 6
48+
. . . . . . . }
3949
. . . . . . . Properties: {
4050
. . . . . . . . internalRole: type
4151
. . . . . . . }
@@ -48,6 +58,11 @@ CompilationUnit {
4858
. . . . . . . . Line: 2
4959
. . . . . . . . Col: 7
5060
. . . . . . . }
61+
. . . . . . . EndPosition: {
62+
. . . . . . . . Offset: 22
63+
. . . . . . . . Line: 2
64+
. . . . . . . . Col: 8
65+
. . . . . . . }
5166
. . . . . . . Properties: {
5267
. . . . . . . . internalRole: name
5368
. . . . . . . }
@@ -59,6 +74,11 @@ CompilationUnit {
5974
. . . . . . . . Line: 2
6075
. . . . . . . . Col: 19
6176
. . . . . . . }
77+
. . . . . . . EndPosition: {
78+
. . . . . . . . Offset: 34
79+
. . . . . . . . Line: 2
80+
. . . . . . . . Col: 20
81+
. . . . . . . }
6282
. . . . . . . Properties: {
6383
. . . . . . . . internalRole: default
6484
. . . . . . . . token: 0

tests/anonymous_class_declaration.native

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,23 @@
66
"internalClass": "CompilationUnit",
77
"types": [
88
{
9+
"endColumn": 14,
10+
"endLine": 1,
11+
"endPosition": 13,
912
"interface": "true",
1013
"internalClass": "TypeDeclaration",
11-
"line": 1,
1214
"name": {
15+
"endColumn": 12,
16+
"endLine": 1,
17+
"endPosition": 11,
1318
"identifier": "A",
1419
"internalClass": "SimpleName",
15-
"line": 1,
20+
"startColumn": 11,
21+
"startLine": 1,
1622
"startPosition": 10
1723
},
24+
"startColumn": 1,
25+
"startLine": 1,
1826
"startPosition": 0
1927
},
2028
{
@@ -32,28 +40,44 @@
3240
"internalClass": "Block"
3341
},
3442
"constructor": "false",
43+
"endColumn": 33,
44+
"endLine": 4,
45+
"endPosition": 75,
3546
"internalClass": "MethodDeclaration",
36-
"line": 4,
3747
"modifiers": [
3848
{
49+
"endColumn": 21,
50+
"endLine": 4,
51+
"endPosition": 63,
3952
"internalClass": "Modifier",
4053
"keyword": "public",
41-
"line": 4,
54+
"startColumn": 15,
55+
"startLine": 4,
4256
"startPosition": 57
4357
}
4458
],
4559
"name": {
60+
"endColumn": 28,
61+
"endLine": 4,
62+
"endPosition": 70,
4663
"identifier": "a",
4764
"internalClass": "SimpleName",
48-
"line": 4,
65+
"startColumn": 27,
66+
"startLine": 4,
4967
"startPosition": 69
5068
},
5169
"returnType2": {
70+
"endColumn": 26,
71+
"endLine": 4,
72+
"endPosition": 68,
5273
"internalClass": "PrimitiveType",
53-
"line": 4,
5474
"primitiveTypeCode": "void",
75+
"startColumn": 22,
76+
"startLine": 4,
5577
"startPosition": 64
5678
},
79+
"startColumn": 15,
80+
"startLine": 4,
5781
"startPosition": 57
5882
}
5983
],
@@ -63,9 +87,13 @@
6387
"type": {
6488
"internalClass": "SimpleType",
6589
"name": {
90+
"endColumn": 10,
91+
"endLine": 4,
92+
"endPosition": 52,
6693
"identifier": "A",
6794
"internalClass": "SimpleName",
68-
"line": 4,
95+
"startColumn": 9,
96+
"startLine": 4,
6997
"startPosition": 51
7098
}
7199
}
@@ -75,32 +103,52 @@
75103
]
76104
},
77105
"constructor": "false",
106+
"endColumn": 4,
107+
"endLine": 5,
108+
"endPosition": 82,
78109
"internalClass": "MethodDeclaration",
79-
"line": 3,
80110
"name": {
111+
"endColumn": 12,
112+
"endLine": 3,
113+
"endPosition": 38,
81114
"identifier": "code",
82115
"internalClass": "SimpleName",
83-
"line": 3,
116+
"startColumn": 8,
117+
"startLine": 3,
84118
"startPosition": 34
85119
},
86120
"returnType2": {
121+
"endColumn": 7,
122+
"endLine": 3,
123+
"endPosition": 33,
87124
"internalClass": "PrimitiveType",
88-
"line": 3,
89125
"primitiveTypeCode": "void",
126+
"startColumn": 3,
127+
"startLine": 3,
90128
"startPosition": 29
91129
},
130+
"startColumn": 3,
131+
"startLine": 3,
92132
"startPosition": 29
93133
}
94134
],
135+
"endColumn": 2,
136+
"endLine": 6,
137+
"endPosition": 84,
95138
"interface": "false",
96139
"internalClass": "TypeDeclaration",
97-
"line": 2,
98140
"name": {
141+
"endColumn": 11,
142+
"endLine": 2,
143+
"endPosition": 24,
99144
"identifier": "Code",
100145
"internalClass": "SimpleName",
101-
"line": 2,
146+
"startColumn": 7,
147+
"startLine": 2,
102148
"startPosition": 20
103149
},
150+
"startColumn": 1,
151+
"startLine": 2,
104152
"startPosition": 14
105153
}
106154
]

0 commit comments

Comments
 (0)