summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-30 11:32:18 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-30 13:28:46 +0100
commitcfb59a62fbdcbecb3b842e3df0bea3b6d159007c (patch)
treecc2a19bd88a58142bd3934c7f7d82f03de06d071 /src/main/java
parenta7d5133ac7cc82e3826f90d2e5f1ca5cd3f08676 (diff)
Add explicit visibility to TypeScript AST
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java15
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java22
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java26
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java15
5 files changed, 61 insertions, 19 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
index 68fe74d..f9ccc92 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
@@ -111,12 +111,14 @@ public class TypescriptTypesGenerator implements Generator {
for (var field : structDefinition.fields().orElse(List.of())) {
body.add(new TypescriptClassFieldDeclaration(
this.typescriptGenerator.generateFieldName(field.name()),
+ TypescriptVisibility.PUBLIC,
Optional.of(this.typescriptGenerator.generateTypeExpression(field.type().value())),
Optional.empty()
));
}
body.add(new TypescriptClassConstructor(
+ TypescriptVisibility.PUBLIC,
structDefinition.fields().orElse(List.of()).stream()
.map(field -> new TypescriptParam(
this.typescriptGenerator.generateFieldName(field.name()),
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
index 99ad2e4..cc30112 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
@@ -142,7 +142,8 @@ public class TypescriptWriter implements AutoCloseable {
}
private void writeClassConstructor(TypescriptClassConstructor constructor) throws IOException {
- this.writer.write("constructor(");
+ this.writeVisibility(constructor.visibility());
+ this.writer.write(" constructor(");
writeWithSeparator(
constructor.params(),
@@ -172,6 +173,8 @@ public class TypescriptWriter implements AutoCloseable {
private void writeClassFieldDeclaration(
TypescriptClassFieldDeclaration fieldDeclaration
) throws IOException {
+ this.writeVisibility(fieldDeclaration.visibility());
+ this.writer.write(" ");
this.writeIdentifier(fieldDeclaration.name());
if (fieldDeclaration.type().isPresent()) {
@@ -198,6 +201,16 @@ public class TypescriptWriter implements AutoCloseable {
}
}
+ // == Visibility ==
+
+ private void writeVisibility(TypescriptVisibility visibility) throws IOException {
+ this.writer.write(switch (visibility) {
+ case PRIVATE -> "private";
+ case PROTECTED -> "protected";
+ case PUBLIC -> "public";
+ });
+ }
+
// == Expressions ==
void writeExpression(TypescriptExpression expression) throws IOException {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java
index 76fc97c..21d8c90 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java
@@ -6,51 +6,57 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast;
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor imports
public record TypescriptClassConstructor(
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam> params,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement> body
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement {
public static org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(java.util.List.of(), java.util.List.of());
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility.PRIVATE, java.util.List.of(), java.util.List.of());
}
public record Builder(
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam> params,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement> body
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor build() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor(visibility, params, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder withVisibility(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder withParams(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam> params) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam param) {
var params = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam>(this.params);
params.add(param);
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam.Builder param) {
var params = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam>(this.params);
params.add(param.build());
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder withBody(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement> body) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addBodyElement(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement bodyElement) {
var body = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement>(this.body);
body.add(bodyElement);
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addBodyElement(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement.Builder bodyElement) {
var body = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement>(this.body);
body.add(bodyElement.build());
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder body
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java
index c327724..7d30ea7 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java
@@ -7,52 +7,58 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast;
public record TypescriptClassFieldDeclaration(
org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier name,
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> type,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> initialValue
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement {
public static org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.arbitrary().build(), java.util.Optional.empty(), java.util.Optional.empty());
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility.PRIVATE, java.util.Optional.empty(), java.util.Optional.empty());
}
public record Builder(
org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier name,
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> type,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> initialValue
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration build() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier name) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder name) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name.build(), type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name.build(), visibility, type, initialValue);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withVisibility(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withType(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> type) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression type) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, java.util.Optional.of(type), initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, java.util.Optional.of(type), initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression.Builder type) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, java.util.Optional.of(type.build()), initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, java.util.Optional.of(type.build()), initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withInitialValue(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> initialValue) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withInitialValue(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression initialValue) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, java.util.Optional.of(initialValue));
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, java.util.Optional.of(initialValue));
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withInitialValue(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression.Builder initialValue) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, java.util.Optional.of(initialValue.build()));
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, java.util.Optional.of(initialValue.build()));
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder body
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java
new file mode 100644
index 0000000..8bf3d67
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java
@@ -0,0 +1,15 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility imports
+
+public enum TypescriptVisibility {
+ PRIVATE,
+ PROTECTED,
+ PUBLIC
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility body
+}