Skip to content

Commit 236b35e

Browse files
committed
Revert ast module
1 parent 3f72120 commit 236b35e

File tree

5 files changed

+46
-125
lines changed

5 files changed

+46
-125
lines changed
Lines changed: 24 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,64 @@
11
import {
2-
ArrayInitializerCtx,
32
BaseJavaCstVisitorWithDefaults,
43
BlockStatementCstNode,
5-
LocalVariableDeclarationCtx,
6-
LocalVariableDeclarationStatementCtx,
74
LocalVariableTypeCtx,
8-
VariableDeclaratorCtx,
95
VariableDeclaratorIdCtx,
10-
VariableDeclaratorListCtx,
116
VariableInitializerCtx,
12-
VariableInitializerListCtx,
137
} from "java-parser";
148
import {
159
BlockStatement,
16-
LocalVariableDeclarationStatement,
10+
Expression,
1711
VariableDeclarator,
1812
} from "../types/blocks-and-statements";
13+
import { Identifier, UnannType } from "../types/classes";
1914
import { ExpressionExtractor } from "./expression-extractor";
2015
import { StatementExtractor } from "./statement-extractor";
2116
import { TypeExtractor } from "./type-extractor";
2217

2318
export class BlockStatementExtractor extends BaseJavaCstVisitorWithDefaults {
19+
private type: UnannType;
20+
private identifier: Identifier[] = [];
21+
private value: Expression[] = [];
22+
2423
extract(cst: BlockStatementCstNode): BlockStatement {
2524
this.visit(cst);
2625
if (cst.children.localVariableDeclarationStatement) {
27-
return this.visit(cst.children.localVariableDeclarationStatement);
26+
const variableDeclaratorList = this.identifier.map(
27+
(identifier, index): VariableDeclarator => ({
28+
kind: "VariableDeclarator",
29+
variableDeclaratorId: identifier,
30+
variableInitializer: this.value[index],
31+
})
32+
);
33+
return {
34+
kind: "LocalVariableDeclarationStatement",
35+
localVariableType: this.type,
36+
variableDeclaratorList,
37+
location: cst.location,
38+
};
2839
} /* if (cst.children.statement) */ else {
2940
const statementExtractor = new StatementExtractor();
3041
return statementExtractor.extract(cst.children.statement![0]);
3142
}
3243
}
3344

34-
localVariableDeclarationStatement(
35-
ctx: LocalVariableDeclarationStatementCtx
36-
): LocalVariableDeclarationStatement {
37-
return {
38-
kind: "LocalVariableDeclarationStatement",
39-
...this.visit(ctx.localVariableDeclaration),
40-
};
41-
}
42-
43-
localVariableDeclaration(
44-
ctx: LocalVariableDeclarationCtx
45-
): Omit<LocalVariableDeclarationStatement, "kind"> {
46-
return {
47-
localVariableType: this.visit(ctx.localVariableType),
48-
variableDeclaratorList: this.visit(ctx.variableDeclaratorList),
49-
};
50-
}
51-
5245
localVariableType(ctx: LocalVariableTypeCtx) {
5346
const typeExtractor = new TypeExtractor();
5447
if (ctx.unannType) {
55-
return typeExtractor.extract(ctx.unannType[0]);
56-
} else if (ctx.Var) {
57-
throw new Error("Not implemented");
48+
this.type = typeExtractor.extract(ctx.unannType[0]);
5849
}
5950
}
6051

61-
variableDeclaratorList(ctx: VariableDeclaratorListCtx) {
62-
return ctx.variableDeclarator.map((variableDeclarator) => {
63-
return this.visit(variableDeclarator);
64-
});
65-
}
66-
67-
variableDeclarator(ctx: VariableDeclaratorCtx): VariableDeclarator {
68-
return {
69-
kind: "VariableDeclarator",
70-
variableDeclaratorId: this.visit(ctx.variableDeclaratorId),
71-
variableInitializer: ctx.variableInitializer
72-
? this.visit(ctx.variableInitializer)
73-
: undefined,
74-
};
75-
}
76-
7752
variableDeclaratorId(ctx: VariableDeclaratorIdCtx) {
78-
return ctx.Identifier[0].image;
53+
this.identifier.push(ctx.Identifier[0].image);
7954
}
8055

8156
variableInitializer(ctx: VariableInitializerCtx) {
8257
if (ctx.expression) {
8358
const expressionExtractor = new ExpressionExtractor();
84-
return expressionExtractor.extract(ctx.expression[0]);
85-
} else if (ctx.arrayInitializer) {
86-
return this.visit(ctx.arrayInitializer);
59+
ctx.expression.forEach((expression) => {
60+
this.value.push(expressionExtractor.extract(expression));
61+
});
8762
}
8863
}
89-
90-
arrayInitializer(ctx: ArrayInitializerCtx) {
91-
if (ctx.variableInitializerList) {
92-
return this.visit(ctx.variableInitializerList);
93-
}
94-
}
95-
96-
variableInitializerList(ctx: VariableInitializerListCtx) {
97-
return ctx.variableInitializer.map((variableInitializer) => {
98-
return this.visit(variableInitializer);
99-
});
100-
}
10164
}

src/ast/astExtractor/expression-extractor.ts

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,15 @@ import {
2424
UnaryExpressionCstNode,
2525
UnaryExpressionCtx,
2626
UnqualifiedClassInstanceCreationExpressionCtx,
27-
ArrayAccessSuffixCtx,
2827
} from "java-parser";
2928
import { Location } from "../types/ast";
3029
import {
31-
ArrayAccess,
3230
Assignment,
3331
BinaryExpression,
3432
ClassInstanceCreationExpression,
3533
Expression,
3634
ExpressionName,
3735
MethodInvocation,
38-
Primary,
3936
} from "../types/blocks-and-statements";
4037

4138
export class ExpressionExtractor extends BaseJavaCstVisitorWithDefaults {
@@ -204,24 +201,10 @@ export class ExpressionExtractor extends BaseJavaCstVisitorWithDefaults {
204201
return node;
205202
}
206203

207-
primary(ctx: PrimaryCtx): Primary {
204+
primary(ctx: PrimaryCtx) {
208205
let primary = this.visit(ctx.primaryPrefix);
209-
if (ctx.primarySuffix) {
210-
const lastSuffix = ctx.primarySuffix[ctx.primarySuffix.length - 1];
211-
if (lastSuffix.children.arrayAccessSuffix) {
212-
const newPrimaryCtx: PrimaryCtx = { primaryPrefix: ctx.primaryPrefix };
213-
if (ctx.primarySuffix.length - 1 > 0) {
214-
const newSuffixArray = ctx.primarySuffix.filter(
215-
(_, index) => index !== ctx.primarySuffix!.length - 1
216-
);
217-
newPrimaryCtx.primarySuffix = newSuffixArray;
218-
}
219-
return {
220-
...this.visit(lastSuffix.children.arrayAccessSuffix),
221-
primary: this.primary(newPrimaryCtx) as Primary,
222-
};
223-
}
224206

207+
if (ctx.primarySuffix) {
225208
for (const s of ctx.primarySuffix.filter(
226209
(s) => !s.children.methodInvocationSuffix
227210
)) {
@@ -434,12 +417,4 @@ export class ExpressionExtractor extends BaseJavaCstVisitorWithDefaults {
434417
parenthesisExpression(ctx: ParenthesisExpressionCtx) {
435418
return this.visit(ctx.expression);
436419
}
437-
438-
arrayAccessSuffix(ctx: ArrayAccessSuffixCtx): Omit<ArrayAccess, "primary"> {
439-
const expresionExtractor = new ExpressionExtractor();
440-
return {
441-
kind: "ArrayAccess",
442-
expression: expresionExtractor.extract(ctx.expression[0]),
443-
};
444-
}
445420
}

src/ast/astExtractor/statement-extractor.ts

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import {
3939
ExpressionStatement,
4040
IfStatement,
4141
MethodInvocation,
42-
Primary,
4342
Statement,
4443
StatementExpression,
4544
VariableDeclarator,
@@ -159,26 +158,10 @@ export class StatementExtractor extends BaseJavaCstVisitorWithDefaults {
159158
return this.visit(ctx.primary);
160159
}
161160

162-
primary(ctx: PrimaryCtx): Primary {
161+
primary(ctx: PrimaryCtx) {
163162
// Assignment LHS, MethodInvocation identifier
164163
let { name, location } = this.visit(ctx.primaryPrefix);
165164
if (ctx.primarySuffix) {
166-
const lastSuffix = ctx.primarySuffix[ctx.primarySuffix.length - 1];
167-
if (lastSuffix.children.arrayAccessSuffix) {
168-
const expressionExtractor = new ExpressionExtractor();
169-
const newPrimaryCtx: PrimaryCtx = { primaryPrefix: ctx.primaryPrefix };
170-
if (ctx.primarySuffix.length - 1 > 0) {
171-
const newSuffixArray = ctx.primarySuffix.filter(
172-
(_, index) => index !== ctx.primarySuffix!.length - 1
173-
);
174-
newPrimaryCtx.primarySuffix = newSuffixArray;
175-
}
176-
return {
177-
...expressionExtractor.visit(lastSuffix.children.arrayAccessSuffix),
178-
primary: this.primary(newPrimaryCtx) as Primary,
179-
};
180-
}
181-
182165
for (const s of ctx.primarySuffix.filter(
183166
(s) => !s.children.methodInvocationSuffix
184167
)) {

src/ast/astExtractor/type-extractor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export class TypeExtractor extends BaseJavaCstVisitorWithDefaults {
8787
return ctx.Identifier[0].image;
8888
}
8989

90-
dims(ctx: DimsCtx) {
91-
return "[]".repeat(ctx.LSquare.length);
90+
dims(_: DimsCtx) {
91+
return "[]";
9292
}
9393
}

src/types/checker/__tests__/classes.test.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -134,24 +134,24 @@ const testcases: {
134134
}
135135
`,
136136
result: { type: null, errors: [] }
137-
},
138-
{
139-
input: `
140-
class AccessControl {
141-
private void privateMethod() { System.out.println("Private method."); }
142-
public void attemptAccess() { privateMethod(); }
143-
}
144-
145-
public class Main {
146-
public static void main(String[] args) {
147-
AccessControl obj = new AccessControl();
148-
obj.attemptAccess();
149-
obj.privateMethod(); // Should be flagged as an error
150-
}
151-
}
152-
`,
153-
result: { type: null, errors: [new CannotFindSymbolError()] }
154137
}
138+
// {
139+
// input: `
140+
// class AccessControl {
141+
// private void privateMethod() { System.out.println("Private method."); }
142+
// public void attemptAccess() { privateMethod(); }
143+
// }
144+
145+
// public class Main {
146+
// public static void main(String[] args) {
147+
// AccessControl obj = new AccessControl();
148+
// obj.attemptAccess();
149+
// obj.privateMethod(); // Should be flagged as an error
150+
// }
151+
// }
152+
// `,
153+
// result: { type: null, errors: [new CannotFindSymbolError()] }
154+
// }
155155
]
156156

157157
describe('Type Checker', () => {

0 commit comments

Comments
 (0)