rdc_macros/targets/
java.rs1use proc_macro2::{Ident, TokenStream};
2use quote::{quote};
3use syn::{Generics, WhereClause, GenericParam};
4
5pub fn implement_java_types(name: &Ident, generics: &Generics, where_clause: &Option<WhereClause>) -> TokenStream {
6 let type_name = match generics.params.len() {
7 0 => quote!(
8 stringify!(#name).to_string()
9 ),
10 _ => {
11 let generic_types = generics.params.iter().map(|param: &GenericParam| {
12 quote!(rdc::ir::TypeTarget::Java.resolve_type::<#param>().type_name())
13 });
14 quote!({
15 let mut type_string = stringify!(#name).to_string();
16 #(type_string.push_str(#generic_types);)*
17 type_string
18 })
19 }
20 };
21 quote!(
22 impl #generics rdc::targets::java::type_resolver::JavaCustomType for #name #generics #where_clause {
23 fn java_custom_type() -> rdc::ir::CustomType {
24 rdc::ir::CustomType::new(#type_name)
25 }
26 }
27
28 impl #generics rdc::targets::java::type_resolver::JavaType for #name #generics #where_clause {
29 fn java_type() -> rdc::ir::Type {
30 rdc::ir::Type::new(#type_name)
31 }
32 }
33
34 )
35}