diff options
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java | 28 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java | 20 |
2 files changed, 15 insertions, 33 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 ee70dba..6f8eb4e 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java @@ -2,11 +2,7 @@ package org.zwobble.hobgoblin.compiler.config; import org.zwobble.hobgoblin.compiler.output.generators.Generator; import org.zwobble.hobgoblin.compiler.output.generators.javatypes.JavaTypesGenerator; -import org.zwobble.json5.parser.Json5Parser; -import org.zwobble.json5.values.Json5Array; -import org.zwobble.json5.values.Json5Object; -import org.zwobble.json5.values.Json5String; -import org.zwobble.json5.values.Json5Value; +import org.zwobble.json5.reader.Json5ObjectReader; import org.zwobble.sourcetext.SourceText; import java.io.IOException; @@ -26,29 +22,19 @@ public record ProjectConfig( } private static ProjectConfig fromSourceText(Path projectRoot, SourceText sourceText) { - return fromJson5(projectRoot, Json5Parser.parse(sourceText)); + return fromJson5(projectRoot, Json5ObjectReader.parse(sourceText)); } - private static ProjectConfig fromJson5(Path projectRoot, Json5Value document) { - if (!(document instanceof Json5Object documentObject)) { - throw new UnsupportedOperationException("TODO"); - } - - var outputsValue = documentObject.getValue("outputs").orElseThrow(); - if (!(outputsValue instanceof Json5Array outputsArray)) { - throw new UnsupportedOperationException("TODO"); - } + private static ProjectConfig fromJson5(Path projectRoot, Json5ObjectReader document) { + var outputsJson = document.getArrayOfObjects("outputs").orElseThrow(); var outputs = new ArrayList<OutputConfig>(); - for (var outputValue : outputsArray.elements()) { - if (!(outputValue instanceof Json5Object outputObject)) { - throw new UnsupportedOperationException("TODO"); - } - var generatorName = (Json5String) outputObject.getValue("generator").orElseThrow(); + for (var outputJson : outputsJson) { + var generatorName = outputJson.getString("generator"); var output = switch (generatorName.value()) { case JavaTypesGenerator.NAME -> - JavaTypesGenerator.parseOutputConfig(projectRoot, outputObject); + JavaTypesGenerator.parseOutputConfig(projectRoot, outputJson); default -> throw new UnsupportedOperationException("TODO"); 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 d585baf..95b33f6 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 @@ -9,9 +9,7 @@ import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter; import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.hobgoblin.compiler.types.*; -import org.zwobble.json5.values.Json5Array; -import org.zwobble.json5.values.Json5Object; -import org.zwobble.json5.values.Json5String; +import org.zwobble.json5.reader.Json5ObjectReader; import java.io.File; import java.io.IOException; @@ -27,25 +25,23 @@ public class JavaTypesGenerator implements Generator { Map.entry(NativeTypes.LIST_INNER, JavaNativeTypeConfig.of(JavaTypeRef.LIST, new JavaStaticMethodCall(JavaTypeRef.LIST, "of", List.of()))) ); - public static OutputConfig parseOutputConfig(Path projectRoot, Json5Object output) { + public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) { return () -> { - var relativeOutputPath = ((Json5String) output.getValue("path").orElseThrow()).value(); + var relativeOutputPath = output.getString("path").value(); var outputPath = projectRoot.resolve(relativeOutputPath); - var packageName = ((Json5String) output.getValue("packageName").orElseThrow()).value(); + var packageName = output.getString("packageName").value(); var nativeTypeConfigs = new HashMap<SimpleNativeType, JavaNativeTypeConfig>(DEFAULT_NATIVE_TYPE_CONFIGS); - output.getValue("nativeTypes").ifPresent(nativeTypesJson -> { - for (var nativeTypeJson : ((Json5Array) nativeTypesJson).elements()) { - var nativeTypeJsonObject = (Json5Object) nativeTypeJson; - - var hobgoblinTypeString = ((Json5String) nativeTypeJsonObject.getValue("hobgoblin").orElseThrow()).value(); + output.getArrayOfObjects("nativeTypes").ifPresent(nativeTypesJson -> { + for (var nativeTypeJson : nativeTypesJson) { + var hobgoblinTypeString = nativeTypeJson.getString("hobgoblin").value(); var hobgoblinTypeParts = Arrays.asList(hobgoblinTypeString.split("\\.")); var hobgoblinType = new SimpleNativeType( new NamespaceName(hobgoblinTypeParts.subList(0, hobgoblinTypeParts.size() - 1)), hobgoblinTypeParts.getLast() ); - var javaTypeString = ((Json5String) nativeTypeJsonObject.getValue("java").orElseThrow()).value(); + var javaTypeString = nativeTypeJson.getString("java").value(); var javaTypeParts = Arrays.asList(javaTypeString.split("\\.")); var javaTypeRef = JavaTypeRef.topLevel(javaTypeParts.subList(0, javaTypeParts.size() - 1), javaTypeParts.getLast()); |
