Skip to content

Commit

Permalink
Simplify DOT generation
Browse files Browse the repository at this point in the history
  • Loading branch information
Lipen committed Aug 8, 2024
1 parent 4c0a45f commit 5d0be84
Showing 1 changed file with 20 additions and 24 deletions.
44 changes: 20 additions & 24 deletions jacodb-ets/src/test/kotlin/org/jacodb/ets/test/utils/Entrypoints.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
package org.jacodb.ets.test.utils

import org.jacodb.ets.dto.EtsFileDto
import org.jacodb.ets.dto.convertToEtsFile
import org.jacodb.ets.model.EtsFile
import org.jacodb.ets.utils.dumpDot
import org.jacodb.ets.utils.render
import org.jacodb.ets.utils.resolveSibling
import org.jacodb.ets.utils.toText
import java.nio.file.Path
import kotlin.io.path.ExperimentalPathApi
Expand Down Expand Up @@ -81,45 +83,39 @@ object DumpEtsFileToDot {
@OptIn(ExperimentalPathApi::class)
object DumpEtsFilesToDot {
private const val BASE = "/samples"
private const val ETSIR_DIR = "etsir/ast" // relative to BASE
private const val ETSIR = "etsir/ast" // relative to BASE
private val DOT_DIR = Path("generated/samples/dot")

@JvmStatic
fun main(args: Array<String>) {
val res = "$BASE/$ETSIR_DIR"
val res = "$BASE/$ETSIR"
val etsirDir = object {}::class.java.getResource(res)?.toURI()?.toPath()
?: error("Resource not found: '$res'")
logger.info { "etsirDir = $etsirDir" }

etsirDir.walk()
.filter { it.name.endsWith(".json") }
.map { it.relativeTo(etsirDir) }
.forEach { path ->
logger.info { "Processing: $path" }
val relative = path.relativeTo(etsirDir)

process(relative, ".dto") {
loadEtsFileDtoFromResource(it)
val etsFileDto = loadEtsFileDtoFromResource("$BASE/$ETSIR/$path")
run {
val dotPath = DOT_DIR / path.resolveSibling {
it.nameWithoutExtension + ".dto.dot"
}
etsFileDto.dumpDot(dotPath)
render(DOT_DIR, dotPath.relativeTo(DOT_DIR))
}
process(relative, "") {
loadEtsFileFromResource(it)

val etsFile = convertToEtsFile(etsFileDto)
run {
val dotPath = DOT_DIR / path.resolveSibling {
it.nameWithoutExtension + ".dot"
}
etsFile.dumpDot(dotPath)
render(DOT_DIR, dotPath.relativeTo(DOT_DIR))
}
}
}

private fun <T> process(
relative: Path,
suffix: String,
load: (String) -> T,
) {
val resourcePath = "$BASE/$ETSIR_DIR/$relative"
val relativeDot = (Path(ETSIR_DIR) / relative)
.resolveSibling("${relative.nameWithoutExtension}$suffix.dot")
val dotPath = DOT_DIR / relativeDot
when (val f = load(resourcePath)) {
is EtsFileDto -> f.dumpDot(dotPath)
is EtsFile -> f.dumpDot(dotPath)
else -> error("Unknown type: $f")
}
render(DOT_DIR, relativeDot)
}
}

0 comments on commit 5d0be84

Please sign in to comment.