@@ -3,11 +3,11 @@ package com.tschuchort.compiletesting
33import com.nhaarman.mockitokotlin2.any
44import com.nhaarman.mockitokotlin2.inOrder
55import com.nhaarman.mockitokotlin2.mock
6- import com.nhaarman.mockitokotlin2.verify
76import com.tschuchort.compiletesting.KotlinCompilation.ExitCode
87import org.assertj.core.api.Assertions.assertThat
98import org.jetbrains.kotlin.ksp.processing.Resolver
109import org.jetbrains.kotlin.ksp.processing.SymbolProcessor
10+ import org.jetbrains.kotlin.ksp.symbol.KSClassDeclaration
1111import org.junit.Rule
1212import org.junit.Test
1313import org.junit.runner.RunWith
@@ -48,6 +48,55 @@ class KspTest {
4848 }
4949 }
5050
51+ @Test
52+ fun processorGeneratedCodeIsVisible () {
53+ val annotation = SourceFile .kotlin(
54+ " TestAnnotation.kt" , """
55+ package foo.bar
56+ annotation class TestAnnotation
57+ """ .trimIndent()
58+ )
59+ val targetClass = SourceFile .kotlin(
60+ " AppCode.kt" , """
61+ package foo.bar
62+ import foo.bar.generated.AppCode_Gen
63+ @TestAnnotation
64+ class AppCode {
65+ init {
66+ // access generated code
67+ AppCode_Gen()
68+ }
69+ }
70+ """ .trimIndent()
71+ )
72+ val processor = object : AbstractSymbolProcessor () {
73+ override fun process (resolver : Resolver ) {
74+ val symbols = resolver.getSymbolsWithAnnotation(" foo.bar.TestAnnotation" )
75+ assertThat(symbols).isNotEmpty()
76+ val klass = symbols.first()
77+ check(klass is KSClassDeclaration )
78+ val qName = klass.qualifiedName ? : error(" should've found qualified name" )
79+ val genPackage = " ${qName.getQualifier()} .generated"
80+ val genClassName = " ${qName.getShortName()} _Gen"
81+ val outFile = codeGenerator.createNewFile(
82+ packageName = genPackage,
83+ fileName = genClassName
84+ )
85+ outFile.writeText(
86+ """
87+ package $genPackage
88+ class $genClassName () {}
89+ """ .trimIndent()
90+ )
91+ }
92+ }
93+ val result = KotlinCompilation ().apply {
94+ sources = listOf (annotation, targetClass)
95+ symbolProcessor(processorRule.delegateTo(processor))
96+ }.compile()
97+ assertThat(result.exitCode).isEqualTo(ExitCode .OK )
98+ }
99+
51100 companion object {
52101 private val DUMMY_KOTLIN_SRC = SourceFile .kotlin(
53102 " foo.bar.Dummy.kt" , """
0 commit comments