Как я могу утверждать, расширяет ли класс AnyVal с помощью ArchUnit

Я хочу написать арку тест Arch, чтобы убедиться, что класс расширяетсяAnyVal тип.

val rule = classes().should().beAssignableTo(classOf[AnyVal])
val importedClasses = new ClassFileImporter().importPackages("a.b.c")

isAnyVal.check(importedClasses) // Always returns true

Приведенный выше код на самом деле ничего не улавливает и передает классы, которые не расширяются. AnyVal также.

1 ответ

Решение

classOf[AnyVal] является java.lang.Object, поэтому вы просто просите, чтобы все классы расширили Object, что они и делают.

Из руководства пользователя ArchUnit:

Это делается путем анализа заданного байт-кода Java и импорта всех классов в структуру кода Java.

Я надеялся, что ты получишь Class и т.д. и могли бы перейти оттуда в отражение Scala, даже если вы не получите хороший DSL, но вместо этого они используют свой собственный API.

Итак, чтобы ответить на вопросы, относящиеся к Scala, нужно проанализировать @ScalaSignatureаннотации, и это, вероятно, потребует от разработчиков очень больших усилий (не говоря уже об обслуживании или зависимости от конкретной версии Scala, по крайней мере, до Scala 3).

Другие вопросы по тегам