Slide 7
Slide 7 text
© 2024 Loglass Inc.
Kotlin1.9まで
仕方ないので、意図しないところでcopyを呼び出さないようにArchUnitで
チェックしていた。
@Test
fun `ドメイン層のデータクラスに付属する copyメソッドを呼び出すことはできない `() {
val allApplicationClasses = ClassFileImporter()
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
.importPackages("com.example")
methods()
.should(BanDomainLayerDataClassCopyCondition)
.check(allApplicationClasses)
}
private object BanDomainLayerDataClassCopyCondition :
ArchCondition("data classのcopyは、同じクラス内でしかコールすることができない ") {
override fun check(method: JavaMethod, events: ConditionEvents) {
if (method.name != "copy\$default") return
method.callsOfSelf.forEach { caller ->
// this.copyは許容する
if (method.owner != caller.originOwner) events.add(SimpleConditionEvent.violated(method,"エラーメッセージ "))
}
}
}