use crate::if_else;
use super::{generic::TypeGeneric, Class};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ClassCtx {
pub name: String,
pub package: String,
pub generics: Vec<TypeGeneric>,
pub wrapped: bool,
}
impl ClassCtx {
pub fn new(class: &Class) -> Self {
Self {
name: class.name.clone(),
package: class.package.clone(),
generics: class.generics.clone(),
wrapped: class.wrapped,
}
}
pub fn base_name(&self) -> String {
format!("{}_{}", self.package.replace(".", "_"), &self.name)
}
pub fn method_name(&self, method: impl AsRef<str>) -> String {
format!(
"{}_{}",
self.base_name(),
method.as_ref().replace("_", "_1")
)
}
pub fn name(&self) -> String {
format!("__JNI_{}", &self.name)
}
pub fn name_generics(&self) -> String {
let generics = self
.generics
.iter()
.map(|v| v.name.to_owned())
.collect::<Vec<_>>()
.join(", ");
let generics = if_else!(generics != "", format!("<{}>", generics), "".into());
format!("__JNI_{}{}", &self.name, generics)
}
pub fn raw_name_generics(&self) -> String {
let generics = self
.generics
.iter()
.map(|v| v.name.to_owned())
.collect::<Vec<_>>()
.join(", ");
let generics = if_else!(generics != "", format!("<{}>", generics), "".into());
format!("{}{}", &self.name, generics)
}
pub fn raw_name_generics_java(&self) -> String {
let generics = self
.generics
.iter()
.map(|v| format!("{} extends ParentClass & NativeClass", v.name))
.collect::<Vec<_>>()
.join(", ");
let generics = if_else!(generics != "", format!("<{}>", generics), "".into());
format!("{}{}", &self.name, generics)
}
pub fn generics_java(&self) -> String {
let generics = self
.generics
.iter()
.map(|v| format!("{} extends ParentClass & NativeClass", v.name))
.collect::<Vec<_>>()
.join(", ");
if_else!(generics != "", format!("<{}>", generics), "".into())
}
pub fn generics(&self) -> String {
let generics = self
.generics
.iter()
.map(|v| v.name.to_owned())
.collect::<Vec<_>>()
.join(", ");
if_else!(generics != "", format!("<{}>", generics), "".into())
}
}