aboutsummaryrefslogtreecommitdiff
path: root/umlgen/src/main/java/moe/yuuta/umlgen/Visitor.kt
blob: 3897e8a333bc5a56f99eb1a86dcb4de7c6f1a33e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package moe.yuuta.umlgen

import java.io.IOException
import java.nio.charset.StandardCharsets
import java.nio.file.*
import java.nio.file.attribute.BasicFileAttributes
import java.util.function.BiFunction

class Visitor(private val consumer: BiFunction<Path, String, Void?>) : FileVisitor<Path> {
    @Throws(IOException::class)
    override fun preVisitDirectory(path: Path, basicFileAttributes: BasicFileAttributes): FileVisitResult {
        return FileVisitResult.CONTINUE
    }

    @Throws(IOException::class)
    override fun visitFileFailed(path: Path, e: IOException?): FileVisitResult {
        System.err.printf("Open %s: %s\n", path.toFile(), e?.message)
        return FileVisitResult.CONTINUE
    }

    @Throws(IOException::class)
    override fun postVisitDirectory(path: Path, e: IOException?): FileVisitResult {
        return FileVisitResult.CONTINUE
    }

    @Throws(IOException::class)
    override fun visitFile(path: Path, basicFileAttributes: BasicFileAttributes?): FileVisitResult {
        if (!path.fileName.toString().endsWith(".java")) {
            return FileVisitResult.CONTINUE
        }
        val fd = Files.newInputStream(path, StandardOpenOption.READ)
        val buf = String(fd.readAllBytes(), StandardCharsets.UTF_8)
        fd.close()
        consumer.apply(path, buf)
        return FileVisitResult.CONTINUE
    }
}