@@ -64,37 +64,54 @@ class AnnotationProcessor {
64
64
?.map { parseAnnotation(it) }
65
65
? : emptyList()
66
66
67
- val methodDescriptors = classNode.methods
67
+ val methodAnnotationsMap : Map < String , List < AnnotationData >> = classNode.methods
68
68
.filterNot { it.name == " <init>" }
69
+ .filter { methodNode ->
70
+ methodNode.name.matches(Regex (" ^get[A-Z].*\\ \$ annotations\$ " )) &&
71
+ methodNode.visibleAnnotations?.isNotEmpty() == true
72
+ }
73
+ .associate { methodNode ->
74
+ val fieldName = methodNode.name
75
+ .removePrefix(" get" )
76
+ .removeSuffix(" \$ annotations" )
77
+ .decapitalize(Locale .ROOT )
78
+
79
+ val methodAnnotations = methodNode.visibleAnnotations
80
+ ?.filter { it.desc != " Lkotlin/Metadata;" }
81
+ ?.map { parseAnnotation(it) }
82
+ ? : emptyList()
83
+
84
+ fieldName to methodAnnotations
85
+ }
86
+
87
+ val methodDescriptors = classNode.methods
69
88
.filter { methodNode ->
70
89
methodNode.visibleAnnotations?.any { it.desc != " Lkotlin/Metadata;" } == true
71
90
}
91
+ .filterNot { it.name == " <init>" }
92
+ .filterNot { it.name.matches(Regex (" ^get[A-Z].*\\ \$ annotations\$ " )) }
72
93
.map { methodNode ->
73
94
val methodAnnotations = methodNode.visibleAnnotations
74
95
?.filter { it.desc != " Lkotlin/Metadata;" }
75
96
?.map { parseAnnotation(it) }
76
97
? : emptyList()
77
98
val parameters = Type .getArgumentTypes(methodNode.desc).map { it.className }
78
- // println("Method: ${methodNode.name}, Annotations: $methodAnnotations, Parameters: $parameters")
79
- // methodAnnotations.forEach { annotation ->
80
- // println("Annotation: ${annotation.name}")
81
- // annotation.parameters.forEach { (key, value) ->
82
- // println(" $key: $value")
83
- // }
84
- // }
85
99
MethodAnnotationsDescriptor (
86
100
methodNode.name,
87
101
getVisibility(methodNode.access),
88
102
methodAnnotations,
89
- parameters)
103
+ parameters
104
+ )
90
105
}
91
106
92
107
val fieldDescriptors = classNode.fields.map { fieldNode ->
93
- val fieldAnnotations = fieldNode.visibleAnnotations
94
- ?.filter { it.desc != " Lkotlin/Metadata;" }
95
- ?.map { parseAnnotation(it) }
96
- ? : emptyList()
97
- FieldAnnotationsDescriptor (fieldNode.name, getFieldVisibility(classNode, fieldNode), fieldAnnotations)
108
+ val fieldAnnotations = methodAnnotationsMap.getOrDefault(fieldNode.name, emptyList())
109
+
110
+ FieldAnnotationsDescriptor (
111
+ fieldNode.name,
112
+ getFieldVisibility(classNode, fieldNode),
113
+ fieldAnnotations
114
+ )
98
115
}
99
116
100
117
val packageName = classNode.name.substringBeforeLast(' /' , " " ).replace(' /' , ' .' )
@@ -112,7 +129,10 @@ class AnnotationProcessor {
112
129
classAnnotationsDescriptors.add(classDescriptor)
113
130
println (" Class: ${classDescriptor.name} , Annotations: ${classDescriptor.annotations} " )
114
131
classDescriptor.methods.forEach { method ->
115
- println (" Method: ${method.name} , Annotations: ${method.annotations} ,Annotation Parameters: ${method.parameters} " )
132
+ println (" Method: ${method.name} , Annotations: ${method.annotations} ,Method Parameters: ${method.parameters} " )
133
+ }
134
+ classDescriptor.fields.forEach { field ->
135
+ println (" Field: ${field.name} , Visibility: ${field.visibility} , Annotations: ${field.annotations} " )
116
136
}
117
137
}
118
138
0 commit comments