Skip to content

Commit 2ee27fc

Browse files
committed
Adding enum visitor, union visitor, alias visitor & interface visitor + fixed expected java code structure
1 parent 27a269a commit 2ee27fc

File tree

16 files changed

+477
-226
lines changed

16 files changed

+477
-226
lines changed

src/go/interfaces_visitor.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ import { EnumVisitor } from "./enum_visitor.js";
1919
import { StructVisitor } from "./struct_visitor.js";
2020
import { ImportsVisitor } from "./imports_visitor.js";
2121
import { AliasVisitor } from "./alias_visitor.js";
22-
import {
23-
isHandler,
24-
isProvider,
25-
} from "../utils/index.js";
22+
import { isHandler, isProvider } from "../utils/index.js";
2623
import { UnionVisitor } from "./union_visitor.js";
2724
import { InterfaceVisitor } from "./interface_visitor.js";
2825

src/java/src/default-visitor.ts

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,48 @@
1-
import {BaseVisitor, Context, Visitor, Writer} from "@apexlang/core/model";
2-
import {TypeVisitor} from "./visitors/type-visitor";
3-
import {EnumVisitor} from "./visitors";
1+
import { BaseVisitor, Context, Visitor, Writer } from "@apexlang/core/model";
2+
import {
3+
AliasVisitor,
4+
EnumVisitor,
5+
ImportVisitor,
6+
InterfaceVisitor,
7+
TypeVisitor,
8+
UnionVisitor,
9+
} from "./visitors";
410

511
export class DefaultVisitor extends BaseVisitor {
6-
typeVisitor = (writer: Writer): Visitor => new TypeVisitor(writer);
7-
enumVisitor = (writer: Writer): Visitor => new EnumVisitor(writer);
12+
importVisitor = (writer: Writer): Visitor => new ImportVisitor(writer);
13+
typeVisitor = (writer: Writer): Visitor => new TypeVisitor(writer);
14+
interfaceVisitor = (writer: Writer): Visitor => new InterfaceVisitor(writer);
15+
enumVisitor = (writer: Writer): Visitor => new EnumVisitor(writer);
16+
aliasVisitor = (writer: Writer): Visitor => new AliasVisitor(writer);
17+
unionVisitor = (writer: Writer): Visitor => new UnionVisitor(writer);
818

9-
visitType(context: Context) {
10-
const visitor = this.typeVisitor(this.writer);
11-
context.type.accept(context, visitor);
12-
}
19+
visitNamespace(context: Context) {
20+
const visitor = this.importVisitor(this.writer);
21+
context.namespace.accept(context, visitor);
22+
}
1323

14-
visitEnum(context: Context) {
15-
const visitor = this.enumVisitor(this.writer);
16-
context.enum.accept(context, visitor);
17-
}
18-
}
24+
visitType(context: Context) {
25+
const visitor = this.typeVisitor(this.writer);
26+
context.type.accept(context, visitor);
27+
}
28+
29+
visitInterface(context: Context) {
30+
const visitor = this.interfaceVisitor(this.writer);
31+
context.interface.accept(context, visitor);
32+
}
33+
34+
visitEnum(context: Context) {
35+
const visitor = this.enumVisitor(this.writer);
36+
context.enum.accept(context, visitor);
37+
}
38+
39+
visitAlias(context: Context) {
40+
const visitor = this.aliasVisitor(this.writer);
41+
context.alias.accept(context, visitor);
42+
}
43+
44+
visitUnion(context: Context) {
45+
const visitor = this.unionVisitor(this.writer);
46+
context.union.accept(context, visitor);
47+
}
48+
}

src/java/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export { DefaultVisitor as default } from "./default-visitor.js";
22
export { DefaultVisitor } from "./default-visitor.js";
33

4-
export * as visitors from "./visitors/index.js";
4+
export * as visitors from "./visitors/index.js";

src/java/src/utils/conversions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {PrimitiveName} from "@apexlang/core/model";
1+
import { PrimitiveName } from "@apexlang/core/model";
22

33
export const convertSignedToUnsigned = (type: string, value: any) => {
44
switch (type) {
@@ -13,4 +13,4 @@ export const convertSignedToUnsigned = (type: string, value: any) => {
1313
default:
1414
return `${value}`;
1515
}
16-
}
16+
};

src/java/src/utils/types.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
import {
2-
Kind,
3-
Named,
42
AnyType,
5-
Map,
6-
PrimitiveName,
3+
Kind,
74
List,
5+
Map,
6+
Named,
7+
ObjectMap,
88
Optional,
99
Primitive,
10-
ObjectMap,
10+
PrimitiveName,
1111
} from "@apexlang/core/model";
12-
import {pascalCase} from "../../../utils";
12+
import { pascalCase } from "../../../utils";
1313

1414
export function convertType(typ: AnyType, config: ObjectMap): string {
1515
switch (typ.kind) {
1616
case Kind.List: {
17-
return `List<${convertType((typ as List).type, config)}>`
17+
return `List<${convertType((typ as List).type, config)}>`;
1818
}
1919
case Kind.Map: {
20-
return `Map<${convertType((typ as Map).keyType, config)}, ${convertType(
21-
(typ as Map).valueType, config
20+
return `Map<${convertType((typ as Map).keyType, config)}, ${pascalCase(
21+
convertType((typ as Map).valueType, config)
2222
)}>`;
2323
}
2424
case Kind.Optional: {
@@ -30,14 +30,16 @@ export function convertType(typ: AnyType, config: ObjectMap): string {
3030
case Kind.Type:
3131
case Kind.Union:
3232
case Kind.Enum:
33-
case Kind.Alias:
3433
const namedValue = (typ as Named).name;
3534
return pascalCase(namedValue);
35+
case Kind.Alias:
36+
return (typ as Named).name.toUpperCase();
3637
case Kind.Primitive: {
37-
return `${convertPrimitive((typ as Primitive), config)}`;
38+
return `${convertPrimitive(typ as Primitive, config)}`;
3839
}
3940
default: {
40-
throw new Error(`Unhandled type conversion for type: ${typ.kind}`);
41+
return `${typ.kind}`;
42+
// throw new Error(`Unhandled type conversion for type: ${typ.kind}`);
4143
}
4244
}
4345
}
@@ -75,9 +77,9 @@ function convertPrimitive(typ: Primitive, config: ObjectMap): string {
7577
case PrimitiveName.Any:
7678
return "Object";
7779
default:
78-
// return `${typ.name}`
79-
throw new Error(
80-
`Unhandled primitive type conversion for type: ${typ.name}`
81-
);
80+
return `${typ.name}`;
81+
// throw new Error(
82+
// `Unhandled primitive type conversion for type: ${typ.name}`
83+
// );
8284
}
8385
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { BaseVisitor, Context } from "@apexlang/core/model";
2+
import { pascalCase } from "../../../utils";
3+
4+
export class AliasVisitor extends BaseVisitor {
5+
visitAliasBefore(context: Context) {
6+
super.visitAliasBefore(context);
7+
}
8+
9+
visitAlias(context: Context) {
10+
// const alias = context.alias.name;
11+
// this.write(`class ${pascalCase(alias)} {} \n\n`);
12+
super.visitAlias(context);
13+
}
14+
15+
visitAliasAfter(context: Context) {
16+
super.visitAliasAfter(context);
17+
}
18+
}
Lines changed: 57 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,65 @@
1-
import {BaseVisitor, Context, Writer} from "@apexlang/core/model";
1+
import { BaseVisitor, Context, Writer } from "@apexlang/core/model";
22

33
export class EnumVisitor extends BaseVisitor {
4-
constructor(writer: Writer) {
5-
super(writer);
6-
}
4+
constructor(writer: Writer) {
5+
super(writer);
6+
}
77

8-
visitEnumBefore(context: Context) {
9-
const {enum: enumNode} = context;
10-
enumNode.description && this.write(`// ${enumNode.description}\n`);
11-
super.visitEnumBefore(context);
12-
}
8+
visitEnumBefore(context: Context) {
9+
const { enum: enumNode } = context;
10+
enumNode.description && this.write(`// ${enumNode.description}\n`);
11+
super.visitEnumBefore(context);
12+
}
1313

14-
visitEnum(context: Context) {
15-
const {enum: enumNode} = context;
16-
this.write(`enum ${enumNode.name} {`);
17-
this.write(`\n`);
18-
super.visitEnum(context);
19-
}
14+
visitEnum(context: Context) {
15+
const { enum: enumNode } = context;
16+
this.write(`enum ${enumNode.name} {`);
17+
this.write(`\n`);
18+
super.visitEnum(context);
19+
}
2020

21-
visitEnumValuesBefore(context: Context) {
22-
// const {enum: enumNode} = context;
23-
// enumNode.description && this.write(`// ${enumNode.description}\n`);
24-
const {enumValues} = context;
25-
enumValues.map((enumValue, index) => {
26-
if (index > 0) {
27-
enumValue.description && this.write(`,${enumValue.description}`);
28-
} else {
29-
enumValue.description && this.write(`\t // ${enumValue.description}`);
30-
}
31-
});
32-
this.write(`\n`);
33-
// enumValue.node.description?.getValue() && this.write(`// ${enumValue.node.description.getValue()}`);
34-
super.visitEnumValuesBefore(context);
35-
}
21+
visitEnumValuesBefore(context: Context) {
22+
// const {enum: enumNode} = context;
23+
// enumNode.description && this.write(`// ${enumNode.description}\n`);
24+
const { enumValues } = context;
25+
enumValues.map((enumValue, index) => {
26+
if (index > 0) {
27+
enumValue.description && this.write(`,${enumValue.description}`);
28+
} else {
29+
enumValue.description && this.write(`\t // ${enumValue.description}`);
30+
}
31+
});
32+
this.write(`\n`);
33+
// enumValue.node.description?.getValue() && this.write(`// ${enumValue.node.description.getValue()}`);
34+
super.visitEnumValuesBefore(context);
35+
}
3636

37-
visitEnumValue(context: Context) {
38-
const {enumValue} = context;
39-
if (enumValue.index > 0) {
40-
this.write(`,${enumValue.name}`);
41-
} else {
42-
this.write(`\t ${enumValue.name}`);
43-
}
44-
// this.write(`${enumValue.name} = ${enumValue.index} as "${enumValue.display}"`);
45-
super.visitEnumValue(context);
37+
visitEnumValue(context: Context) {
38+
const { enum: enumNode, enumValue, enumValues } = context;
39+
if (enumValues.length - 1 === enumValue.index) {
40+
this.write(`,\n`);
41+
this.write(`\t ${enumValue.name}(${enumValue.index});`);
42+
this.write(`\n`);
43+
this.write(`\n`);
44+
this.write(`\t private final int value;`);
45+
this.write(`\n`);
46+
this.write(`\t ${enumNode.name}(int value) {`);
47+
this.write(`\n`);
48+
this.write(`\t\t this.value = value;`);
49+
this.write(`\n`);
50+
this.write(`\t }`);
51+
} else if (enumValue.index > 0) {
52+
this.write(`,\n`);
53+
this.write(`\t ${enumValue.name}(${enumValue.index})`);
54+
} else {
55+
this.write(`\t ${enumValue.name}(${enumValue.index})`);
4656
}
57+
// this.write(`${enumValue.name} = ${enumValue.index} as "${enumValue.display}"`);
58+
super.visitEnumValue(context);
59+
}
4760

48-
visitEnumAfter(context: Context) {
49-
this.write(`\n}`);
50-
super.visitEnumAfter(context);
51-
}
52-
}
61+
visitEnumAfter(context: Context) {
62+
this.write(`\n}`);
63+
super.visitEnumAfter(context);
64+
}
65+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { BaseVisitor, Context } from "@apexlang/core/model";
2+
import { camelCase, pascalCase } from "../../../utils";
3+
4+
export class ImportVisitor extends BaseVisitor {
5+
visitNamespaceBefore(context: Context) {
6+
// const packageName = context.namespace.name
7+
// .split(".")
8+
// .map((n, i) => {
9+
// if (i === 0) {
10+
// return n;
11+
// }
12+
// return pascalCase(n);
13+
// })
14+
// .join("");
15+
// this.write(`package ${camelCase(packageName)};`);
16+
// this.write(`\n`);
17+
// this.write(`\n`);
18+
super.visitNamespaceBefore(context);
19+
}
20+
21+
visitNamespaceAfter(context: Context) {
22+
this.write(`import java.util.*;`);
23+
this.write(`\n`);
24+
this.write(`import java.io.*;`);
25+
this.write(`\n`);
26+
this.write(`import java.lang.*;`);
27+
this.write(`\n`);
28+
this.write(`import java.math.*;`);
29+
this.write(`\n`);
30+
this.write(`import java.text.*;`);
31+
this.write(`\n`);
32+
this.write(`import java.time.*;`);
33+
this.write(`\n`);
34+
this.write(`\n`);
35+
super.visitImport(context);
36+
}
37+
}

src/java/src/visitors/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
export {TypeVisitor as StructVisitor} from "./type-visitor";
2-
export {EnumVisitor as EnumVisitor} from "./enum-visitor";
3-
export {InterfaceVisitor as InterfaceVisitor} from "./interface-visitor";
1+
export { ImportVisitor } from "./import-visitor";
2+
export { TypeVisitor as TypeVisitor } from "./type-visitor";
3+
export { EnumVisitor as EnumVisitor } from "./enum-visitor";
4+
export { InterfaceVisitor as InterfaceVisitor } from "./interface-visitor";
5+
export { AliasVisitor as AliasVisitor } from "./alias-visitor";
6+
export { UnionVisitor as UnionVisitor } from "./union-visitor";

0 commit comments

Comments
 (0)