我想编写一个arch unit测试来断言一个类扩展了AnyVal
类型。
val rule = classes().should().beAssignableTo(classOf[AnyVal])
val importedClasses = new ClassFileImporter().importPackages("a.b.c")
isAnyVal.check(importedClasses) // Always returns true
上面的代码实际上并没有捕获任何东西,也传递了不扩展AnyVal
的类。
[classOf[AnyVal]
是java.lang.Object
,因此您只是在问所有类都扩展了Object
,它们就是这样做的。
通过分析给定的Java字节码,将所有类导入到Java代码结构中,来完成此操作。
我希望您能得到Class
等,并且可以从那里进入Scala反射,即使您不会获得漂亮的DSL,但他们会改用自己的API。
因此,要回答Scala特定的问题,就需要解析@ScalaSignature
annotations,这对于开发人员来说可能是很大的工作(更不用说维护,或者至少在Scala 3之前依赖于特定的Scala版本)。