summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java14
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java12
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java2
5 files changed, 32 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
index 132a89d..835b496 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
@@ -30,21 +30,23 @@ public record ProjectConfig(
}
private static ProjectConfig fromJson5(Path projectRoot, Json5ObjectReader document) {
- var outputsJson = document.getArrayOfObjects("outputs").orElseThrow();
+ var outputsJson = document.getObject("outputs").orElseThrow();
+ var generatorsJson = outputsJson.getArrayOfObjects("generators").orElseThrow();
+ var langsJson = outputsJson.getObject("langs");
var outputs = new ArrayList<OutputConfig>();
- for (var outputJson : outputsJson) {
- var generatorName = outputJson.getString("generator");
+ for (var generatorJson : generatorsJson) {
+ var generatorName = generatorJson.getString("generator");
var output = switch (generatorName.value()) {
case JavaTypesGenerator.NAME ->
- JavaTypesGenerator.parseOutputConfig(projectRoot, outputJson);
+ JavaTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson);
case JavaPreciselyMatchersGenerator.NAME ->
- JavaPreciselyMatchersGenerator.parseOutputConfig(projectRoot, outputJson);
+ JavaPreciselyMatchersGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson);
case RustTypesGenerator.NAME ->
- RustTypesGenerator.parseOutputConfig(projectRoot, outputJson);
+ RustTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson);
default ->
throw new UnknownGeneratorError(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
index 4b216a3..f22e8ff 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
@@ -14,7 +14,10 @@ public record JavaGeneratorConfig(
Map<NamespaceName, JavaNamespaceConfig> namespaceConfigs,
Map<SimpleNativeType, JavaNativeTypeConfig> nativeTypeConfigs
) {
- public static JavaGeneratorConfig parseOutputConfig(Json5ObjectReader output) {
+ public static JavaGeneratorConfig parseLangsConfig(Optional<Json5ObjectReader> langsJson) {
+ // TODO: better error if missing
+ var output = langsJson.orElseThrow().getObject("java").orElseThrow();
+
var packageName = output.getString("packageName").value();
var namespaceConfigs = parseNamespaceConfigs(output);
var nativeTypeConfigs = parseNativeTypeConfigs(output);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index fe2caa6..b693ef3 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -15,17 +15,24 @@ import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import static org.zwobble.hobgoblin.compiler.util.Casing.lowerCamelCaseToUpperCamelCase;
public class JavaPreciselyMatchersGenerator implements Generator {
public static final String NAME = "java-precisely-matchers";
- public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) {
+ public static OutputConfig parseGeneratorConfig(
+ Path projectRoot,
+ Json5ObjectReader generatorJson,
+ Optional<Json5ObjectReader> langsJson
+ ) {
return () -> {
- var relativeOutputPath = output.getString("path").value();
+ var relativeOutputPath = generatorJson.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
- var javaConfig = JavaGeneratorConfig.parseOutputConfig(output);
+
+ var javaConfig = JavaGeneratorConfig.parseLangsConfig(langsJson);
+
var javaGenerator = new JavaGenerator(javaConfig);
return new JavaPreciselyMatchersGenerator(outputPath, javaGenerator);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index d74322f..b601224 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -24,11 +24,17 @@ public class JavaTypesGenerator implements Generator {
private static final JavaIdentifier BUILDER_TYPE_NAME = JavaIdentifier.of("Builder");
private static final JavaIdentifier BUILD_METHOD_NAME = JavaIdentifier.of("build");
- public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) {
+ public static OutputConfig parseGeneratorConfig(
+ Path projectRoot,
+ Json5ObjectReader generatorJson,
+ Optional<Json5ObjectReader> langsJson
+ ) {
return () -> {
- var relativeOutputPath = output.getString("path").value();
+ var relativeOutputPath = generatorJson.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
- var javaConfig = JavaGeneratorConfig.parseOutputConfig(output);
+
+ var javaConfig = JavaGeneratorConfig.parseLangsConfig(langsJson);
+
var javaGenerator = new JavaGenerator(javaConfig);
return new JavaTypesGenerator(outputPath, javaConfig, javaGenerator);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
index 3847433..4593d38 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
@@ -21,7 +21,7 @@ import java.util.stream.Collectors;
public class RustTypesGenerator implements Generator {
public static final String NAME = "rust-types";
- public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) {
+ public static OutputConfig parseGeneratorConfig(Path projectRoot, Json5ObjectReader output) {
return () -> {
var relativeOutputPath = output.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);