Example #1
0
        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);
        }
Example #2
0
        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));
        }