1 import com.google.devtools.ksp.processing.* 2 import com.google.devtools.ksp.symbol.* 3 import com.google.devtools.ksp.validate 4 5 class TestProcessor( 6 val codeGenerator: CodeGenerator, 7 val logger: KSPLogger 8 ) : SymbolProcessor { 9 var rounds = 0 processnull10 override fun process(resolver: Resolver): List<KSAnnotated> { 11 rounds++ 12 13 val syms = resolver.getSymbolsWithAnnotation("com.example.Anno").toList() 14 15 syms.forEach { 16 val v = it.validate() 17 if (rounds == 2 && v == false) { 18 logger.error("validation failed: $it") 19 } 20 } 21 22 if (rounds == 1) { 23 codeGenerator.createNewFile(Dependencies(true), "com.example", "Foo1").use { 24 it.write("package com.example\n\ninterface Foo1\n".toByteArray()) 25 } 26 codeGenerator.createNewFile(Dependencies(true), "com.example", "Foo2", "java").use { 27 it.write("package com.example;\n\npublic interface Foo2{}\n".toByteArray()) 28 } 29 return syms.toList() 30 } 31 32 return emptyList() 33 } 34 } 35 36 class TestProcessorProvider : SymbolProcessorProvider { createnull37 override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { 38 return TestProcessor(environment.codeGenerator, environment.logger) 39 } 40 } 41