min
09/01/2026, 7:15 AMbuildTypeParameter {
val paramBuilder = this
paramBuilder.source = old.fir.source
paramBuilder.moduleData = old.fir.moduleData
paramBuilder.origin = FirDeclarationOrigin.Plugin(KEY)
paramBuilder.name = old.name
paramBuilder.symbol = key
paramBuilder.containingDeclarationSymbol = function
paramBuilder.variance = old.fir.variance
paramBuilder.isReified = old.fir.isReified
paramBuilder.bounds.addAll(old.fir.bounds)
}
I’ve never developed a plugin before, so I’m unfamiliar with the API. Data classes have the copy method to let me copy an instance with just the fields I want overridden, so I feel like Kotlin would also have a shorter way for this too but cannot find it myself.dmitriy.novozhilov
09/01/2026, 7:19 AMbuildElementNameCopy(originalElement) {...}.
For type parameters it would be
buildTypeParameterCopy(old) {
origin = ...
symbol = key
}
Link to source.min
09/01/2026, 7:40 AM@OptIn(SymbolInternals::class) buildTypeParameter {
val paramBuilder = this
paramBuilder.source = old.fir.source
paramBuilder.moduleData = old.fir.moduleData
paramBuilder.origin = FirDeclarationOrigin.Plugin(KEY)
paramBuilder.name = old.name
paramBuilder.symbol = key
paramBuilder.containingDeclarationSymbol = function
paramBuilder.variance = old.fir.variance
paramBuilder.isReified = old.fir.isReified
paramBuilder.bounds.addAll(old.fir.bounds)
}
@dmitriy.novozhilov So I should be able to replace this with
@OptIn(SymbolInternals::class) buildTypeParameterCopy(old.fir) {
val paramBuilder = this
paramBuilder.origin = FirDeclarationOrigin.Plugin(KEY)
paramBuilder.symbol = key
paramBuilder.containingDeclarationSymbol = function
}
This, right? Thanks!dmitriy.novozhilov
09/01/2026, 7:41 AMval paramBuilder = this. But generally yes.min
09/01/2026, 7:45 AM