Add Ktnip Collector
Workflow
1. Create Annotation (if new)
- •Define annotation in telegram-bot module (annotations package)
- •Ensure it can be discovered via
findAnnotationRecursively(meta-annotations supported)
2. Add Annotation Parser (if new annotation)
- •In AnnotationParser.kt: add
parseMyAnnotation(arguments)returning parsed data - •Use
parseValueList,parseScopespatterns from existing parsers
3. Create Collector Class
- •Place in ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/collectors/
- •Extend BaseCollector (for activity-based handlers) or implement Collector directly
- •Override
collect(resolver: Resolver, ctx: CollectorsContext)
4. Collector Implementation
- •Discovery:
resolver.getAnnotatedFnSymbols(ctx.pkg, MyAnnotation::class) - •Parse:
function.annotations.findAnnotationRecursively(MyAnnotation::class)?.arguments - •Metadata:
extractActivityMetadata(function)(from BaseCollector) - •Generate:
generateAndRegisterActivity(function, metadata, ctx, parameters, updateType) - •Register:
ctx.loadFun.addStatement("registerX(%S, %L.id)", id, activityId)
5. Register in ActivityProcessor
- •Add to
collectorslist in ActivityProcessor.ktprocessPackage:- •Order matters: BotCtxCollector, CommandCollector, InputCollector, CommonCollector, UpdateHandlerCollector, UnprocessedHandlerCollector, WizardCollector
6. ResolverExtensions (if needed)
- •
getAnnotatedFnSymbols(pkg, MyAnnotation::class)works for any annotation (generic) - •Custom discovery logic only if collecting non-function symbols
Reference
- •InputCollector.kt - simple collector
- •CommandCollector.kt - multiple annotations, parameters, updateType