@@ -41,6 +41,7 @@ Class resolving:
41
41
*/
42
42
43
43
internal class JvmPluginsLoadingCtx (
44
+ val consoleClassLoader : ClassLoader , // plugin system -> mirai-console classloader WRAPPER
44
45
val sharedLibrariesLoader : DynLibClassLoader ,
45
46
val pluginClassLoaders : MutableList <JvmPluginClassLoaderN >,
46
47
val downloader : JvmPluginDependencyDownloader ,
@@ -51,17 +52,18 @@ internal class JvmPluginsLoadingCtx(
51
52
}
52
53
}
53
54
54
- internal class DynLibClassLoader : URLClassLoader {
55
- private val clName: String?
56
- internal var dependencies: List <DynLibClassLoader > = emptyList()
55
+ internal open class DynamicClasspathClassLoader : URLClassLoader {
56
+ internal constructor (urls: Array <URL >, parent: ClassLoader ? ) : super (urls, parent)
57
57
58
- private constructor (parent: ClassLoader ? , clName: String? ) : super (arrayOf(), parent) {
59
- this .clName = clName
58
+ @Suppress(" Since15" )
59
+ internal constructor (urls: Array <URL >, parent: ClassLoader ? , vmName: String? ) : super (vmName, urls, parent)
60
+
61
+ internal fun addLib (url : URL ) {
62
+ addURL(url)
60
63
}
61
64
62
- @Suppress(" Since15" )
63
- private constructor (parent: ClassLoader ? , clName: String? , vmName: String? ) : super (vmName, arrayOf(), parent) {
64
- this .clName = clName
65
+ internal fun addLib (file : File ) {
66
+ addURL(file.toURI().toURL())
65
67
}
66
68
67
69
@@ -72,7 +74,47 @@ internal class DynLibClassLoader : URLClassLoader {
72
74
ClassLoader .registerAsParallelCapable()
73
75
java9 = kotlin.runCatching { Class .forName(" java.lang.Module" ) }.isSuccess
74
76
}
77
+ }
78
+ }
79
+
80
+ internal class LegacyCompatibilityLayerClassLoader : DynamicClasspathClassLoader {
81
+ private constructor (parent: ClassLoader ? ) : super (arrayOf(), parent)
82
+ private constructor (parent: ClassLoader ? , vmName: String? ) : super (arrayOf(), parent, vmName)
83
+
84
+ override fun toString (): String {
85
+ return " LegacyCompatibilityLayerClassLoader@" + hashCode()
86
+ }
87
+
88
+ companion object {
89
+ init {
90
+ ClassLoader .registerAsParallelCapable()
91
+ }
92
+
93
+ fun newInstance (parent : ClassLoader ? ): LegacyCompatibilityLayerClassLoader {
94
+ return if (java9) {
95
+ LegacyCompatibilityLayerClassLoader (parent, " legacy-compatibility-layer" )
96
+ } else {
97
+ LegacyCompatibilityLayerClassLoader (parent)
98
+ }
99
+ }
100
+ }
101
+ }
75
102
103
+
104
+ internal class DynLibClassLoader : DynamicClasspathClassLoader {
105
+ private val clName: String?
106
+ internal var dependencies: List <DynLibClassLoader > = emptyList()
107
+
108
+ private constructor (parent: ClassLoader ? , clName: String? ) : super (arrayOf(), parent) {
109
+ this .clName = clName
110
+ }
111
+
112
+ private constructor (parent: ClassLoader ? , clName: String? , vmName: String? ) : super (arrayOf(), parent, vmName) {
113
+ this .clName = clName
114
+ }
115
+
116
+
117
+ companion object {
76
118
fun newInstance (parent : ClassLoader ? , clName : String? , vmName : String? ): DynLibClassLoader {
77
119
return when {
78
120
java9 -> DynLibClassLoader (parent, clName, vmName)
@@ -87,7 +129,7 @@ internal class DynLibClassLoader : URLClassLoader {
87
129
if (name.startsWith(" io.netty" ) || name in AllDependenciesClassesHolder .allclasses) {
88
130
return AllDependenciesClassesHolder .appClassLoader.loadClass(name)
89
131
}
90
- if (name.startsWith(" net.mamoe.mirai." )) { // Avoid plugin classing cheating
132
+ if (name.startsWith(" net.mamoe.mirai." ) || name.startsWith( " kotlin. " ) || name.startsWith( " kotlinx. " ) ) { // Avoid plugin classing cheating
91
133
try {
92
134
return AllDependenciesClassesHolder .appClassLoader.loadClass(name)
93
135
} catch (ignored: ClassNotFoundException ) {
@@ -112,14 +154,6 @@ internal class DynLibClassLoader : URLClassLoader {
112
154
return null
113
155
}
114
156
115
- internal fun addLib (url : URL ) {
116
- addURL(url)
117
- }
118
-
119
- internal fun addLib (file : File ) {
120
- addURL(file.toURI().toURL())
121
- }
122
-
123
157
override fun toString (): String {
124
158
clName?.let { return " DynLibClassLoader{$it }" }
125
159
return " DynLibClassLoader@" + hashCode()
@@ -180,7 +214,6 @@ internal class DynLibClassLoader : URLClassLoader {
180
214
}
181
215
}
182
216
183
- @Suppress(" JoinDeclarationAndAssignment" )
184
217
internal class JvmPluginClassLoaderN : URLClassLoader {
185
218
val openaccess: JvmPluginClasspath = OpenAccess ()
186
219
val file: File
@@ -335,7 +368,7 @@ internal class JvmPluginClassLoaderN : URLClassLoader {
335
368
336
369
fun newLoader (file : File , ctx : JvmPluginsLoadingCtx ): JvmPluginClassLoaderN {
337
370
return when {
338
- DynLibClassLoader .java9 -> JvmPluginClassLoaderN (file, ctx)
371
+ DynamicClasspathClassLoader .java9 -> JvmPluginClassLoaderN (file, ctx)
339
372
else -> JvmPluginClassLoaderN (file, ctx, Unit )
340
373
}
341
374
}
@@ -399,7 +432,7 @@ internal class JvmPluginClassLoaderN : URLClassLoader {
399
432
}
400
433
}
401
434
}
402
- return AllDependenciesClassesHolder .appClassLoader .loadClass(name)
435
+ return ctx.consoleClassLoader .loadClass(name)
403
436
}
404
437
}
405
438
0 commit comments