diff --git a/build.gradle.kts b/build.gradle.kts index fcbd923..bf4d22d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("maven") id("java") - id("org.jetbrains.kotlin.jvm") version "1.3.61" + id("org.jetbrains.kotlin.jvm") version "1.3.70" id("org.jlleitschuh.gradle.ktlint") version "9.2.1" } @@ -18,7 +18,7 @@ buildscript { } dependencies { - classpath(kotlin("gradle-plugin", version = "1.3.61")) + classpath(kotlin("gradle-plugin", version = "1.3.70")) } } diff --git a/src/main/kotlin/com/mapk/core/ArgumentBucket.kt b/src/main/kotlin/com/mapk/core/ArgumentBucket.kt index 3b09578..73d0ec8 100644 --- a/src/main/kotlin/com/mapk/core/ArgumentBucket.kt +++ b/src/main/kotlin/com/mapk/core/ArgumentBucket.kt @@ -1,7 +1,7 @@ package com.mapk.core -class ArgumentBucket( - val bucket: Array, +class ArgumentBucket internal constructor( + internal val bucket: Array, private var initializeStatus: Int, private val initializeMask: List, // clone時の再計算を避けるため1回で済むようにデフォルト値化 diff --git a/src/main/kotlin/com/mapk/core/KFunctionForCall.kt b/src/main/kotlin/com/mapk/core/KFunctionForCall.kt index 566f79e..cfc8281 100644 --- a/src/main/kotlin/com/mapk/core/KFunctionForCall.kt +++ b/src/main/kotlin/com/mapk/core/KFunctionForCall.kt @@ -8,9 +8,10 @@ class KFunctionForCall(private val function: KFunction, instance: Any? = n val parameters: List = function.parameters private val originalArgumentBucket: ArgumentBucket - fun getArgumentBucket(): ArgumentBucket = originalArgumentBucket.clone() - init { + if (parameters.isEmpty() || (instance != null && parameters.size == 1)) + throw IllegalArgumentException("This function is not require arguments.") + // この関数には確実にアクセスするためアクセシビリティ書き換え function.isAccessible = true originalArgumentBucket = if (instance != null) { @@ -32,6 +33,8 @@ class KFunctionForCall(private val function: KFunction, instance: Any? = n } } + fun getArgumentBucket(): ArgumentBucket = originalArgumentBucket.clone() + fun call(argumentBucket: ArgumentBucket): T { return function.call(*argumentBucket.bucket) } diff --git a/src/test/kotlin/com/mapk/core/KFunctionForCallTest.kt b/src/test/kotlin/com/mapk/core/KFunctionForCallTest.kt new file mode 100644 index 0000000..3247531 --- /dev/null +++ b/src/test/kotlin/com/mapk/core/KFunctionForCallTest.kt @@ -0,0 +1,36 @@ +package com.mapk.core + +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertDoesNotThrow +import org.junit.jupiter.api.assertThrows + +class KFunctionForCallTest { + @Nested + @DisplayName("初期化関連テスト") + inner class InitializeTest { + // 空引数の関数 + private fun dummy1() {} + @Suppress("UNUSED_PARAMETER") + private fun dummy2(input: Int) {} + + @Test + @DisplayName("不正な関数を入力した場合") + fun withNoInstance() { + assertThrows { KFunctionForCall(this::dummy1) } + } + + @Test + @DisplayName("不正な関数を入力した場合(インスタンス付き = ファクトリーメソッド想定)") + fun withInstance() { + assertThrows { KFunctionForCall(this::dummy2, object {}) } + } + + @Test + @DisplayName("正常入力") + fun isValid() { + assertDoesNotThrow { KFunctionForCall(this::dummy2) } + } + } +}