@@ -151,14 +151,12 @@ sealed class FastKFunction<T> {
151
151
// KParameter.Kind.EXTENSION_RECEIVERの要求が有れば確定で拡張関数
152
152
parameters[0 ].kind == KParameter .Kind .EXTENSION_RECEIVER -> {
153
153
// 対象が拡張関数ならinstanceはreceiver、指定が無ければエラー
154
- instance ? : throw IllegalArgumentException (
155
- " Function requires EXTENSION_RECEIVER instance, but is not present. "
156
- )
154
+ instance.instanceOrThrow( KParameter . Kind . EXTENSION_RECEIVER ). let {
155
+ val generator = BucketGenerator (parameters, it)
156
+ val valueParameters = parameters.subList( 1 , parameters.size )
157
157
158
- val generator = BucketGenerator (parameters, instance)
159
- val valueParameters = parameters.subList(1 , parameters.size)
160
-
161
- TopLevelExtensionFunction (function, method, instance, generator, valueParameters)
158
+ TopLevelExtensionFunction (function, method, it, generator, valueParameters)
159
+ }
162
160
}
163
161
// javaMethodのパラメータサイズとKFunctionのパラメータサイズが違う場合も拡張関数
164
162
// インスタンスが設定されていれば高速呼び出し、そうじゃなければ通常の関数呼び出し
@@ -182,20 +180,22 @@ sealed class FastKFunction<T> {
182
180
val instance = inputtedInstance ? : method.declaringObject
183
181
184
182
return if (parameters[0 ].kind == KParameter .Kind .INSTANCE ) {
185
- instance ? : throw IllegalArgumentException (" Function requires INSTANCE parameter, but is not present." )
186
- val instanceClazz = instance::class
187
-
188
- (parameters[0 ].type.classifier as KClass <* >).also {
189
- if (! it.isSuperclassOf(instanceClazz))
190
- throw IllegalArgumentException (
191
- " INSTANCE parameter required ${it.simpleName} , but ${instanceClazz.simpleName} is present."
192
- )
193
- }
183
+ instance.instanceOrThrow(KParameter .Kind .INSTANCE ).let { nonNullInstance ->
184
+ val instanceClazz = nonNullInstance::class
194
185
195
- val generator = BucketGenerator (parameters, instance)
196
- val valueParameters = parameters.subList(1 , parameters.size)
186
+ (parameters[0 ].type.classifier as KClass <* >).also {
187
+ if (! it.isSuperclassOf(instanceClazz))
188
+ throw IllegalArgumentException (
189
+ " INSTANCE parameter required ${it.simpleName} , " +
190
+ " but ${instanceClazz.simpleName} is present."
191
+ )
192
+ }
193
+
194
+ val generator = BucketGenerator (parameters, instance)
195
+ val valueParameters = parameters.subList(1 , parameters.size)
197
196
198
- InstanceFunction (function, method, instance, generator, valueParameters)
197
+ InstanceFunction (function, method, nonNullInstance, generator, valueParameters)
198
+ }
199
199
} else {
200
200
instance
201
201
?.let {
0 commit comments