Skip to content

Commit aea931e

Browse files
committed
Move KClass.createInstance to mirai-core-utils and optimize TestPointPluginImpl.<init>
1 parent d159e1f commit aea931e

File tree

5 files changed

+28
-11
lines changed

5 files changed

+28
-11
lines changed

mirai-console/backend/integration-test/src/AbstractTestPointAsPlugin.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ package net.mamoe.console.integrationtest
1212
import net.mamoe.mirai.console.extension.PluginComponentStorage
1313
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
1414
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
15+
import net.mamoe.mirai.utils.createInstanceOrNull
1516

1617
/**
1718
* IntegrationTest 测试单元 (Plugin mode)
@@ -29,7 +30,6 @@ public abstract class AbstractTestPointAsPlugin : AbstractTestPoint() {
2930
protected open fun KotlinPlugin.onDisable0() {}
3031

3132

32-
3333
@Suppress("unused")
3434
@PublishedApi
3535
internal abstract class TestPointPluginImpl(
@@ -43,7 +43,9 @@ public abstract class AbstractTestPointAsPlugin : AbstractTestPoint() {
4343
@PublishedApi
4444
internal constructor(
4545
impl: Class<out AbstractTestPointAsPlugin>
46-
) : this(impl.kotlin.objectInstance ?: impl.newInstance())
46+
) : this(
47+
impl.kotlin.createInstanceOrNull() ?: impl.getConstructor().newInstance()
48+
)
4749

4850
override fun onDisable() {
4951
try {

mirai-console/backend/mirai-console/src/internal/data/reflectionUtils.kt

+1-8
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ package net.mamoe.mirai.console.internal.data
1313

1414
import net.mamoe.mirai.console.data.PluginData
1515
import net.mamoe.mirai.console.data.ValueName
16+
import net.mamoe.mirai.utils.createInstanceOrNull
1617
import kotlin.reflect.*
1718
import kotlin.reflect.full.findAnnotation
1819
import kotlin.reflect.full.isSubclassOf
@@ -63,14 +64,6 @@ internal fun KType.classifierAsKClassOrNull() = when (val t = classifier) {
6364
else -> null
6465
} as KClass<Any>?
6566

66-
@JvmSynthetic
67-
internal fun <T : Any> KClass<T>.createInstanceOrNull(): T? {
68-
val noArgsConstructor = constructors.singleOrNull { it.parameters.all(KParameter::isOptional) }
69-
?: return null
70-
71-
return noArgsConstructor.callBy(emptyMap())
72-
}
73-
7467
@JvmSynthetic
7568
internal fun KClass<*>.findValueName(): String =
7669
findAnnotation<ValueName>()?.value

mirai-console/backend/mirai-console/src/internal/data/valueFromKTypeImpl.kt

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import net.mamoe.mirai.console.data.PluginData
1616
import net.mamoe.mirai.console.data.SerializableValue.Companion.serializableValueWith
1717
import net.mamoe.mirai.console.data.SerializerAwareValue
1818
import net.mamoe.mirai.console.data.valueFromKType
19+
import net.mamoe.mirai.utils.createInstanceOrNull
1920
import java.util.concurrent.ConcurrentHashMap
2021
import java.util.concurrent.ConcurrentMap
2122
import kotlin.contracts.contract

mirai-console/backend/mirai-console/src/internal/util/PluginServiceHelper.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
package net.mamoe.mirai.console.internal.util
1313

1414
import net.mamoe.mirai.console.internal.data.cast
15-
import net.mamoe.mirai.console.internal.data.createInstanceOrNull
1615
import net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl
16+
import net.mamoe.mirai.utils.createInstanceOrNull
1717
import java.lang.reflect.Modifier
1818
import java.util.*
1919
import kotlin.reflect.KClass
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright 2019-2021 Mamoe Technologies and contributors.
3+
*
4+
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
5+
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
6+
*
7+
* https://github.com/mamoe/mirai/blob/dev/LICENSE
8+
*/
9+
10+
package net.mamoe.mirai.utils
11+
12+
import kotlin.reflect.KClass
13+
import kotlin.reflect.KParameter
14+
15+
public fun <T : Any> KClass<T>.createInstanceOrNull(): T? {
16+
objectInstance?.let { return it }
17+
val noArgsConstructor = constructors.singleOrNull { it.parameters.all(KParameter::isOptional) }
18+
?: return null
19+
20+
return noArgsConstructor.callBy(emptyMap())
21+
}

0 commit comments

Comments
 (0)