public static GenBaseSupport CreateGenBaseSupport(TypeDefinition t, CodeGenerationOptions opt) { var obs_attr = GetObsoleteAttribute(t.CustomAttributes); var reg_attr = GetRegisterAttribute(t.CustomAttributes); var jn = reg_attr != null ? ((string)reg_attr.ConstructorArguments [0].Value).Replace('/', '.') : t.FullNameCorrected(); var idx = jn.LastIndexOf('.'); var support = new GenBaseSupport { IsAcw = reg_attr != null, IsDeprecated = obs_attr != null, IsGeneratable = false, IsGeneric = t.HasGenericParameters, IsObfuscated = false, // obfuscated types have no chance to be already bound in managed types. Name = t.Name, Namespace = t.Namespace, PackageName = idx < 0 ? string.Empty : jn.Substring(0, idx), TypeParameters = GenericParameterDefinitionList.FromMetadata(t.GenericParameters), Visibility = t.IsPublic || t.IsNestedPublic ? "public" : "protected internal" }; support.JavaSimpleName = TypeNameUtilities.FilterPrimitiveFullName(t.FullNameCorrected()); if (support.JavaSimpleName == null) { support.JavaSimpleName = idx < 0 ? jn : jn.Substring(idx + 1); support.FullName = t.FullNameCorrected(); } else { var sym = opt.SymbolTable.Lookup(support.JavaSimpleName); support.FullName = sym != null ? sym.FullName : t.FullNameCorrected(); } support.JavaSimpleName = support.JavaSimpleName.Replace('$', '.'); if (support.IsDeprecated) { support.DeprecatedComment = GetObsoleteComment(obs_attr) ?? "This class is obsoleted in this android platform"; } return(support); }
public ISymbol Lookup(string java_type, GenericParameterDefinitionList in_params) { string type_params; int arrayRank; bool has_ellipsis; string key = GetSymbolInfo(java_type, out type_params, out arrayRank, out has_ellipsis); // FIXME: we should make sure to differentiate those ref types IF we use those modifiers in the future. switch (key [key.Length - 1]) { case '&': // managed ref type case '*': // managed (well, unmanaged...) pointer type key = key.Substring(0, key.Length - 1); break; } key = TypeNameUtilities.FilterPrimitiveFullName(key) ?? key; switch (key) { case "android.content.res.XmlResourceParser": return(CreateArray(xmlresourceparser_sym, arrayRank, has_ellipsis)); case "org.xmlpull.v1.XmlPullParser": return(CreateArray(xmlpullparser_sym, arrayRank, has_ellipsis)); case "java.io.FileInputStream": return(CreateArray(fileinstream_sym, arrayRank, has_ellipsis)); case "java.io.FileOutputStream": return(CreateArray(fileoutstream_sym, arrayRank, has_ellipsis)); case "java.io.InputStream": return(CreateArray(instream_sym, arrayRank, has_ellipsis)); case "java.io.OutputStream": return(CreateArray(outstream_sym, arrayRank, has_ellipsis)); case "java.lang.CharSequence": return(CreateArray(char_seq, arrayRank, has_ellipsis)); case "java.lang.String": return(CreateArray(string_sym, arrayRank, has_ellipsis)); case "java.util.List": case "java.util.ArrayList": case "System.Collections.IList": return(CreateArray(new CollectionSymbol(key, "IJavaList", "JavaList", type_params), arrayRank, has_ellipsis)); case "java.util.Map": case "java.util.HashMap": case "java.util.SortedMap": case "System.Collections.IDictionary": return(CreateArray(new CollectionSymbol(key, "IJavaDictionary", "JavaDictionary", type_params), arrayRank, has_ellipsis)); case "java.util.Set": return(CreateArray(new CollectionSymbol(key, "IJavaCollection", "JavaSet", type_params), arrayRank, has_ellipsis)); case "java.util.Collection": case "System.Collections.ICollection": return(CreateArray(new CollectionSymbol(key, "IJavaCollection", "JavaCollection", type_params), arrayRank, has_ellipsis)); default: break; } ISymbol result; var gpd = in_params != null?in_params.FirstOrDefault(t => t.Name == key) : null; if (gpd != null) { result = new GenericTypeParameter(gpd); } else { result = Lookup(key + type_params); } return(CreateArray(result, arrayRank, has_ellipsis)); }