Add Ktnip Parameter Strategy
Workflow
1. Add ParameterResolutionStrategy
- In ParameterResolutionStrategy.kt
- Add new
data classextendingParameterResolutionStrategy - Include
typeName,isNullable; add strategy-specific fields (e.g.parameterName,updateTypeSimpleName)
data class MyParam(
override val typeName: TypeName,
override val isNullable: Boolean,
val myField: String,
) : ParameterResolutionStrategy()
2. Add TypeConstant (if new type)
- In TypeConstants.kt
- Add
val myTypeClass: TypeName = MyType::class.asTypeName()
3. Update ParameterResolver
- In ParameterResolver.kt
- Add branch in
resolve()when block:- Match
typeName(use TypeConstants orin TypeMapper.getAllTypedUpdateTypes()for typed updates) - Return new strategy instance
- Handle
@ParamMappingfor parameter name if from parameters map
- Match
4. Update InvocationCodeGenerator
- In InvocationCodeGenerator.kt
- Add branch in
generateParameterResolution()when block - Generate CodeBlock:
CodeBlock.of("val param%L = ...\n", parameterIndex, ...) - Add imports via
fileBuilder.addImport(...)if needed - Use
nullabilityMarkfor!!when non-null
5. Update generateInvocationCode (if needed)
- If strategy affects
isBotNeeded,isUpdateNeeded,isParametersNeeded,isUserNeeded: add to thestrategies.any { ... }checks
Reference
- ParameterResolutionStrategy.kt
- ParameterResolver.kt
- InvocationCodeGenerator.kt
- TypeMapper.kt - for TypedUpdate: add to updateTypeMap
Source: vendelieu/telegram-bot — distributed by TomeVault.