diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-26 19:55:53 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-26 19:59:42 +0100 |
| commit | 0559249e215564b9c3f2c804247bb8c67fb7bef8 (patch) | |
| tree | 8f4b5151899607df51a34d15938bae811ef4f18a /src/main/java/org | |
| parent | ba5f68aa1f6e909dad92dac0fdbf6cf808fbfe76 (diff) | |
Check subdirectories for source files
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index 40d9453..db757ce 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -11,9 +11,13 @@ import org.zwobble.sourcetext.SourceText; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.List; public class HobgoblinCompiler { public static final String FILE_NAME_EXTENSION = ".hob"; @@ -26,8 +30,6 @@ public class HobgoblinCompiler { var generators = config.createGenerators(); var sourceDirectory = projectRoot.resolve("src"); - var sourceFiles = sourceDirectory.toFile() - .listFiles(file -> file.toPath().toString().endsWith(FILE_NAME_EXTENSION)); var typedNamespaceNodes = new ArrayList<TypedNamespaceNode>(); @@ -36,10 +38,10 @@ public class HobgoblinCompiler { typeCheckerContext.addNativeType(NativeTypes.STRING); typeCheckerContext.addNativeTypeConstructor(NativeTypes.LIST); - for (var sourceFile : sourceFiles) { - var namespaceName = sourceFileNamespaceName(sourceDirectory, sourceFile.toPath()); - var sourceContents = Files.readString(sourceFile.toPath(), StandardCharsets.UTF_8); - var sourceText = SourceText.fromString(sourceFile.toPath().toString(), sourceContents); + for (var sourceFile : collectSourceFiles(sourceDirectory)) { + var namespaceName = sourceFileNamespaceName(sourceDirectory, sourceFile); + var sourceContents = Files.readString(sourceFile, StandardCharsets.UTF_8); + var sourceText = SourceText.fromString(sourceFile.toString(), sourceContents); var untypedNamespaceNode = Parser.parseNamespace(sourceText, namespaceName); var typedNamespaceNode = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext); @@ -67,4 +69,33 @@ public class HobgoblinCompiler { return new NamespaceName(parts); } + + private static List<Path> collectSourceFiles( + Path sourceRoot + ) throws IOException { + var sourceFiles = new ArrayList<Path>(); + + Files.walkFileTree(sourceRoot, new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile( + Path file, + BasicFileAttributes attrs + ) { + if (file.toString().endsWith(FILE_NAME_EXTENSION)) { + sourceFiles.add(file); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory( + Path dir, + IOException exc + ) { + return FileVisitResult.CONTINUE; + } + }); + sourceFiles.sort(null); + return sourceFiles; + } } |
