summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hobgoblin/src/output/lang/java/ast.hob6
-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
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaGeneratorTests.java13
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java80
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnitMatcher.java2
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageNameMatcher.java34
13 files changed, 166 insertions, 92 deletions
diff --git a/hobgoblin/src/output/lang/java/ast.hob b/hobgoblin/src/output/lang/java/ast.hob
index e77fb33..8286a96 100644
--- a/hobgoblin/src/output/lang/java/ast.hob
+++ b/hobgoblin/src/output/lang/java/ast.hob
@@ -3,7 +3,7 @@ import {DocComment} from ast;
// == Compilation units ==
struct JavaCompilationUnit {
- field packageName: List[JavaIdentifier];
+ field packageName: JavaPackageName;
field typeDeclaration: JavaTypeDeclaration;
}
@@ -217,6 +217,10 @@ struct JavaIdentifier {
field value: String;
}
+struct JavaPackageName {
+ field parts: List[JavaIdentifier];
+}
+
// == Custom areas ==
struct JavaCustomArea {
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");
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaGeneratorTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaGeneratorTests.java
index a99995b..4c7b0ff 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaGeneratorTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaGeneratorTests.java
@@ -5,6 +5,7 @@ import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaNamespaceConfig;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier;
+import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName;
import org.zwobble.hobgoblin.compiler.types.NamespaceName;
import java.util.List;
@@ -23,9 +24,9 @@ public class JavaGeneratorTests {
);
var generator = new JavaGenerator(config);
- var result = generator.namespaceToJavaPackageParts(NamespaceName.of("a", "b"));
+ var result = generator.namespaceToJavaPackageName(NamespaceName.of("a", "b"));
- assertThat(result, equalTo(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example"), JavaIdentifier.of("a"), JavaIdentifier.of("b"))));
+ assertThat(result, equalTo(JavaPackageName.of("com", "example", "a", "b")));
}
@Test
@@ -42,9 +43,9 @@ public class JavaGeneratorTests {
);
var generator = new JavaGenerator(config);
- var result = generator.namespaceToJavaPackageParts(NamespaceName.of("a", "b"));
+ var result = generator.namespaceToJavaPackageName(NamespaceName.of("a", "b"));
- assertThat(result, equalTo(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("other"))));
+ assertThat(result, equalTo(JavaPackageName.of("com", "other")));
}
@Test
@@ -61,8 +62,8 @@ public class JavaGeneratorTests {
);
var generator = new JavaGenerator(config);
- var result = generator.namespaceToJavaPackageParts(NamespaceName.of("a", "b", "c", "d"));
+ var result = generator.namespaceToJavaPackageName(NamespaceName.of("a", "b", "c", "d"));
- assertThat(result, equalTo(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("other"), JavaIdentifier.of("c"), JavaIdentifier.of("d"))));
+ assertThat(result, equalTo(JavaPackageName.of("com", "other", "c", "d")));
}
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
index ec09b72..b16494f 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
@@ -19,12 +19,12 @@ public class JavaWriterTests {
@Test
public void compilationUnit() throws IOException {
var java = new JavaCompilationUnit(
- List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example"), JavaIdentifier.of("shapes")),
+ JavaPackageName.of("com", "example", "shapes"),
new JavaClassDeclaration(
JavaIdentifier.of("Rectangle"),
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
)
);
@@ -50,7 +50,7 @@ public class JavaWriterTests {
JavaIdentifier.of("Rectangle"),
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -70,12 +70,12 @@ public class JavaWriterTests {
JavaIdentifier.of("Rectangle"),
List.of(
JavaTypeRef.topLevel(
- List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example")),
+ JavaPackageName.of("com", "example"),
JavaIdentifier.of("Shape")
)
),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -94,11 +94,11 @@ public class JavaWriterTests {
var java = new JavaClassDeclaration(
JavaIdentifier.of("Rectangle"),
List.of(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example")), JavaIdentifier.of("Shape")),
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example")), JavaIdentifier.of("Drawable"))
+ JavaTypeRef.topLevel(JavaPackageName.of("com", "example"), JavaIdentifier.of("Shape")),
+ JavaTypeRef.topLevel(JavaPackageName.of("com", "example"), JavaIdentifier.of("Drawable"))
),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -135,7 +135,7 @@ public class JavaWriterTests {
JavaBlock.EMPTY
)
),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -161,7 +161,7 @@ public class JavaWriterTests {
JavaIdentifier.of("Point"),
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Point")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Point")), "body"),
new DocComment("A 2D point.")
);
@@ -180,7 +180,7 @@ public class JavaWriterTests {
public void emptyEnumDeclaration() throws IOException {
var java = JavaEnumDeclaration.arbitrary()
.withName(JavaIdentifier.of("SmallNumber"))
- .withCustomArea(JavaCustomArea.forType(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("SmallNumber")), "body"))
+ .withCustomArea(JavaCustomArea.forType(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("SmallNumber")), "body"))
.build();
var string = write(writer -> writer.writeTypeDeclaration(java));
@@ -197,7 +197,7 @@ public class JavaWriterTests {
public void enumDeclarationWithConstants() throws IOException {
var java = JavaEnumDeclaration.arbitrary()
.withName(JavaIdentifier.of("SmallNumber"))
- .withCustomArea(JavaCustomArea.forType(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("SmallNumber")), "body"))
+ .withCustomArea(JavaCustomArea.forType(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("SmallNumber")), "body"))
.withConstants(List.of(
JavaEnumConstant.arbitrary().withName(JavaIdentifier.of("ZERO")).build(),
JavaEnumConstant.arbitrary().withName(JavaIdentifier.of("ONE")).build(),
@@ -224,7 +224,7 @@ public class JavaWriterTests {
var java = JavaEnumDeclaration.arbitrary()
.withName(JavaIdentifier.of("SmallNumber"))
.withDocComment(new DocComment("A small number."))
- .withCustomArea(JavaCustomArea.forType(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("SmallNumber")), "body"))
+ .withCustomArea(JavaCustomArea.forType(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("SmallNumber")), "body"))
.build();
var string = write(writer -> writer.writeTypeDeclaration(java));
@@ -245,7 +245,7 @@ public class JavaWriterTests {
JavaInterfaceOpenness.OPEN,
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Shape")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Shape")), "body"),
DocComment.EMPTY
);
@@ -266,7 +266,7 @@ public class JavaWriterTests {
JavaInterfaceOpenness.SEALED,
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Shape")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Shape")), "body"),
DocComment.EMPTY
);
@@ -286,11 +286,11 @@ public class JavaWriterTests {
JavaIdentifier.of("Shape"),
JavaInterfaceOpenness.SEALED,
List.of(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("abc"), JavaIdentifier.of("def")), JavaIdentifier.of("One")),
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("abc"), JavaIdentifier.of("def")), JavaIdentifier.of("Two"))
+ JavaTypeRef.topLevel(JavaPackageName.of("abc", "def"), JavaIdentifier.of("One")),
+ JavaTypeRef.topLevel(JavaPackageName.of("abc", "def"), JavaIdentifier.of("Two"))
),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Shape")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Shape")), "body"),
DocComment.EMPTY
);
@@ -311,7 +311,7 @@ public class JavaWriterTests {
JavaInterfaceOpenness.OPEN,
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Shape")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Shape")), "body"),
new DocComment("A 2D shape.")
);
@@ -350,7 +350,7 @@ public class JavaWriterTests {
JavaBlock.EMPTY
)
),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Shape")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Shape")), "body"),
DocComment.EMPTY
);
@@ -377,7 +377,7 @@ public class JavaWriterTests {
List.of(),
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Point")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Point")), "body"),
DocComment.EMPTY
);
@@ -398,7 +398,7 @@ public class JavaWriterTests {
List.of(),
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Point")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Point")), "body"),
new DocComment("A 2D point.")
);
@@ -419,10 +419,10 @@ public class JavaWriterTests {
JavaIdentifier.of("Rectangle"),
List.of(),
List.of(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example")), JavaIdentifier.of("Shape"))
+ JavaTypeRef.topLevel(JavaPackageName.of("com", "example"), JavaIdentifier.of("Shape"))
),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -442,11 +442,11 @@ public class JavaWriterTests {
JavaIdentifier.of("Rectangle"),
List.of(),
List.of(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example")), JavaIdentifier.of("Shape")),
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("com"), JavaIdentifier.of("example")), JavaIdentifier.of("Drawable"))
+ JavaTypeRef.topLevel(JavaPackageName.of("com", "example"), JavaIdentifier.of("Shape")),
+ JavaTypeRef.topLevel(JavaPackageName.of("com", "example"), JavaIdentifier.of("Drawable"))
),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -484,7 +484,7 @@ public class JavaWriterTests {
JavaBlock.EMPTY
)
),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Rectangle")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Rectangle")), "body"),
DocComment.EMPTY
);
@@ -830,7 +830,7 @@ public class JavaWriterTests {
@Test
public void staticFieldAccess() throws IOException {
var java = new JavaStaticFieldAccess(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("one")), JavaIdentifier.of("Two")),
+ JavaTypeRef.topLevel(JavaPackageName.of("one"), JavaIdentifier.of("Two")),
JavaIdentifier.of("three")
);
@@ -842,7 +842,7 @@ public class JavaWriterTests {
@Test
public void referenceToMethodOnType() throws IOException {
var java = new JavaMethodRef(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("one")), JavaIdentifier.of("Two")),
+ JavaTypeRef.topLevel(JavaPackageName.of("one"), JavaIdentifier.of("Two")),
JavaIdentifier.of("three")
);
@@ -854,7 +854,7 @@ public class JavaWriterTests {
@Test
public void newExpression() throws IOException {
var java = new JavaNewExpression(
- JavaTypeRef.topLevel(List.of(JavaIdentifier.of("one")), JavaIdentifier.of("Two")),
+ JavaTypeRef.topLevel(JavaPackageName.of("one"), JavaIdentifier.of("Two")),
List.of(new JavaIntegerLiteral(1), new JavaIntegerLiteral(2))
);
@@ -875,7 +875,7 @@ public class JavaWriterTests {
@Test
public void typeRefWithoutArgsHasNoAngleBrackets() throws IOException {
var java = JavaTypeRef.topLevel(
- List.of(JavaIdentifier.of("abc"), JavaIdentifier.of("def")),
+ JavaPackageName.of("abc", "def"),
JavaIdentifier.of("One")
);
@@ -887,11 +887,11 @@ public class JavaWriterTests {
@Test
public void typeRefWithArgsHasAngleBrackets() throws IOException {
var java = JavaTypeRef.topLevelGeneric(
- List.of(JavaIdentifier.of("abc"), JavaIdentifier.of("def")),
+ JavaPackageName.of("abc", "def"),
JavaIdentifier.of("One"),
List.of(
- JavaTypeArg.invariant(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Two"))),
- JavaTypeArg.invariant(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Three")))
+ JavaTypeArg.invariant(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Two"))),
+ JavaTypeArg.invariant(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Three")))
)
);
@@ -903,11 +903,11 @@ public class JavaWriterTests {
@Test
public void typeRefArgCanBeSuper() throws IOException {
var java = JavaTypeRef.topLevelGeneric(
- List.of(JavaIdentifier.of("abc"), JavaIdentifier.of("def")),
+ JavaPackageName.of("abc", "def"),
JavaIdentifier.of("One"),
List.of(
- JavaTypeArg.superType(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Two"))),
- JavaTypeArg.superType(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Three")))
+ JavaTypeArg.superType(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Two"))),
+ JavaTypeArg.superType(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Three")))
)
);
@@ -919,7 +919,7 @@ public class JavaWriterTests {
@Test
public void typeRefInnerTypeNameIsSeparatedByDot() throws IOException {
var java = JavaTypeRef.inner(
- List.of(JavaIdentifier.of("abc"), JavaIdentifier.of("def")),
+ JavaPackageName.of("abc", "def"),
JavaIdentifier.of("One"),
JavaIdentifier.of("Two")
);
@@ -936,7 +936,7 @@ public class JavaWriterTests {
List.of(),
List.of(),
List.of(),
- new JavaCustomArea(JavaTypeRef.topLevel(List.of(), JavaIdentifier.of("Point")), "body"),
+ new JavaCustomArea(JavaTypeRef.topLevel(JavaPackageName.EMPTY, JavaIdentifier.of("Point")), "body"),
DocComment.EMPTY
);
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnitMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnitMatcher.java
index 1c6541b..f2d516e 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnitMatcher.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaCompilationUnitMatcher.java
@@ -25,7 +25,7 @@ public class JavaCompilationUnitMatcher implements org.zwobble.precisely.Matcher
return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit.class, this.submatchers);
}
- public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnitMatcher withPackageName(org.zwobble.precisely.Matcher<? super java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier>> packageName) {
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnitMatcher withPackageName(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName> packageName) {
return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnitMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("packageName", org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit::packageName, packageName))).toList());
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageNameMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageNameMatcher.java
new file mode 100644
index 0000000..aa6eda6
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaPackageNameMatcher.java
@@ -0,0 +1,34 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
+
+public class JavaPackageNameMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> {
+ public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageNameMatcher isJavaPackageName() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageNameMatcher(java.util.List.of());
+ }
+
+ private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName>> submatchers;
+
+ private JavaPackageNameMatcher(java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName>> submatchers) {
+ this.submatchers = submatchers;
+ }
+
+ public org.zwobble.precisely.MatchResult match(java.lang.Object actual) {
+ return this.toMatcher().match(actual);
+ }
+
+ public org.zwobble.precisely.TextTree describe() {
+ return this.toMatcher().describe();
+ }
+
+ private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() {
+ return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName.class, this.submatchers);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageNameMatcher withParts(org.zwobble.precisely.Matcher<? super java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier>> parts) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageNameMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("parts", org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageName::parts, parts))).toList());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageNameMatcher body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaPackageNameMatcher body
+}