Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit 90519b2

Browse files
committed
instanceOrThrowで共通化
1 parent f129f62 commit 90519b2

File tree

2 files changed

+33
-37
lines changed

2 files changed

+33
-37
lines changed

src/main/kotlin/com/mapk/fastkfunction/FastKFunction.kt

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,12 @@ sealed class FastKFunction<T> {
151151
// KParameter.Kind.EXTENSION_RECEIVERの要求が有れば確定で拡張関数
152152
parameters[0].kind == KParameter.Kind.EXTENSION_RECEIVER -> {
153153
// 対象が拡張関数なら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)
157157

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+
}
162160
}
163161
// javaMethodのパラメータサイズとKFunctionのパラメータサイズが違う場合も拡張関数
164162
// インスタンスが設定されていれば高速呼び出し、そうじゃなければ通常の関数呼び出し
@@ -182,20 +180,22 @@ sealed class FastKFunction<T> {
182180
val instance = inputtedInstance ?: method.declaringObject
183181

184182
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
194185

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)
197196

198-
InstanceFunction(function, method, instance, generator, valueParameters)
197+
InstanceFunction(function, method, nonNullInstance, generator, valueParameters)
198+
}
199199
} else {
200200
instance
201201
?.let {

src/main/kotlin/com/mapk/fastkfunction/SingleArgFastKFunction.kt

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,9 @@ sealed class SingleArgFastKFunction<T> {
8080
// KParameter.Kind.EXTENSION_RECEIVERの要求が有れば確定で拡張関数
8181
parameters[0].kind == KParameter.Kind.EXTENSION_RECEIVER -> {
8282
// 対象が拡張関数ならinstanceはreceiver、指定が無ければエラー
83-
instance ?: throw IllegalArgumentException(
84-
"Function requires EXTENSION_RECEIVER instance, but is not present."
83+
TopLevelExtensionFunction(
84+
parameters[1], method, instance.instanceOrThrow(KParameter.Kind.EXTENSION_RECEIVER)
8585
)
86-
87-
TopLevelExtensionFunction(parameters[1], method, instance)
8886
}
8987
// javaMethodのパラメータサイズとKFunctionのパラメータサイズが違う場合も拡張関数
9088
// インスタンスが設定されていれば高速呼び出し、そうじゃなければ通常の関数呼び出し
@@ -107,21 +105,19 @@ sealed class SingleArgFastKFunction<T> {
107105

108106
return when {
109107
parameters[0].kind == KParameter.Kind.INSTANCE ->
110-
instance
111-
?.let {
112-
val instanceClazz = it::class
113-
114-
method.declaringClass.kotlin.also { requiredClazz ->
115-
if (!requiredClazz.isSuperclassOf(instanceClazz))
116-
throw IllegalArgumentException(
117-
"INSTANCE parameter required ${requiredClazz.simpleName}, " +
118-
"but ${instanceClazz.simpleName} is present."
119-
)
120-
}
121-
122-
InstanceFunction(parameters[1], method, it)
108+
instance.instanceOrThrow(KParameter.Kind.INSTANCE).let {
109+
val instanceClazz = it::class
110+
111+
method.declaringClass.kotlin.also { requiredClazz ->
112+
if (!requiredClazz.isSuperclassOf(instanceClazz))
113+
throw IllegalArgumentException(
114+
"INSTANCE parameter required ${requiredClazz.simpleName}, " +
115+
"but ${instanceClazz.simpleName} is present."
116+
)
123117
}
124-
?: throw IllegalArgumentException("Function requires INSTANCE parameter, but is not present.")
118+
119+
InstanceFunction(parameters[1], method, it)
120+
}
125121
instance != null -> {
126122
val instanceClazz = instance::class
127123

0 commit comments

Comments
 (0)