Skip to content

Commit bd6ca30

Browse files
committed
Simplify ident and mangling handling.
1 parent e149693 commit bd6ca30

File tree

6 files changed

+100
-249
lines changed

6 files changed

+100
-249
lines changed

java-spaghetti-gen/src/emit/classes.rs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use super::fields::Field;
99
use super::known_docs_url::KnownDocsUrl;
1010
use super::methods::Method;
1111
use crate::emit::Context;
12-
use crate::identifiers::{FieldMangling, RustIdentifier};
12+
use crate::identifiers::{FieldMangling, rust_ident};
1313
use crate::parser_util::{Id, IdPart, JavaClass};
1414

1515
#[derive(Debug, Default)]
@@ -33,18 +33,6 @@ pub(crate) struct Class {
3333
pub java: JavaClass,
3434
}
3535

36-
fn rust_id(id: &str) -> Result<String, anyhow::Error> {
37-
Ok(match RustIdentifier::from_str(id) {
38-
RustIdentifier::Identifier(id) => id,
39-
RustIdentifier::KeywordRawSafe(id) => id,
40-
RustIdentifier::KeywordUnderscorePostfix(id) => id,
41-
RustIdentifier::NonIdentifier(id) => io_data_err!(
42-
"Unable to add_class(): java identifier {:?} has no rust equivalent (yet?)",
43-
id
44-
)?,
45-
})
46-
}
47-
4836
impl Class {
4937
pub(crate) fn mod_for(class: Id) -> Result<String, anyhow::Error> {
5038
let mut buf = String::new();
@@ -54,7 +42,7 @@ impl Class {
5442
if !buf.is_empty() {
5543
buf.push_str("::");
5644
}
57-
buf.push_str(&rust_id(id)?);
45+
buf.push_str(&rust_ident(id)?);
5846
}
5947
IdPart::ContainingClass(_) => {}
6048
IdPart::LeafClass(_) => {}
@@ -68,8 +56,8 @@ impl Class {
6856
for component in class.iter() {
6957
match component {
7058
IdPart::Namespace(_) => {}
71-
IdPart::ContainingClass(id) => write!(&mut buf, "{}_", rust_id(id)?)?,
72-
IdPart::LeafClass(id) => write!(&mut buf, "{}", rust_id(id)?)?,
59+
IdPart::ContainingClass(id) => write!(&mut buf, "{}_", rust_ident(id)?)?,
60+
IdPart::LeafClass(id) => write!(&mut buf, "{}", rust_ident(id)?)?,
7361
}
7462
}
7563
Ok(buf)

java-spaghetti-gen/src/emit/fields.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ use super::cstring;
88
use super::known_docs_url::KnownDocsUrl;
99
use crate::config::ClassConfig;
1010
use crate::emit::Context;
11-
use crate::identifiers::{FieldMangling, IdentifierManglingError, mangle_field};
11+
use crate::identifiers::{FieldMangling, mangle_field};
1212
use crate::parser_util::{Id, JavaClass, JavaField};
1313

1414
pub struct Field<'a> {
1515
pub class: &'a JavaClass,
1616
pub java: JavaField<'a>,
17-
pub rust_names: Result<FieldMangling<'a>, IdentifierManglingError>,
17+
pub rust_names: Result<FieldMangling<'a>, anyhow::Error>,
1818
}
1919

2020
impl<'a> Field<'a> {

java-spaghetti-gen/src/identifiers/field_mangling_style.rs renamed to java-spaghetti-gen/src/identifiers/field_mangling.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
use crate::identifiers::{IdentifierManglingError, javaify_identifier};
1+
use crate::identifiers::rust_ident;
22
use crate::parser_util::JavaField;
33

44
pub enum FieldMangling<'a> {
55
ConstValue(String, cafebabe::constant_pool::LiteralConstant<'a>),
66
GetSet(String, String),
77
}
88

9-
pub fn mangle_field<'a>(field: JavaField<'a>) -> Result<FieldMangling<'a>, IdentifierManglingError> {
9+
pub fn mangle_field<'a>(field: JavaField<'a>) -> Result<FieldMangling<'a>, anyhow::Error> {
1010
let field_name = field.name();
1111
if let Some(value) = field.constant().as_ref() {
12-
let name = javaify_identifier(field_name)?;
12+
let name = rust_ident(field_name)?;
1313
Ok(FieldMangling::ConstValue(name, value.clone()))
1414
} else {
1515
Ok(FieldMangling::GetSet(
16-
javaify_identifier(field_name)?,
17-
javaify_identifier(&format!("set_{field_name}"))?,
16+
rust_ident(field_name)?,
17+
rust_ident(&format!("set_{field_name}"))?,
1818
))
1919
}
2020
}

java-spaghetti-gen/src/identifiers/method_mangling_style.rs renamed to java-spaghetti-gen/src/identifiers/method_mangling.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
use anyhow::bail;
12
use cafebabe::descriptors::{FieldType, MethodDescriptor};
23
use serde_derive::Deserialize;
34

4-
use super::rust_identifier::{IdentifierManglingError, javaify_identifier};
5+
use super::rust_identifier::rust_ident;
56
use crate::parser_util::{Id, IdPart};
67

78
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq, Hash)]
@@ -123,20 +124,20 @@ fn mangle_method_name_test() {
123124
}
124125

125126
impl MethodManglingStyle {
126-
pub fn mangle(&self, name: &str, descriptor: &MethodDescriptor) -> Result<String, IdentifierManglingError> {
127+
pub fn mangle(&self, name: &str, descriptor: &MethodDescriptor) -> Result<String, anyhow::Error> {
127128
let name = match name {
128129
"" => {
129-
return Err(IdentifierManglingError::EmptyString);
130+
bail!("empty string")
130131
}
131132
"<init>" => "new",
132133
"<clinit>" => {
133-
return Err(IdentifierManglingError::NotApplicable("Static type ctor"));
134+
bail!("not applicable: Static type ctor")
134135
}
135136
name => name,
136137
};
137138

138139
let long_sig = match self {
139-
MethodManglingStyle::Java => return javaify_identifier(name),
140+
MethodManglingStyle::Java => return rust_ident(name),
140141
MethodManglingStyle::JavaShortSignature => false,
141142
MethodManglingStyle::JavaLongSignature => true,
142143
};
@@ -189,6 +190,6 @@ impl MethodManglingStyle {
189190
}
190191
}
191192

192-
javaify_identifier(&buffer)
193+
rust_ident(&buffer)
193194
}
194195
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
//! JNI and Rust identifier parsing and categorizing utilities
22
3-
mod field_mangling_style;
4-
mod method_mangling_style;
3+
mod field_mangling;
4+
mod method_mangling;
55
mod rust_identifier;
66

7-
pub use field_mangling_style::*;
8-
pub use method_mangling_style::*;
7+
pub use field_mangling::*;
8+
pub use method_mangling::*;
99
pub use rust_identifier::*;

0 commit comments

Comments
 (0)