@@ -33,6 +33,8 @@ object OTelTelemetryGenerator {
3333 private val TOOLKIT_DEFAULT_SPAN_BUILDER = ClassName (TOOLKIT_OTEL_PACKAGE , " DefaultSpanBuilder" )
3434 private val TOOLKIT_OTEL_SERVICE = ClassName (TOOLKIT_OTEL_PACKAGE , " OTelService" )
3535
36+ private val SPAN_TYPE_TYPEVAR = TypeVariableName (" SpanType" )
37+
3638 private val GENERATED_BASE_SPAN = ClassName (PACKAGE_NAME_IMPL , " BaseSpan" )
3739
3840 private val indent = " " .repeat(4 )
@@ -49,7 +51,7 @@ object OTelTelemetryGenerator {
4951// "traceId",
5052// "metricId",
5153// "parentId",
52- // handled as special generator cases
54+ // handled as special cases in base
5355// "passive",
5456// "value",
5557// "unit",
@@ -101,42 +103,26 @@ object OTelTelemetryGenerator {
101103 .addParameter(" delegate" , OTEL_SPAN )
102104 .build(),
103105 )
104- .addTypeVariable(TypeVariableName ( " SpanType " , listOf (GENERATED_BASE_SPAN .parameterizedBy(TypeVariableName ( " SpanType " ) ))))
106+ .addTypeVariable(SPAN_TYPE_TYPEVAR .copy(bounds = listOf (GENERATED_BASE_SPAN .parameterizedBy(SPAN_TYPE_TYPEVAR ))))
105107 .superclass(
106108 TOOLKIT_ABSTRACT_BASE_SPAN
107- .parameterizedBy(TypeVariableName ( " SpanType " ) ),
109+ .parameterizedBy(SPAN_TYPE_TYPEVAR ),
108110 )
109111 .addSuperclassConstructorParameter(" context, delegate as %T" , OTEL_RW_SPAN )
110112 .apply {
111113 commonMetadataTypes.forEach { t ->
112114 val type = telemetryDefinitions.types.firstOrNull { it.name == t } ? : return @forEach
113115
114- addFunctions(MetadataSchema (type, false ).overloadedFunSpec(TypeVariableName ( " SpanType " ) ))
116+ addFunctions(MetadataSchema (type, false ).overloadedFunSpec(SPAN_TYPE_TYPEVAR ))
115117 }
116118
117- // special case attributes
118- listOf (
119- " passive" to BOOLEAN ,
120- " unit" to METRIC_UNIT ,
121- ).forEach { pair ->
122- addFunction(
123- FunSpec .builder(pair.first)
124- .addParameter(pair.first, pair.second)
125- .addStatement(" this._%1L = %1N" , pair.first)
126- .build(),
127- )
128- }
129- // special-special case
130- addFunction(
131- FunSpec .builder(" value" )
132- .addParameter(" value" , NUMBER )
133- .addStatement(" this._%1L = %1N.toDouble()" , " value" )
134- .build(),
135- )
119+ // special case
136120 addFunction(
137121 FunSpec .builder(" success" )
138122 .addParameter(" success" , BOOLEAN )
123+ .returns(SPAN_TYPE_TYPEVAR )
139124 .addStatement(" result(if(success) MetricResult.Succeeded else MetricResult.Failed)" )
125+ .addStatement(" return this as %T" , SPAN_TYPE_TYPEVAR )
140126 .build(),
141127 )
142128 }
0 commit comments