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/output/generators/javatypes/JavaNamespaceConfig.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java69
2 files changed, 57 insertions, 18 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaNamespaceConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaNamespaceConfig.java
new file mode 100644
index 0000000..314875c
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaNamespaceConfig.java
@@ -0,0 +1,6 @@
+package org.zwobble.hobgoblin.compiler.output.generators.javatypes;
+
+import java.util.List;
+
+public record JavaNamespaceConfig(List<String> packageName) {
+}
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 95b33f6..0c4b8b8 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
@@ -30,40 +30,67 @@ public class JavaTypesGenerator implements Generator {
var relativeOutputPath = output.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
var packageName = output.getString("packageName").value();
+ var namespaceConfigs = parseNamespaceConfigs(output);
+ var nativeTypeConfigs = parseNativeTypeConfigs(output);
- var nativeTypeConfigs = new HashMap<SimpleNativeType, JavaNativeTypeConfig>(DEFAULT_NATIVE_TYPE_CONFIGS);
- 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()
- );
+ return new JavaTypesGenerator(outputPath, packageName, namespaceConfigs, nativeTypeConfigs);
+ };
+ }
- var javaTypeString = nativeTypeJson.getString("java").value();
- var javaTypeParts = Arrays.asList(javaTypeString.split("\\."));
- var javaTypeRef = JavaTypeRef.topLevel(javaTypeParts.subList(0, javaTypeParts.size() - 1), javaTypeParts.getLast());
+ private static Map<NamespaceName, JavaNamespaceConfig> parseNamespaceConfigs(Json5ObjectReader output) {
+ var namespaceConfigs = new HashMap<NamespaceName, JavaNamespaceConfig>();
+ output.getArrayOfObjects("namespaces").ifPresent(namespacesJson -> {
+ for (var namespaceJson : namespacesJson) {
+ var hobgoblinNamespaceString = namespaceJson.getString("hobgoblin").value();
+ var hobgoblinNamespaceParts = Arrays.asList(hobgoblinNamespaceString.split("/"));
+ var hobgoblinNamespace = new NamespaceName(hobgoblinNamespaceParts);
- nativeTypeConfigs.put(hobgoblinType, new JavaNativeTypeConfig(javaTypeRef, Optional.empty()));
- }
- });
+ var javaPackageString = namespaceJson.getString("java").value();
+ var javaPackage = Arrays.asList(javaPackageString.split("\\."));
- return new JavaTypesGenerator(outputPath, packageName, nativeTypeConfigs);
- };
+ namespaceConfigs.put(hobgoblinNamespace, new JavaNamespaceConfig(javaPackage));
+ }
+ });
+
+ return namespaceConfigs;
+ }
+
+ private static Map<SimpleNativeType, JavaNativeTypeConfig> parseNativeTypeConfigs(Json5ObjectReader output) {
+ var nativeTypeConfigs = new HashMap<SimpleNativeType, JavaNativeTypeConfig>(DEFAULT_NATIVE_TYPE_CONFIGS);
+ 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 = nativeTypeJson.getString("java").value();
+ var javaTypeParts = Arrays.asList(javaTypeString.split("\\."));
+ var javaTypeRef = JavaTypeRef.topLevel(javaTypeParts.subList(0, javaTypeParts.size() - 1), javaTypeParts.getLast());
+
+ nativeTypeConfigs.put(hobgoblinType, new JavaNativeTypeConfig(javaTypeRef, Optional.empty()));
+ }
+ });
+
+ return nativeTypeConfigs;
}
private final Path sourceRootDirectory;
private final List<String> packageName;
+ private final Map<NamespaceName, JavaNamespaceConfig> namespaceConfigs;
private final Map<SimpleNativeType, JavaNativeTypeConfig> nativeTypeConfigs;
public JavaTypesGenerator(
Path sourceRootDirectory,
String packageName,
+ Map<NamespaceName, JavaNamespaceConfig> namespaceConfigs,
Map<SimpleNativeType, JavaNativeTypeConfig> nativeTypeConfigs
) {
this.sourceRootDirectory = sourceRootDirectory;
this.packageName = List.of(packageName.split("\\."));
+ this.namespaceConfigs = namespaceConfigs;
this.nativeTypeConfigs = nativeTypeConfigs;
}
@@ -221,7 +248,13 @@ public class JavaTypesGenerator implements Generator {
);
}
- private ArrayList<String> namespaceToJavaPackageParts(NamespaceName namespaceName) {
+ private List<String> namespaceToJavaPackageParts(NamespaceName namespaceName) {
+ // TODO: handle subpackages
+ var namespaceConfig = this.namespaceConfigs.get(namespaceName);
+ if (namespaceConfig != null) {
+ return namespaceConfig.packageName();
+ }
+
var packageParts = new ArrayList<>(this.packageName);
packageParts.addAll(namespaceName.parts());
return packageParts;