use crate::core::ir::{PrimitiveType, TypeRef};
pub(super) fn unwrap_optional(ty: &TypeRef) -> &TypeRef {
match ty {
TypeRef::Optional(inner) => inner.as_ref(),
other => other,
}
}
pub(super) fn kotlin_nullable_type_for_optional(ty: &TypeRef) -> String {
let base = match ty {
TypeRef::Optional(inner) => inner.as_ref(),
other => other,
};
let non_null = match base {
TypeRef::Primitive(p) => match p {
PrimitiveType::Bool => "Boolean",
PrimitiveType::I8 | PrimitiveType::U8 => "Byte",
PrimitiveType::I16 | PrimitiveType::U16 => "Short",
PrimitiveType::I32 | PrimitiveType::U32 => "Int",
PrimitiveType::I64 | PrimitiveType::U64 | PrimitiveType::Usize | PrimitiveType::Isize => "Long",
PrimitiveType::F32 => "Float",
PrimitiveType::F64 => "Double",
},
TypeRef::String => "String",
TypeRef::Named(n) => return format!("{n}?"),
_ => "String",
};
format!("{non_null}?")
}
pub(super) fn jni_zero_literal(ty: &TypeRef) -> &'static str {
match ty {
TypeRef::String => "\"\"",
TypeRef::Primitive(p) => match p {
PrimitiveType::Bool => "false",
PrimitiveType::F32 | PrimitiveType::F64 => "0.0",
PrimitiveType::I64 | PrimitiveType::U64 | PrimitiveType::Usize | PrimitiveType::Isize => "0L",
_ => "0",
},
_ => "\"\"",
}
}