MCPcopy Create free account
hub / github.com/bluejekyll/wasmtime-java / fmt

Method fmt

wasmtime-jni/src/wasm_exception.rs:61–123  ·  view source on GitHub ↗
(&self, f: &mut fmt::Formatter)

Source from the content-addressed store, hash-verified

59
60impl<'l, 'j: 'l> fmt::Display for ReportJThrowable<'l, 'j> {
61 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
62 // just in case...
63 if self.throwable.is_null() {
64 write!(f, "null throwable thrown")?;
65 return Ok(());
66 }
67
68 let cause = self
69 .env
70 .call_method(self.throwable, "getCause", "()Ljava/lang/Throwable;", &[])
71 .map_err(|_| fmt::Error)?;
72
73 let cause = cause.l().map_err(|_| fmt::Error)?;
74 if !cause.is_null() {
75 let reporter = ReportJThrowable::from(self.env, JThrowable::from(cause));
76 write!(f, "cause: {}", reporter)?;
77 }
78
79 let clazz = wasm_value::get_class_name_obj(self.env, self.throwable.into())
80 .map_err(|_| fmt::Error)?;
81
82 let message =
83 call_string_method(self.env, &self.throwable, "getMessage").map_err(|_| fmt::Error)?;
84
85 if let Some(message) = message {
86 writeln!(f, "{}: {}", clazz, Cow::from(&message))?;
87 } else {
88 writeln!(f, "{}", clazz)?;
89 };
90
91 let trace = self
92 .env
93 .call_method(
94 self.throwable,
95 "getStackTrace",
96 "()[Ljava/lang/StackTraceElement;",
97 &[],
98 )
99 .map_err(|_| fmt::Error)?
100 .l()
101 .map_err(|_| fmt::Error)?;
102
103 if !trace.is_null() {
104 let trace = *trace as jarray;
105 let len = self.env.get_array_length(trace).map_err(|_| fmt::Error)?;
106
107 for i in 0..len as usize {
108 let stack_element = self
109 .env
110 .get_object_array_element(trace, i as i32)
111 .map_err(|_| fmt::Error)?;
112
113 let stack_str = call_string_method(self.env, &stack_element, "toString")
114 .map_err(|_| fmt::Error)?;
115
116 if let Some(stack_str) = stack_str {
117 writeln!(f, "\t{}", Cow::from(&stack_str))?;
118 }

Callers

nothing calls this directly

Calls 3

get_class_name_objFunction · 0.85
call_string_methodFunction · 0.85
is_nullMethod · 0.80

Tested by

no test coverage detected