@@ -61,14 +61,14 @@ internal abstract class UnsignedIntFieldFormatDirective<in Target>(
61
61
62
62
override fun formatter (): FormatterStructure <Target > {
63
63
val formatter = UnsignedIntFormatterStructure (
64
- number = field::getNotNull ,
64
+ number = field.accessor::getterNotNull ,
65
65
zeroPadding = minDigits,
66
66
)
67
67
return if (spacePadding != null ) SpacePaddedFormatter (formatter, spacePadding) else formatter
68
68
}
69
69
70
70
override fun parser (): ParserStructure <Target > =
71
- spaceAndZeroPaddedUnsignedInt(minDigits, maxDigits, spacePadding, field::setWithoutReassigning , field.name)
71
+ spaceAndZeroPaddedUnsignedInt(minDigits, maxDigits, spacePadding, field.accessor , field.name)
72
72
}
73
73
74
74
/* *
@@ -77,6 +77,7 @@ internal abstract class UnsignedIntFieldFormatDirective<in Target>(
77
77
internal abstract class NamedUnsignedIntFieldFormatDirective <in Target >(
78
78
final override val field : UnsignedFieldSpec <Target >,
79
79
private val values : List <String >,
80
+ private val name : String ,
80
81
) : FieldFormatDirective<Target> {
81
82
82
83
init {
@@ -85,10 +86,15 @@ internal abstract class NamedUnsignedIntFieldFormatDirective<in Target>(
85
86
}
86
87
}
87
88
88
- private fun getStringValue (target : Target ): String = values[field.getNotNull (target) - field.minValue]
89
+ private fun getStringValue (target : Target ): String = values[field.accessor.getterNotNull (target) - field.minValue]
89
90
90
- private fun setStringValue (target : Target , value : String ) {
91
- field.setWithoutReassigning(target, values.indexOf(value) + field.minValue)
91
+ private inner class AssignableString : AssignableField <Target , String > {
92
+ override fun trySetWithoutReassigning (container : Target , newValue : String ): String? =
93
+ field.accessor.trySetWithoutReassigning(container, values.indexOf(newValue) + field.minValue)?.let {
94
+ values[it - field.minValue]
95
+ }
96
+
97
+ override val name: String get() = this @NamedUnsignedIntFieldFormatDirective.name
92
98
}
93
99
94
100
override fun formatter (): FormatterStructure <Target > =
@@ -97,7 +103,7 @@ internal abstract class NamedUnsignedIntFieldFormatDirective<in Target>(
97
103
override fun parser (): ParserStructure <Target > =
98
104
ParserStructure (
99
105
listOf (
100
- StringSetParserOperation (values, ::setStringValue , " One of $values for ${field. name} " )
106
+ StringSetParserOperation (values, AssignableString () , " One of $values for $name " )
101
107
), emptyList()
102
108
)
103
109
}
@@ -108,20 +114,21 @@ internal abstract class NamedUnsignedIntFieldFormatDirective<in Target>(
108
114
internal abstract class NamedEnumIntFieldFormatDirective <in Target , Type >(
109
115
final override val field : FieldSpec <Target , Type >,
110
116
private val mapping : Map <Type , String >,
117
+ private val name : String ,
111
118
) : FieldFormatDirective<Target> {
112
119
113
120
private val reverseMapping = mapping.entries.associate { it.value to it.key }
114
121
115
- private fun getStringValue (target : Target ): String = mapping[field.getNotNull (target)]
122
+ private fun getStringValue (target : Target ): String = mapping[field.accessor.getterNotNull (target)]
116
123
? : throw IllegalStateException (
117
- " The value ${field.getNotNull (target)} is does not have a corresponding string representation"
124
+ " The value ${field.accessor.getterNotNull (target)} is does not have a corresponding string representation"
118
125
)
119
126
120
- private fun setStringValue ( target : Target , value : String ) {
121
- field.setWithoutReassigning(
122
- target , reverseMapping[value]
123
- ? : throw IllegalStateException ( " The string value $value does not have a corresponding enum value " )
124
- )
127
+ private inner class AssignableString : AssignableField < Target , String > {
128
+ override fun trySetWithoutReassigning ( container : Target , newValue : String ): String? =
129
+ field.accessor.trySetWithoutReassigning(container , reverseMapping[newValue] !! )?. let { mapping[it] }
130
+
131
+ override val name : String get() = this @NamedEnumIntFieldFormatDirective.name
125
132
}
126
133
127
134
override fun formatter (): FormatterStructure <Target > =
@@ -130,7 +137,7 @@ internal abstract class NamedEnumIntFieldFormatDirective<in Target, Type>(
130
137
override fun parser (): ParserStructure <Target > =
131
138
ParserStructure (
132
139
listOf (
133
- StringSetParserOperation (mapping.values, ::setStringValue , " One of ${mapping.values} for ${field. name} " )
140
+ StringSetParserOperation (mapping.values, AssignableString () , " One of ${mapping.values} for $name " )
134
141
), emptyList()
135
142
)
136
143
}
@@ -145,11 +152,11 @@ internal abstract class StringFieldFormatDirective<in Target>(
145
152
}
146
153
147
154
override fun formatter (): FormatterStructure <Target > =
148
- StringFormatterStructure (field::getNotNull )
155
+ StringFormatterStructure (field.accessor::getterNotNull )
149
156
150
157
override fun parser (): ParserStructure <Target > =
151
158
ParserStructure (
152
- listOf (StringSetParserOperation (acceptedStrings, field::setWithoutReassigning , field.name)),
159
+ listOf (StringSetParserOperation (acceptedStrings, field.accessor , field.name)),
153
160
emptyList()
154
161
)
155
162
}
@@ -169,7 +176,7 @@ internal abstract class SignedIntFieldFormatDirective<in Target>(
169
176
170
177
override fun formatter (): FormatterStructure <Target > {
171
178
val formatter = SignedIntFormatterStructure (
172
- number = field::getNotNull ,
179
+ number = field.accessor::getterNotNull ,
173
180
zeroPadding = minDigits ? : 0 ,
174
181
outputPlusOnExceededWidth = outputPlusOnExceededWidth,
175
182
)
@@ -181,7 +188,7 @@ internal abstract class SignedIntFieldFormatDirective<in Target>(
181
188
minDigits = minDigits,
182
189
maxDigits = maxDigits,
183
190
spacePadding = spacePadding,
184
- field::setWithoutReassigning ,
191
+ field.accessor ,
185
192
field.name,
186
193
plusOnExceedsWidth = outputPlusOnExceededWidth,
187
194
)
@@ -194,12 +201,12 @@ internal abstract class DecimalFractionFieldFormatDirective<in Target>(
194
201
private val zerosToAdd : List <Int >,
195
202
) : FieldFormatDirective<Target> {
196
203
override fun formatter (): FormatterStructure <Target > =
197
- DecimalFractionFormatterStructure (field::getNotNull , minDigits, maxDigits, zerosToAdd)
204
+ DecimalFractionFormatterStructure (field.accessor::getterNotNull , minDigits, maxDigits, zerosToAdd)
198
205
199
206
override fun parser (): ParserStructure <Target > = ParserStructure (
200
207
listOf (
201
208
NumberSpanParserOperation (
202
- listOf (FractionPartConsumer (minDigits, maxDigits, field::setWithoutReassigning , field.name))
209
+ listOf (FractionPartConsumer (minDigits, maxDigits, field.accessor , field.name))
203
210
)
204
211
),
205
212
emptyList()
@@ -214,16 +221,11 @@ internal abstract class ReducedIntFieldDirective<in Target>(
214
221
215
222
override fun formatter (): FormatterStructure <Target > =
216
223
ReducedIntFormatterStructure (
217
- number = field::getNotNull ,
224
+ number = field.accessor::getterNotNull ,
218
225
digits = digits,
219
226
base = base,
220
227
)
221
228
222
229
override fun parser (): ParserStructure <Target > =
223
- ReducedIntParser (
224
- digits = digits,
225
- base = base,
226
- field::setWithoutReassigning,
227
- field.name,
228
- )
230
+ ReducedIntParser (digits = digits, base = base, field.accessor, field.name)
229
231
}
0 commit comments