@@ -35,25 +35,67 @@ class HookItemScanner(
3535 val logger : KSPLogger
3636) : SymbolProcessor {
3737
38+ companion object {
39+ /* *
40+ * 不动
41+ */
42+ private const val RETURN_TYPE_PACKAGE = " kotlin.collections"
43+
44+ /* *
45+ * 不动
46+ */
47+ private const val RETURN_TYPE_NAME = " List"
48+
49+ /* *
50+ * Base类包名
51+ */
52+ private const val BASE_CLASS_PACKAGE = " top.sacz.timtool.hook.base"
53+
54+ /* *
55+ * Base类名
56+ */
57+ private const val BASE_CLASS_NAME = " BaseHookItem"
58+
59+ /* *
60+ * 生成的包名
61+ */
62+ private const val GENERATED_PACKAGE = " top.sacz.timtool.hook.gen"
63+
64+ /* *
65+ * 要扫描的字段
66+ */
67+ private const val TARGET_ANNOTATION = " top.sacz.timtool.hook.core.annotation.HookItem"
68+
69+ /* *
70+ * 生成的类名称
71+ * */
72+ private const val GENERATED_CLASS_NAME = " HookItemEntryList"
73+
74+ /* *
75+ * 生成的方法名称
76+ */
77+ private const val GENERATED_FUNCTION_NAME = " getAllHookItems"
78+ }
79+
3880 @OptIn(KspExperimental ::class )
3981 override fun process (resolver : Resolver ): List <KSAnnotated > {
4082 // 获取被注解标记的类列表
4183 val symbols =
42- resolver.getSymbolsWithAnnotation(" top.sacz.timtool.hook.core.annotation.HookItem " )
84+ resolver.getSymbolsWithAnnotation(TARGET_ANNOTATION )
4385 .filterIsInstance<KSClassDeclaration >()
4486 .toList()
4587 if (symbols.isEmpty()) return emptyList()
4688 // 返回类型
47- val returnType = ClassName (" kotlin.collections " , " List " )
48- // 基😮类
49- val genericsType = ClassName (" top.sacz.timtool.hook.base " , " BaseHookItem " )
89+ val returnType = ClassName (RETURN_TYPE_PACKAGE , RETURN_TYPE_NAME )
90+ // 基类
91+ val genericsType = ClassName (BASE_CLASS_PACKAGE , BASE_CLASS_NAME )
5092 // 方法构建
51- val methodBuilder = FunSpec .builder(" getAllHookItems " )
93+ val methodBuilder = FunSpec .builder(GENERATED_FUNCTION_NAME )
5294 methodBuilder.returns(returnType.parameterizedBy(genericsType))// 泛型返回
5395 methodBuilder.addAnnotation(JvmStatic ::class )// jvm静态方法
5496 methodBuilder.addCode(
5597 CodeBlock .Builder ().apply {
56- addStatement(" val list = mutableListOf<BaseHookItem >()" )
98+ addStatement(" val list = mutableListOf<%T >()" , genericsType )
5799 for (symbol in symbols) {
58100 val typeName = symbol.toClassName()
59101 // 获取 hook item 注解
@@ -72,14 +114,14 @@ class HookItemScanner(
72114 )
73115
74116 // class
75- val classSpec = TypeSpec .objectBuilder(" HookItemEntryList " )
117+ val classSpec = TypeSpec .objectBuilder(GENERATED_CLASS_NAME )
76118 .addFunction(methodBuilder.build())
77119 .build()
78120 val dependencies = Dependencies (true , * Array (symbols.size) {
79121 symbols[it].containingFile!!
80122 })
81123 // 文件
82- FileSpec .builder(" top.sacz.timtool.hook.gen " , " HookItemEntryList " )
124+ FileSpec .builder(GENERATED_PACKAGE , GENERATED_CLASS_NAME )
83125 .addType(classSpec)
84126 .build()
85127 .writeTo(codeGenerator, dependencies)
0 commit comments