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

Commit d7e0bab

Browse files
authored
Merge pull request #26 from abeaumont/fix/multiple-roles-in-annotations
Include multiple roles
2 parents b3b7a15 + 197e059 commit d7e0bab

13 files changed

Lines changed: 591 additions & 80 deletions

ANNOTATION.md

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,30 +28,31 @@
2828
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='MethodInvocation'\]/\*\[@internalRole\]\[@internalRole='expression'\] | CallReceiver |
2929
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='MethodInvocation'\]/\*\[@internalRole\]\[@internalRole='name'\] | CallCallee |
3030
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='MethodInvocation'\]/\*\[@internalRole\]\[@internalRole='arguments'\] | CallPositionalArgument |
31-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='IfStatement'\] | If |
31+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='IfStatement'\] | If, Statement |
3232
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='IfStatement'\]/\*\[@internalRole\]\[@internalRole='expression'\] | IfCondition |
3333
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='IfStatement'\]/\*\[@internalRole\]\[@internalRole='thenStatement'\] | IfBody |
3434
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='IfStatement'\]/\*\[@internalRole\]\[@internalRole='elseStatement'\] | IfElse |
35-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='SwitchStatement'\] | Switch |
35+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='SwitchStatement'\] | Switch, Statement |
3636
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='SwitchStatement'\]/\*\[@InternalType='SwitchCase'\]/self::\*\[child::\*\] | SwitchCase |
3737
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='SwitchStatement'\]/\*\[@InternalType='SwitchCase'\]/self::\*\[child::\*\]/\*\[@internalRole\]\[@internalRole='expression'\] | SwitchCaseCondition |
3838
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='SwitchStatement'\]/\*\[@InternalType='SwitchCase'\]/self::\*\[not\(child::\*\)\] | SwitchDefault |
3939
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='SwitchStatement'\]/\*\[@InternalType='ExpressionStatement'\] | SwitchCaseBody |
40-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='EnhancedForStatement'\] | ForEach |
41-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='EnhancedForStatement'\]/\*\[@internalRole\]\[@internalRole='parameter'\] | ForInit |
40+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='EnhancedForStatement'\] | ForEach, Statement |
41+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='EnhancedForStatement'\]/\*\[@internalRole\]\[@internalRole='parameter'\] | ForInit, ForUpdate |
4242
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='EnhancedForStatement'\]/\*\[@internalRole\]\[@internalRole='expression'\] | ForExpression |
4343
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='EnhancedForStatement'\]/\*\[@internalRole\]\[@internalRole='body'\] | ForBody |
44-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ForStatement'\] | For |
44+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ForStatement'\] | For, Statement |
4545
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ForStatement'\]/\*\[@internalRole\]\[@internalRole='initializers'\] | ForInit |
4646
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ForStatement'\]/\*\[@internalRole\]\[@internalRole='expression'\] | ForExpression |
4747
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ForStatement'\]/\*\[@internalRole\]\[@internalRole='updaters'\] | ForUpdate |
4848
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ForStatement'\]/\*\[@internalRole\]\[@internalRole='body'\] | ForBody |
49-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='WhileStatement'\] | While |
49+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='WhileStatement'\] | While, Statement |
5050
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='WhileStatement'\]/\*\[@internalRole\]\[@internalRole='expression'\] | WhileCondition |
5151
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='WhileStatement'\]/\*\[@internalRole\]\[@internalRole='body'\] | WhileBody |
52-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='DoStatement'\] | DoWhile |
52+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='DoStatement'\] | DoWhile, Statement |
5353
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='DoStatement'\]/\*\[@internalRole\]\[@internalRole='expression'\] | DoWhileCondition |
5454
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='DoStatement'\]/\*\[@internalRole\]\[@internalRole='body'\] | DoWhileBody |
55+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\] | BinaryExpression, BinaryExpressionOp |
5556
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/self::\*\[@operator\]\[@operator='\+'\] | OpAdd |
5657
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/self::\*\[@operator\]\[@operator='\-'\] | OpSubstract |
5758
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/self::\*\[@operator\]\[@operator='\*'\] | OpMultiply |
@@ -65,6 +66,8 @@
6566
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/self::\*\[@operator\]\[@operator='&&'\] | OpBooleanAnd |
6667
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/self::\*\[@operator\]\[@operator='\|\|'\] | OpBooleanOr |
6768
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/self::\*\[@operator\]\[@operator='^'\] | OpBooleanXor |
69+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/\*\[@internalRole\]\[@internalRole='leftOperand'\] | BinaryExpressionLeft |
70+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='InfixExpression'\]/\*\[@internalRole\]\[@internalRole='rightOperand'\] | BinaryExpressionRight |
6871
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='PostfixExpression'\]/self::\*\[@operator\]\[@operator='\+\+'\] | OpPostIncrement |
6972
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='PostfixExpression'\]/self::\*\[@operator\]\[@operator='\-\-'\] | OpPostDecrement |
7073
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='PrefixExpression'\]/self::\*\[@operator\]\[@operator='\+\+'\] | OpPreIncrement |
@@ -76,7 +79,7 @@
7679
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\] | Assignment |
7780
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/\*\[@internalRole\]\[@internalRole='leftHandSide'\] | AssignmentVariable |
7881
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/\*\[@internalRole\]\[@internalRole='rightHandSide'\] | AssignmentValue |
79-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\] | AugmentedAssignmentOperator |
82+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\] | AugmentedAssignmentOperator, AugmentedAssignment |
8083
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\]/self::\*\[@operator\]\[@operator='\+='\] | OpAdd |
8184
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\]/self::\*\[@operator\]\[@operator='\-='\] | OpSubstract |
8285
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\]/self::\*\[@operator\]\[@operator='\*='\] | OpMultiply |
@@ -88,15 +91,15 @@
8891
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\]/self::\*\[@operator\]\[@operator='<<='\] | OpBitwiseLeftShift |
8992
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\]/self::\*\[@operator\]\[@operator='>>='\] | OpBitwiseRightShift |
9093
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Assignment'\]/self::\*\[not\(@operator\]\[@operator='='\)\]/self::\*\[@operator\]\[@operator='>>>='\] | OpBitwiseUnsignedRightShift |
91-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='TryStatement'\] | Try |
94+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='TryStatement'\] | Try, Statement |
9295
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='TryStatement'\]/\*\[@internalRole\]\[@internalRole='body'\] | TryBody |
9396
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='TryStatement'\]/\*\[@internalRole\]\[@internalRole='catchClauses'\] | TryCatch |
9497
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='TryStatement'\]/\*\[@internalRole\]\[@internalRole='finally'\] | TryFinally |
95-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ThrowStatement'\] | Throw |
96-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='AssertStatement'\] | Assert |
97-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Block'\] | BlockScope |
98+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ThrowStatement'\] | Throw, Statement |
99+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='AssertStatement'\] | Assert, Statement |
100+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Block'\] | BlockScope, Block |
98101
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ExpressionStatement'\] | Statement |
99-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ReturnStatement'\] | Return |
100-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='BreakStatement'\] | Break |
101-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ThisExpression'\] | This |
102-
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Javadoc'\] | Documentation |
102+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ReturnStatement'\] | Return, Statement |
103+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='BreakStatement'\] | Break, Statement |
104+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='ThisExpression'\] | This, Expression |
105+
| /self::\*\[@InternalType='CompilationUnit'\]//\*\[@InternalType='Javadoc'\] | Documentation, Comment |

driver/normalizer/annotation.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ var AnnotationRules = On(Any).Self(
109109
On(jdt.PropertyBody).Roles(DoWhileBody),
110110
),
111111

112-
On(jdt.InfixExpression).Self(
112+
On(jdt.InfixExpression).Roles(BinaryExpression, BinaryExpressionOp).Self(
113113
On(HasProperty("operator", "+")).Roles(OpAdd),
114114
On(HasProperty("operator", "-")).Roles(OpSubstract),
115115
On(HasProperty("operator", "*")).Roles(OpMultiply),
@@ -123,6 +123,9 @@ var AnnotationRules = On(Any).Self(
123123
On(HasProperty("operator", "&&")).Roles(OpBooleanAnd),
124124
On(HasProperty("operator", "||")).Roles(OpBooleanOr),
125125
On(HasProperty("operator", "^")).Roles(OpBooleanXor),
126+
).Children(
127+
On(jdt.PropertyLeftOperand).Roles(BinaryExpressionLeft),
128+
On(jdt.PropertyRightOperand).Roles(BinaryExpressionRight),
126129
),
127130

128131
On(jdt.PostfixExpression).Self(

tests/binary_expression.native

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"status": "ok",
3+
"errors": [],
4+
"ast": {
5+
"CompilationUnit": {
6+
"internalClass": "CompilationUnit",
7+
"types": [
8+
{
9+
"bodyDeclarations": [
10+
{
11+
"body": {
12+
"internalClass": "Block",
13+
"statements": [
14+
{
15+
"fragments": [
16+
{
17+
"initializer": {
18+
"internalClass": "InfixExpression",
19+
"leftOperand": {
20+
"internalClass": "NumberLiteral",
21+
"line": 3,
22+
"startPosition": 41,
23+
"token": "3"
24+
},
25+
"line": 3,
26+
"operator": "+",
27+
"rightOperand": {
28+
"internalClass": "NumberLiteral",
29+
"line": 3,
30+
"startPosition": 45,
31+
"token": "4"
32+
},
33+
"startPosition": 41
34+
},
35+
"internalClass": "VariableDeclarationFragment",
36+
"name": {
37+
"identifier": "a",
38+
"internalClass": "SimpleName",
39+
"line": 3,
40+
"startPosition": 37
41+
}
42+
}
43+
],
44+
"internalClass": "VariableDeclarationStatement",
45+
"type": {
46+
"internalClass": "PrimitiveType",
47+
"line": 3,
48+
"primitiveTypeCode": "int",
49+
"startPosition": 33
50+
}
51+
}
52+
]
53+
},
54+
"constructor": "false",
55+
"internalClass": "MethodDeclaration",
56+
"line": 2,
57+
"name": {
58+
"identifier": "code",
59+
"internalClass": "SimpleName",
60+
"line": 2,
61+
"startPosition": 20
62+
},
63+
"returnType2": {
64+
"internalClass": "PrimitiveType",
65+
"line": 2,
66+
"primitiveTypeCode": "void",
67+
"startPosition": 15
68+
},
69+
"startPosition": 15
70+
}
71+
],
72+
"interface": "false",
73+
"internalClass": "TypeDeclaration",
74+
"line": 1,
75+
"name": {
76+
"identifier": "Code",
77+
"internalClass": "SimpleName",
78+
"line": 1,
79+
"startPosition": 6
80+
},
81+
"startPosition": 0
82+
}
83+
]
84+
}
85+
}
86+
}

tests/binary_expression.source

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Code {
2+
void code() {
3+
int a = 3 + 4;
4+
}
5+
}

0 commit comments

Comments
 (0)