1 import com.google.devtools.ksp.getClassDeclarationByName 2 import com.google.devtools.ksp.processing.* 3 import com.google.devtools.ksp.symbol.* 4 import com.google.devtools.ksp.validate 5 6 class ValidateProcessor(env: SymbolProcessorEnvironment) : SymbolProcessor { 7 var logger: KSPLogger = env.logger 8 processnull9 override fun process(resolver: Resolver): List<KSAnnotated> { 10 val javaClass = resolver.getClassDeclarationByName("com.example.JavaClass")!! 11 val nestedClass = javaClass.declarations.filterIsInstance<KSClassDeclaration>() 12 .single { it.simpleName.asString() == "NestedClass" } 13 val provideString = nestedClass.declarations.filterIsInstance<KSFunctionDeclaration>() 14 .single { it.simpleName.asString() == "provideString" } 15 16 if (provideString.returnType!!.resolve().isError) { 17 logger.error("provideString.returnType: not ok") 18 } 19 if (nestedClass.asStarProjectedType().isError == true) { 20 logger.error("$javaClass.asStarProjectedType(): not ok") 21 } 22 if (!nestedClass.validate()) { 23 logger.error("Failed to validate $nestedClass") 24 } 25 if (!javaClass.validate()) { 26 logger.error("Failed to validate $javaClass") 27 } 28 return emptyList() 29 } 30 } 31 32 class ValidateProcessorProvider : SymbolProcessorProvider { createnull33 override fun create( 34 env: SymbolProcessorEnvironment 35 ): SymbolProcessor { 36 return ValidateProcessor(env) 37 } 38 } 39