mirror of
https://github.com/Noratrieb/coldsquare.git
synced 2026-01-14 16:35:10 +01:00
Actually good handling of the Constant Pool indecies
The code does not compile yet, because `FromCpInfo<'_>` needs to be implemented for some more types.
This commit is contained in:
parent
5ec9260b59
commit
2a85d1fdfd
4 changed files with 188 additions and 153 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use file_parser::{ClassFile, ParseErr};
|
||||
use file_parser::ClassFile;
|
||||
use std::error::Error;
|
||||
use std::io::Write;
|
||||
|
||||
|
|
@ -16,7 +16,11 @@ pub fn display_class<W: Write>(mut w: W, class: &ClassFile) -> Result<(), Box<dy
|
|||
writeln!(
|
||||
w,
|
||||
"class {} extends {}{} {{",
|
||||
&class.this_class.get(cp)?.name_index.get(cp)?,
|
||||
&class.this_class.get(cp).name_index.get(cp),
|
||||
match class.super_class.maybe_get(cp) {
|
||||
None => "<none>",
|
||||
Some(class) => &class.name_index.get(cp),
|
||||
},
|
||||
if class.interfaces.len() == 0 {
|
||||
"".to_string()
|
||||
} else {
|
||||
|
|
@ -27,22 +31,16 @@ pub fn display_class<W: Write>(mut w: W, class: &ClassFile) -> Result<(), Box<dy
|
|||
.interfaces
|
||||
.iter()
|
||||
.map(|i| i.get(cp))
|
||||
.collect::<Result<Vec<_>, ParseErr>>()?
|
||||
.iter()
|
||||
.map(|i| i.name_index.get(cp))
|
||||
.collect::<Result<Vec<_>, ParseErr>>()?
|
||||
.collect::<Vec<_>>()
|
||||
.join(",")
|
||||
)
|
||||
},
|
||||
match class.super_class.get(cp)? {
|
||||
None => "<none>",
|
||||
Some(class) => &class.name_index.get(cp)?,
|
||||
}
|
||||
)?;
|
||||
|
||||
writeln!(w, " Attributes:")?;
|
||||
for attr in &class.attributes {
|
||||
writeln!(w, " {}", &attr.attribute_name_index.get(cp)?)?;
|
||||
writeln!(w, " {}", &attr.attribute_name_index.get(cp))?;
|
||||
}
|
||||
writeln!(w)?;
|
||||
|
||||
|
|
@ -51,8 +49,8 @@ pub fn display_class<W: Write>(mut w: W, class: &ClassFile) -> Result<(), Box<dy
|
|||
writeln!(
|
||||
w,
|
||||
" {} {}",
|
||||
&field.descriptor_index.get(cp)?,
|
||||
&field.name_index.get(cp)?
|
||||
&field.descriptor_index.get(cp),
|
||||
&field.name_index.get(cp)
|
||||
)?;
|
||||
}
|
||||
writeln!(w)?;
|
||||
|
|
@ -62,8 +60,8 @@ pub fn display_class<W: Write>(mut w: W, class: &ClassFile) -> Result<(), Box<dy
|
|||
writeln!(
|
||||
w,
|
||||
" {} {}",
|
||||
&method.descriptor_index.get(cp)?,
|
||||
&method.name_index.get(cp)?,
|
||||
&method.descriptor_index.get(cp),
|
||||
&method.name_index.get(cp),
|
||||
)?;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue