@@ -23,64 +23,65 @@ import com.squareup.kotlinpoet.TypeSpec
23
23
import com.squareup.kotlinpoet.asTypeName
24
24
import com.squareup.kotlinpoet.buildCodeBlock
25
25
import com.squareup.kotlinpoet.withIndent
26
- import protokt.v1.KtDsl
26
+ import protokt.v1.KtBuilderDsl
27
27
import protokt.v1.UnknownFieldSet
28
28
import protokt.v1.codegen.generate.Deprecation.handleDeprecation
29
+ import protokt.v1.codegen.util.BUILDER
29
30
import protokt.v1.codegen.util.FieldType
30
31
import protokt.v1.codegen.util.Message
31
32
32
- internal fun TypeSpec.Builder.handleDsl (msg : Message , properties : List <PropertyInfo >) =
33
- apply { DslGenerator (msg, properties).addDsl (this ) }
33
+ internal fun TypeSpec.Builder.handleBuilder (msg : Message , properties : List <PropertyInfo >) =
34
+ apply { BuilderGenerator (msg, properties).addBuilder (this ) }
34
35
35
- private class DslGenerator (
36
+ private class BuilderGenerator (
36
37
private val msg : Message ,
37
38
private val properties : List <PropertyInfo >
38
39
) {
39
- fun addDsl (builder : TypeSpec .Builder ) {
40
+ fun addBuilder (builder : TypeSpec .Builder ) {
40
41
builder.addFunction(
41
42
FunSpec .builder(" copy" )
42
43
.returns(msg.className)
43
44
.addParameter(
44
- " dsl " ,
45
+ " builder " ,
45
46
LambdaTypeName .get(
46
- msg.dslClassName ,
47
+ msg.builderClassName ,
47
48
emptyList(),
48
49
Unit ::class .asTypeName()
49
50
)
50
51
)
51
52
.addCode(
52
53
buildCodeBlock {
53
- beginControlFlow(" return %T().apply" , msg.dslClassName )
54
- dslLines ().forEach { add(" %L\n " , it) }
54
+ beginControlFlow(" return %T().apply" , msg.builderClassName )
55
+ builderLines ().forEach { add(" %L\n " , it) }
55
56
addStatement(" unknownFields = this@%L.unknownFields" , msg.className.simpleName)
56
- addStatement(" dsl ()" )
57
+ addStatement(" builder ()" )
57
58
endControlFlowWithoutNewline()
58
59
add(" .build()" )
59
60
}
60
61
)
61
62
.build()
62
63
)
63
64
builder.addType(
64
- TypeSpec .classBuilder(msg.dslClassName )
65
- .addAnnotation(KtDsl ::class )
65
+ TypeSpec .classBuilder(msg.builderClassName )
66
+ .addAnnotation(KtBuilderDsl ::class )
66
67
.addProperties(
67
68
properties.map {
68
- PropertySpec .builder(it.name, it.dslPropertyType )
69
+ PropertySpec .builder(it.name, it.builderPropertyType )
69
70
.mutable(true )
70
71
.handleDeprecation(it.deprecation)
71
72
.apply {
72
73
if (it.map) {
73
74
setter(
74
75
FunSpec .setterBuilder()
75
76
.addParameter(" newValue" , Map ::class )
76
- .addCode(" field = %M(newValue)" , runtimeFunction( " copyMap" ) )
77
+ .addCode(" field = %M(newValue)" , copyMap)
77
78
.build()
78
79
)
79
80
} else if (it.repeated) {
80
81
setter(
81
82
FunSpec .setterBuilder()
82
83
.addParameter(" newValue" , List ::class )
83
- .addCode(" field = %M(newValue)" , runtimeFunction( " copyList" ) )
84
+ .addCode(" field = %M(newValue)" , copyList)
84
85
.build()
85
86
)
86
87
}
@@ -127,7 +128,7 @@ private class DslGenerator(
127
128
)
128
129
}
129
130
130
- private fun dslLines () =
131
+ private fun builderLines () =
131
132
properties.map {
132
133
CodeBlock .of(
133
134
" %N = this@%L.%N" ,
@@ -137,3 +138,6 @@ private class DslGenerator(
137
138
)
138
139
}
139
140
}
141
+
142
+ val Message .builderClassName
143
+ get() = className.nestedClass(BUILDER )
0 commit comments