Skip to content

Commit f2bc4a0

Browse files
committed
Support class loader override
1 parent c815c27 commit f2bc4a0

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

java_runtime/src/classes/java/lang/class_loader.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,32 @@ impl ClassLoader {
120120
.new_class("java/net/URLClassLoader", "([Ljava/net/URL;Ljava/lang/ClassLoader;)V", (url_array, None))
121121
.await?;
122122

123+
let class_loader_type: ClassInstanceRef<String> = jvm
124+
.invoke_static(
125+
"java/lang/System",
126+
"getProperty",
127+
"(Ljava/lang/String;)Ljava/lang/String;",
128+
(JavaLangString::from_rust_string(jvm, "java.system.class.loader").await?,),
129+
)
130+
.await?;
131+
132+
let system_class_loader = if !class_loader_type.is_null() {
133+
let class_loader_type_str = JavaLangString::to_rust_string(jvm, &class_loader_type).await?;
134+
jvm.new_class(&class_loader_type_str, "(Ljava/lang/ClassLoader;)V", (url_class_loader,))
135+
.await?
136+
} else {
137+
url_class_loader
138+
};
139+
123140
jvm.put_static_field(
124141
"java/lang/ClassLoader",
125142
"systemClassLoader",
126143
"Ljava/lang/ClassLoader;",
127-
url_class_loader.clone(),
144+
system_class_loader.clone(),
128145
)
129146
.await?;
130147

131-
return Ok(url_class_loader.into());
148+
return Ok(system_class_loader.into());
132149
}
133150

134151
Ok(system_class_loader)

0 commit comments

Comments
 (0)