Skip to content

Commit

Permalink
feat(types): add qualified_name for FieldType
Browse files Browse the repository at this point in the history
  • Loading branch information
henryhchchc committed Jun 14, 2024
1 parent 19df95c commit 2dd2cc0
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/types/field_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,18 @@ pub enum FieldType {
Array(Box<FieldType>),
}

impl FieldType {
/// Returns the qualified name of this type.
#[must_use]
pub fn qualified_name(&self) -> String {
match self {
Self::Base(pt) => pt.to_string(),
Self::Object(ClassRef { binary_name }) => binary_name.replace('/', "."),
Self::Array(inner) => format!("{}[]", inner.qualified_name()),
}
}
}

impl Display for FieldType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Expand Down Expand Up @@ -319,6 +331,23 @@ mod tests {
assert_eq!(PrimitiveType::try_from('J'), Ok(PrimitiveType::Long));
}

#[test]
fn qualified_name() {
assert_eq!(FieldType::Base(PrimitiveType::Int).qualified_name(), "int");
assert_eq!(
FieldType::from_str("Ljava/lang/String;")
.unwrap()
.qualified_name(),
"java.lang.String"
);
assert_eq!(
FieldType::from_str("[Ljava/lang/String;")
.unwrap()
.qualified_name(),
"java.lang.String[]"
);
}

#[test]
fn missing_semicolon() {
assert!(FieldType::from_str("Ljava/lang/String").is_err());
Expand Down

0 comments on commit 2dd2cc0

Please sign in to comment.