diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-30 11:32:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-30 13:28:46 +0100 |
| commit | cfb59a62fbdcbecb3b842e3df0bea3b6d159007c (patch) | |
| tree | cc2a19bd88a58142bd3934c7f7d82f03de06d071 /src/main/java | |
| parent | a7d5133ac7cc82e3826f90d2e5f1ca5cd3f08676 (diff) | |
Add explicit visibility to TypeScript AST
Diffstat (limited to 'src/main/java')
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 +} |
