summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-20 20:51:03 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-26 10:56:39 +0100
commitbe132b1abe3ef9d1663f15799b971d5cfee3f469 (patch)
treedfb0effe51756218022b5d7a2544b55c42136bf5 /src/main
parentb4e83536273f228996124a33c52221ed0d0c0299 (diff)
Introduce JavaPackageName
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java21
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java10
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java20
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnit.java12
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageName.java33
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java18
8 files changed, 79 insertions, 44 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
index ae9a81d..ccbb27c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
@@ -1,10 +1,7 @@
package org.zwobble.hobgoblin.compiler.output.generators.java;
import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter;
-import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit;
-import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier;
-import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeArg;
-import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef;
+import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*;
import org.zwobble.hobgoblin.compiler.types.*;
import org.zwobble.hobgoblin.compiler.util.Casing;
@@ -28,7 +25,7 @@ public class JavaGenerator {
) throws IOException {
for (var javaCompilationUnit : javaCompilationUnits) {
var javaCompilationUnitPath = sourceRootDirectory
- .resolve(javaCompilationUnit.packageName().stream().map(JavaIdentifier::value).collect(Collectors.joining(File.separator)))
+ .resolve(javaCompilationUnit.packageName().parts().stream().map(JavaIdentifier::value).collect(Collectors.joining(File.separator)))
.resolve(javaCompilationUnit.typeDeclaration().name().value() + ".java");
try (var writer = JavaWriter.file(javaCompilationUnitPath)) {
writer.writeCompilationUnit(javaCompilationUnit);
@@ -36,7 +33,7 @@ public class JavaGenerator {
}
}
- public List<JavaIdentifier> namespaceToJavaPackageParts(NamespaceName namespaceName) {
+ public JavaPackageName namespaceToJavaPackageName(NamespaceName namespaceName) {
var ancestorNamespaceName = namespaceName;
var remainingNamespaceNameParts = new ArrayList<String>();
while (!ancestorNamespaceName.isRoot()) {
@@ -46,7 +43,7 @@ public class JavaGenerator {
for (var namespaceNamePart : remainingNamespaceNameParts.reversed()) {
packageParts.add(generatePackageNamePart(namespaceNamePart));
}
- return packageParts;
+ return new JavaPackageName(packageParts);
}
remainingNamespaceNameParts.add(ancestorNamespaceName.parts().getLast());
ancestorNamespaceName = ancestorNamespaceName.parent();
@@ -56,7 +53,7 @@ public class JavaGenerator {
for (var namespaceNamePart : namespaceName.parts()) {
packageParts.add(generatePackageNamePart(namespaceNamePart));
}
- return packageParts;
+ return new JavaPackageName(packageParts);
}
public JavaIdentifier generateEnumConstantName(String name) {
@@ -100,7 +97,7 @@ public class JavaGenerator {
case EnumType enumType ->
JavaTypeRef.topLevel(
- namespaceToJavaPackageParts(enumType.namespaceName()),
+ namespaceToJavaPackageName(enumType.namespaceName()),
generateTypeName(enumType.name())
);
@@ -115,7 +112,7 @@ public class JavaGenerator {
}
} else {
yield JavaTypeRef.topLevel(
- namespaceToJavaPackageParts(simpleNativeType.namespaceName()),
+ namespaceToJavaPackageName(simpleNativeType.namespaceName()),
generateTypeName(simpleNativeType.name())
);
}
@@ -123,13 +120,13 @@ public class JavaGenerator {
case StructType structType ->
JavaTypeRef.topLevel(
- namespaceToJavaPackageParts(structType.namespaceName()),
+ namespaceToJavaPackageName(structType.namespaceName()),
generateTypeName(structType.name())
);
case SumType sumType ->
JavaTypeRef.topLevel(
- namespaceToJavaPackageParts(sumType.namespaceName()),
+ namespaceToJavaPackageName(sumType.namespaceName()),
generateTypeName(sumType.name())
);
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 7eb2c32..4b216a3 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
@@ -58,7 +58,8 @@ public record JavaGeneratorConfig(
var javaTypeParts = Arrays.stream(javaTypeString.split("\\."))
.map(JavaIdentifier::of)
.toList();
- var javaTypeRef = JavaTypeRef.topLevel(javaTypeParts.subList(0, javaTypeParts.size() - 1), javaTypeParts.getLast());
+ var javaPackageName = new JavaPackageName(javaTypeParts.subList(0, javaTypeParts.size() - 1));
+ var javaTypeRef = JavaTypeRef.topLevel(javaPackageName, javaTypeParts.getLast());
nativeTypeConfigs.put(hobgoblinType, new JavaNativeTypeConfig(javaTypeRef, Optional.empty(), Optional.empty()));
}
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 b8a634c..c5300b1 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
@@ -52,7 +52,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
}
private List<JavaCompilationUnit> generateNamespace(TypedNamespaceNode namespace, Context context) {
- var packageParts = namespaceToJavaPackageParts(namespace.namespaceName());
+ var packageParts = namespaceToJavaPackageName(namespace.namespaceName());
var javaCompilationUnits = new ArrayList<JavaCompilationUnit>();
@@ -91,7 +91,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
var javaStructTypeRef = this.javaGenerator.generateTypeRef(structType);
var javaMatcherTypeRef = JavaTypeRef.topLevel(
- namespaceToJavaPackageParts(structType.namespaceName()),
+ namespaceToJavaPackageName(structType.namespaceName()),
matcherTypeName
);
@@ -250,8 +250,8 @@ public class JavaPreciselyMatchersGenerator implements Generator {
);
}
- private List<JavaIdentifier> namespaceToJavaPackageParts(NamespaceName namespaceName) {
- return this.javaGenerator.namespaceToJavaPackageParts(namespaceName);
+ private JavaPackageName namespaceToJavaPackageName(NamespaceName namespaceName) {
+ return this.javaGenerator.namespaceToJavaPackageName(namespaceName);
}
private static class Context {
@@ -275,7 +275,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
}
- private static final List<JavaIdentifier> PRECISELY_PACKAGE_NAME = List.of(JavaIdentifier.of("org"), JavaIdentifier.of("zwobble"), JavaIdentifier.of("precisely"));
+ private static final JavaPackageName PRECISELY_PACKAGE_NAME = JavaPackageName.of("org", "zwobble", "precisely");
private static final JavaTypeRef MATCH_RESULT_REF = JavaTypeRef.topLevel(PRECISELY_PACKAGE_NAME, JavaIdentifier.of("MatchResult"));
private static final JavaTypeRef MATCHERS_REF = JavaTypeRef.topLevel(PRECISELY_PACKAGE_NAME, JavaIdentifier.of("Matchers"));
private static final JavaTypeRef TEXT_TREE_REF = JavaTypeRef.topLevel(PRECISELY_PACKAGE_NAME, JavaIdentifier.of("TextTree"));
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 c85ff5d..82585c6 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
@@ -20,9 +20,9 @@ import static org.zwobble.hobgoblin.compiler.util.Casing.lowerCamelCaseToUpperCa
public class JavaTypesGenerator implements Generator {
public static final String NAME = "java-types";
- private static final JavaIdentifier ARBITRARY_METHOD_NAME = new JavaIdentifier("arbitrary");
- private static final JavaIdentifier BUILDER_TYPE_NAME = new JavaIdentifier("Builder");
- private static final JavaIdentifier BUILD_METHOD_NAME = new JavaIdentifier("build");
+ private static final JavaIdentifier ARBITRARY_METHOD_NAME = JavaIdentifier.of("arbitrary");
+ 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) {
return () -> {
@@ -61,7 +61,7 @@ public class JavaTypesGenerator implements Generator {
}
private List<JavaCompilationUnit> generateNamespace(TypedNamespaceNode namespace, Context context) {
- var packageParts = namespaceToJavaPackageParts(namespace.namespaceName());
+ var packageParts = namespaceToJavaPackageName(namespace.namespaceName());
var javaCompilationUnits = new ArrayList<JavaCompilationUnit>();
@@ -297,8 +297,8 @@ public class JavaTypesGenerator implements Generator {
);
}
- private List<JavaIdentifier> namespaceToJavaPackageParts(NamespaceName namespaceName) {
- return this.javaGenerator.namespaceToJavaPackageParts(namespaceName);
+ private JavaPackageName namespaceToJavaPackageName(NamespaceName namespaceName) {
+ return this.javaGenerator.namespaceToJavaPackageName(namespaceName);
}
private JavaTypeRef generateTypeRef(
@@ -330,8 +330,8 @@ public class JavaTypesGenerator implements Generator {
}
private JavaTypeRef generateBuilderTypeRef(NamespaceName namespaceName, String name) {
- var javaPackage = namespaceToJavaPackageParts(namespaceName);
- return JavaTypeRef.inner(javaPackage, generateTypeName(name), BUILDER_TYPE_NAME);
+ var javaPackageName = namespaceToJavaPackageName(namespaceName);
+ return JavaTypeRef.inner(javaPackageName, generateTypeName(name), BUILDER_TYPE_NAME);
}
private JavaExpression arbitraryValue(
@@ -358,8 +358,8 @@ public class JavaTypesGenerator implements Generator {
yield nativeTypeConfig(simpleNativeType)
.flatMap(nativeTypeConfig -> nativeTypeConfig.arbitraryValue())
.orElseGet(() -> {
- var javaPackageName = namespaceToJavaPackageParts(simpleNativeType.namespaceName());
- var javaClassName = JavaIdentifier.of("HobgoblinNative" + lowerCamelCaseToUpperCamelCase(javaPackageName.getLast().value()));
+ var javaPackageName = namespaceToJavaPackageName(simpleNativeType.namespaceName());
+ var javaClassName = generateTypeName("HobgoblinNative" + lowerCamelCaseToUpperCamelCase(javaPackageName.parts().getLast().value()));
return new JavaStaticMethodCall(
JavaTypeRef.topLevel(javaPackageName, javaClassName),
generateFieldName("arbitrary" + simpleNativeType.name()),
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
index 5814998..3f7481d 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
@@ -422,9 +422,9 @@ public class JavaWriter implements AutoCloseable {
this.writer.write("null");
}
- private void writePackageName(List<JavaIdentifier> packageName) throws IOException {
+ private void writePackageName(JavaPackageName packageName) throws IOException {
writeWithSeparator(
- packageName,
+ packageName.parts(),
this::writeIdentifier,
() -> this.writer.write(".")
);
@@ -520,7 +520,7 @@ public class JavaWriter implements AutoCloseable {
}
private static void writeTypeRef(JavaTypeRef type, WriteString writer) throws IOException {
- for (var part : type.packageName()) {
+ for (var part : type.packageName().parts()) {
writeIdentifier(part, writer);
writer.write(".");
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnit.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnit.java
index 42a58d0..dd034c9 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnit.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnit.java
@@ -2,20 +2,24 @@
package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
-public record JavaCompilationUnit(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> packageName, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration typeDeclaration) {
+public record JavaCompilationUnit(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName packageName, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration typeDeclaration) {
public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder(java.util.List.of(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassDeclaration.arbitrary().build());
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassDeclaration.arbitrary().build());
}
- public record Builder(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> packageName, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration typeDeclaration) {
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName packageName, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration typeDeclaration) {
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit build() {
return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit(packageName, typeDeclaration);
}
- public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder withPackageName(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> packageName) {
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder withPackageName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName packageName) {
return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder(packageName, typeDeclaration);
}
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder withPackageName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder packageName) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder(packageName.build(), typeDeclaration);
+ }
+
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder withTypeDeclaration(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration typeDeclaration) {
return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.Builder(packageName, typeDeclaration);
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageName.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageName.java
new file mode 100644
index 0000000..00a3101
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageName.java
@@ -0,0 +1,33 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
+
+import java.util.Arrays;
+import java.util.List;
+
+public record JavaPackageName(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> parts) {
+ public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder(java.util.List.of());
+ }
+
+ public record Builder(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> parts) {
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName(parts);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder withParts(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> parts) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder(parts);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName body
+ public static final JavaPackageName EMPTY = new JavaPackageName(List.of());
+
+ public static JavaPackageName of(String... parts) {
+ return new JavaPackageName(Arrays.stream(parts).map(JavaIdentifier::of).toList());
+ }
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java
index 39edb73..0050eb8 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java
@@ -3,21 +3,21 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
import java.util.Arrays;
import java.util.List;
-public record JavaTypeRef(List<JavaIdentifier> packageName, List<JavaIdentifier> typeNames, List<JavaTypeArg> args) {
+public record JavaTypeRef(JavaPackageName packageName, List<JavaIdentifier> typeNames, List<JavaTypeArg> args) {
private static JavaTypeRef primitive(String name) {
- return new JavaTypeRef(List.of(), List.of(new JavaIdentifier(name)), List.of());
+ return new JavaTypeRef(JavaPackageName.EMPTY, List.of(new JavaIdentifier(name)), List.of());
}
- public static JavaTypeRef topLevel(List<JavaIdentifier> packageName, JavaIdentifier name) {
+ public static JavaTypeRef topLevel(JavaPackageName packageName, JavaIdentifier name) {
return new JavaTypeRef(packageName, List.of(name), List.of());
}
- public static JavaTypeRef inner(List<JavaIdentifier> packageName, JavaIdentifier... typeNames) {
+ public static JavaTypeRef inner(JavaPackageName packageName, JavaIdentifier... typeNames) {
return new JavaTypeRef(packageName, Arrays.asList(typeNames), List.of());
}
public static JavaTypeRef topLevelGeneric(
- List<JavaIdentifier> packageName,
+ JavaPackageName packageName,
JavaIdentifier name,
List<JavaTypeArg> args
) {
@@ -25,7 +25,7 @@ public record JavaTypeRef(List<JavaIdentifier> packageName, List<JavaIdentifier>
}
public static JavaTypeRef generic(
- List<JavaIdentifier> packageName,
+ JavaPackageName packageName,
List<JavaIdentifier> typeNames,
List<JavaTypeArg> args
) {
@@ -33,9 +33,9 @@ public record JavaTypeRef(List<JavaIdentifier> packageName, List<JavaIdentifier>
}
private static class JavaPackages {
- private static final List<JavaIdentifier> JAVA_LANG = List.of(JavaIdentifier.of("java"), JavaIdentifier.of("lang"));
- private static final List<JavaIdentifier> JAVA_UTIL = List.of(JavaIdentifier.of("java"), JavaIdentifier.of("util"));
- private static final List<JavaIdentifier> JAVA_UTIL_STREAM = List.of(JavaIdentifier.of("java"), JavaIdentifier.of("util"), JavaIdentifier.of("stream"));
+ private static final JavaPackageName JAVA_LANG = JavaPackageName.of("java", "lang");
+ private static final JavaPackageName JAVA_UTIL = JavaPackageName.of("java", "util");
+ private static final JavaPackageName JAVA_UTIL_STREAM = JavaPackageName.of("java", "util", "stream");
}
public static final JavaTypeRef INT = primitive("int");