2

我正在为 Kotlin 开发一个 KSP 注释处理器。代码在编译期间正确生成,我可以在输出目录中看到生成的类。现在我想通过 JUnit 和“com.github.tschuchortdev.KotlinCompilation”测试我的注释处理器。如果我调用 compile 方法,将生成代码,我可以在 Temp-Directory 中看到生成的类,但是如果我尝试加载该类,则会收到“java.lang.ClassNotFoundException:test.pack.TestClassDslBuilder”异常。我希望代码是不言自明的。我的问题是:为什么类没有编译并且不可加载?可能缺少 kompiler 的配置。

    @BeforeEach
    fun setup() {
        val kotlinSource = SourceFile.kotlin(
            "TestClass.kt", """
                package test.pack

                import yy.xxx.dsl.builder.annotation.DslBuilder
                @DslBuilder        
                class TestClass {

                }
            """
        )

        val compilation = KotlinCompilation().apply {
            sources = listOf(kotlinSource)
            symbolProcessorProviders = listOf(DslBuilderProcessorProvider())
            //workingDir =
            inheritClassPath = true
            verbose = false
            //messageOutputStream = System.out
            kspIncremental = true
        }
        compilationResult = compilation.compile()
        assertEquals(KotlinCompilation.ExitCode.OK, compilationResult.exitCode)

        // The next line leads to java.lang.ClassNotFoundException 
        compilationResult.classLoader.loadClass("test.pack.TestClassDslBuilder")
    }
4

0 回答 0