pub(crate) fn extract_class_name(full_path: &str) -> Option<&str> {
let after_last_period = full_path.split('.').next_back()?;
after_last_period.split('$').next()
}
pub(crate) fn synthesize_source_file(
class_name: &str,
reference_file: Option<&str>,
) -> Option<String> {
let base = extract_class_name(class_name)?;
if base.ends_with("Kt") && base.len() > 2 {
let kotlin_base = &base[..base.len() - 2];
return Some(format!("{}.kt", kotlin_base));
}
if let Some(ext) = reference_file.and_then(|f| f.rfind('.').map(|pos| &f[pos..])) {
return Some(format!("{}{}", base, ext));
}
Some(format!("{}.java", base))
}
pub fn class_name_to_descriptor(class: &str) -> String {
let mut descriptor = String::with_capacity(class.len() + 2);
descriptor.push('L');
descriptor.push_str(&class.replace('.', "/"));
descriptor.push(';');
descriptor
}