remove class now return the class

This commit is contained in:
Jean-Marie Mineau 2025-03-26 16:24:40 +01:00
parent 5379c29eb8
commit 6e218f85f9
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2

View file

@ -3284,18 +3284,27 @@ impl Apk {
} }
#[cfg_attr(feature = "python", pyo3(signature = (class, dex_file=None)))] #[cfg_attr(feature = "python", pyo3(signature = (class, dex_file=None)))]
pub fn remove_class(&mut self, class: &IdType, dex_file: Option<&str>) -> Result<()> { pub fn remove_class(
&mut self,
class: &IdType,
dex_file: Option<&str>,
) -> Result<Option<Class>> {
if let Some(dex_file) = dex_file { if let Some(dex_file) = dex_file {
self.dex_files Ok(self
.dex_files
.get_mut(dex_file) .get_mut(dex_file)
.with_context(|| format!("file {} not found in apk", dex_file))? .with_context(|| format!("file {} not found in apk", dex_file))?
.classes .classes
.remove(class); .remove(class))
} else { } else {
for DexFile { classes, .. } in self.dex_files.values_mut() { // TODO valid_file_only ?
classes.remove(class); Ok(self.get_file_of_class(class, false).and_then(|file| {
self.dex_files
.get_mut(&file)
.expect("`get_file_of_class()` return a string not in `dex_files`")
.classes
.remove(class)
}))
} }
} }
Ok(())
}
} }