Esempio n. 1
0
        /// <summary>
        /// Create a name for a parameter of the given type.
        /// </summary>
        private string CreateParameterName(NetTypeReference parameterType, DocParameter doc, TargetFramework target)
        {
            if ((doc != null) && (!string.IsNullOrEmpty(doc.Name)))
            {
                return(doc.Name);
            }

            target.ReportMissingParameterName(javaMethod.DeclaringClass.ClassName);

            var name        = parameterType.Name;
            var elementType = parameterType.GetElementType();

            if (elementType != null)
            {
                name = elementType.Name.Replace('.', '_');
            }
            if (name == null)
            {
                name = "p";
            }
            if ((name.StartsWith("I")) && (name.Length > 1) && (elementType != null) && (elementType.IsInterface))
            {
                name = name.Substring(1);
            }
            name = name.Substring(0, 1).ToLower() + name.Substring(1);
            return(name);
        }
Esempio n. 2
0
 /// <summary>
 /// Make sure that the visibility of the given member is limited by the visibility of the given type is that is in another scope.
 /// </summary>
 /// <returns>True if member has changed</returns>
 public static bool LimitVisibility(this INetMemberVisibility member, NetTypeReference type)
 {
     if (type == null)
     {
         return(false);
     }
     return(type.Accept(LimitVisibilityTypeVisitor.Instance, member));
 }
Esempio n. 3
0
 /// <summary>
 /// Make sure that the visibility of the given type definition is high enough to be used in the signature of the given member.
 /// </summary>
 /// <returns>True if type has changed</returns>
 public static bool EnsureVisibility(this NetTypeReference type, INetMemberVisibility member)
 {
     if (type == null)
     {
         return(false);
     }
     return(type.Accept(EnsureVisibilityTypeVisitor.Instance, member));
 }
Esempio n. 4
0
 /// <summary>
 /// Default ctor
 /// </summary>
 public NetParameterDefinition(string name, NetTypeReference type, bool isParams)
 {
     if (type.IsVoid())
         throw new ArgumentException("type cannot be void");
     this.name = Keywords.IsKeyword(name) ? "@" + name : name;
     this.type = type;
     this.isParams = isParams;
     if (isParams && !(type is NetArrayType))
     {
         throw new ArgumentException("Params parameter must have array type");
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Do type1 and type2 refer to the same type?
        /// </summary>
        /// <remarks>
        /// The types are also the same, if the Generic Parameters have a different name.
        /// MyClass&lt;T&gt; is the same as MyClass&lt;U&gt;.
        /// So we need to do some special processing to check this.
        /// </remarks>
        internal static bool AreSame(this NetTypeReference type1, NetTypeReference type2)
        {
            if ((type1 == null) && (type2 == null))
                return true;
            if ((type1 == null) || (type2 == null))
                return false;

            string fullName1 = type1.FullName;
            string fullName2 = type2.FullName;

            return AreSameGenericParameters(fullName1, fullName2, false);
        }
Esempio n. 6
0
        /// <summary>
        /// Does the given type is an unsigned byte or references on in its
        /// elements types or generic types?
        /// </summary>
        internal static bool ContainsUnsignedByte(this NetTypeReference type)
        {
            if (type == null)
            {
                return(false);
            }

            if (type.IsByte())
            {
                return(true);
            }

            return(type.GetReferencedTypes().Any(r => r.IsByte()));
        }
Esempio n. 7
0
 /// <summary>
 /// Resolve all generic parameters in the given type in the given context.
 /// </summary>
 internal static bool TryResolve(NetTypeReference type, INetGenericParameterProvider context, TypeNameMap typeNameMap, out NetTypeReference result)
 {
     result = null;
     if (type == null)
     {
         return(false);
     }
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     result = type.Accept(new Resolver(context, typeNameMap), 0);
     return(result != null);
 }
Esempio n. 8
0
        /// <summary>
        /// Resolve all generic parameters in the given type in the given context.
        /// </summary>
        internal static NetTypeReference Resolve(NetTypeReference type, INetGenericParameterProvider context, TypeNameMap typeNameMap)
        {
            if (type == null)
            {
                return(null);
            }
            NetTypeReference result;

            if (!TryResolve(type, context, typeNameMap, out result))
            {
                throw new ArgumentException(string.Format("Cannot resolve {0} in context of {1}", type, context));
            }
            return(result);
        }
Esempio n. 9
0
        internal static bool AreEqual(NetTypeReference type1, NetTypeReference type2)
        {
            if ((type1 == null) && (type2 == null))
            {
                return(true);
            }
            if ((type1 == null) || (type2 == null))
            {
                return(false);
            }

            string fullName1 = type1.FullName;
            string fullName2 = type2.FullName;

            return(fullName1 == fullName2);
        }
Esempio n. 10
0
        /// <summary>
        /// Do type1 and type2 refer to the same type?
        /// </summary>
        /// <remarks>
        /// The types are also the same, if the Generic Parameters have a different name.
        /// MyClass&lt;T&gt; is the same as MyClass&lt;U&gt;.
        /// So we need to do some special processing to check this.
        /// </remarks>
        internal static bool AreSame(this NetTypeReference type1, NetTypeReference type2)
        {
            if ((type1 == null) && (type2 == null))
            {
                return(true);
            }
            if ((type1 == null) || (type2 == null))
            {
                return(false);
            }

            string fullName1 = type1.FullName;
            string fullName2 = type2.FullName;

            return(AreSameGenericParameters(fullName1, fullName2, false));
        }
Esempio n. 11
0
        /// <summary>
        /// Resolve the given generic parameter into a type reference.
        /// </summary>
        bool IBuilderGenericContext.TryResolveTypeParameter(string name, TargetFramework target,
                                                            out NetTypeReference type)
        {
            var methodTypeParam = method.GenericParameters.FirstOrDefault(x => (x.Name == name) || (x.OriginalName == name));

            if (methodTypeParam != null)
            {
                type = methodTypeParam;
                return(true);
            }

            if (((IBuilderGenericContext)declaringTypeBuilder).TryResolveTypeParameter(name, target, out type))
            {
                return(true);
            }
            // Look in parent type
            type = ResolveTypeParameterInBaseClass(javaMethod.DeclaringClass, name, target);
            return(type != null);
        }
Esempio n. 12
0
 /// <summary>
 /// Resolve the given java based type reference to a Cecil based type reference.
 /// </summary>
 internal static bool TryResolve(this TypeReference jRef, TargetFramework target, IBuilderGenericContext gcontext, bool convertSignedBytes, out NetTypeReference result)
 {
     result = null;
     if (jRef.IsArray)
     {
         var aType = (ArrayTypeReference) jRef;
         NetTypeReference elementType;
         if (!aType.ElementType.TryResolve(target, gcontext, convertSignedBytes, out elementType))
             return false;
         result = new NetArrayType(elementType);
         return true;
     }
     if (jRef.IsVoid)
     {
         result = target.TypeNameMap.GetByType(typeof(void));
         return true;
     }
     if (jRef.IsBaseType)
     {
         var bType = (BaseTypeReference) jRef;
         result = target.TypeNameMap.GetByType(bType.GetClrType(convertSignedBytes));
         return true;
     }
     if (jRef.IsObjectType)
     {
         return TryResolveObjectType((ObjectTypeReference) jRef, target, gcontext, out result);
     }
     if (jRef.IsTypeVariable)
     {
         var tRef = (TypeVariableReference) jRef;
         if (gcontext.TryResolveTypeParameter(tRef.ClassName, target, out result))
             return true;
         result = target.TypeNameMap.Object; // Hack for incorrect behaving java classes
         return true;
     }
     return false;
     //throw new ArgumentException(string.Format("Unknown java type ref. {0}", jRef));
 }
Esempio n. 13
0
 /// <summary>
 /// Resolve the given java based type reference to a Cecil based type reference.
 /// </summary>
 private static bool TryResolveObjectType(ObjectTypeReference jRef, TargetFramework target, IBuilderGenericContext gcontext, out NetTypeReference result)
 {
     var objecType = jRef;
     switch (objecType.ClassName)
     {
         case "java/lang/Exception":
         case "java/lang/Throwable":
             result = target.TypeNameMap.GetByType(typeof(Exception));
             return true;
         case "java/lang/Boolean":
         case "java/lang/Byte":
         case "java/lang/Character":
         case "java/lang/Double":
         case "java/lang/Float":
         case "java/lang/Integer":
         case "java/lang/Long":
         case "java/lang/Short":
             result = new NetNullableType(target.TypeNameMap.GetType(objecType, target, gcontext));
             return true;
         default:
             return target.TypeNameMap.TryGetType(objecType, target, gcontext, out result);
     }
 }
Esempio n. 14
0
        /// <summary>
        /// Create a type reference
        /// </summary>
        private static string CreateRef(NetTypeReference typeRef, bool allowVoid, bool useShortTypeNames, bool useShortNestedTypeNames, bool useGlobalPrefix, NetTypeDefinition context, TargetFramework target)
        {
            if (typeRef == null)
            {
                if (allowVoid)
                {
                    return("void");
                }
                throw new ArgumentNullException("typeRef");
            }
            var result = typeRef.Accept(new CodeTypeReferenceBuilder(context, useShortTypeNames, useShortNestedTypeNames, allowVoid, target.TypeNameMap), true);

            if (context != null)
            {
                switch (result)
                {
                case "global::Android.Widget.AdapterView<object>.IOnItemClickListener":
                    switch (context.FullName)
                    {
                    case "Android.Widget.Spinner":
                        return(result.Replace("<object>", "<global::Android.Widget.ISpinnerAdapter>"));

                    case "Android.Widget.ExpandableListView":
                        return(result.Replace("<object>", "<global::Android.Widget.IListAdapter>"));
                    }
                    break;
                }
            }
            if (useGlobalPrefix)
            {
                if (!result.StartsWith("global::"))
                {
                    result = "global::" + result;
                }
            }
            return(result);
        }
Esempio n. 15
0
        /// <summary>
        /// Resolve the given generic parameter into a type reference.
        /// </summary>
        protected override bool TryResolveTypeParameter(string name, TargetFramework target, out NetTypeReference type)
        {
            var parentContext = (IBuilderGenericContext)parent;

            type = typeDef.GenericParameters.FirstOrDefault(x => x.Name == name);
            if (type != null)
            {
                return(true);
            }
            return(parentContext.TryResolveTypeParameter(name, target, out type));
        }
Esempio n. 16
0
        /// <summary>
        /// Resolve the given java based type reference to a Cecil based type reference.
        /// </summary>
        private static bool TryResolveObjectType(ObjectTypeReference jRef, TargetFramework target, IBuilderGenericContext gcontext, out NetTypeReference result)
        {
            var objecType = jRef;

            switch (objecType.ClassName)
            {
            case "java/lang/Exception":
            case "java/lang/Throwable":
                result = target.TypeNameMap.GetByType(typeof(Exception));
                return(true);

            case "java/lang/Boolean":
            case "java/lang/Byte":
            case "java/lang/Character":
            case "java/lang/Double":
            case "java/lang/Float":
            case "java/lang/Integer":
            case "java/lang/Long":
            case "java/lang/Short":
                result = new NetNullableType(target.TypeNameMap.GetType(objecType, target, gcontext));
                return(true);

            default:
                return(target.TypeNameMap.TryGetType(objecType, target, gcontext, out result));
            }
        }
Esempio n. 17
0
 /// <summary>
 /// Resolve the given java based type reference to a Cecil based type reference.
 /// </summary>
 internal static bool TryResolve(this TypeReference jRef, TargetFramework target, IBuilderGenericContext gcontext, bool convertSignedBytes, out NetTypeReference result)
 {
     result = null;
     if (jRef.IsArray)
     {
         var aType = (ArrayTypeReference)jRef;
         NetTypeReference elementType;
         if (!aType.ElementType.TryResolve(target, gcontext, convertSignedBytes, out elementType))
         {
             return(false);
         }
         result = new NetArrayType(elementType);
         return(true);
     }
     if (jRef.IsVoid)
     {
         result = target.TypeNameMap.GetByType(typeof(void));
         return(true);
     }
     if (jRef.IsBaseType)
     {
         var bType = (BaseTypeReference)jRef;
         result = target.TypeNameMap.GetByType(bType.GetClrType(convertSignedBytes));
         return(true);
     }
     if (jRef.IsObjectType)
     {
         return(TryResolveObjectType((ObjectTypeReference)jRef, target, gcontext, out result));
     }
     if (jRef.IsTypeVariable)
     {
         var tRef = (TypeVariableReference)jRef;
         if (gcontext.TryResolveTypeParameter(tRef.ClassName, target, out result))
         {
             return(true);
         }
         result = target.TypeNameMap.Object; // Hack for incorrect behaving java classes
         return(true);
     }
     return(false);
     //throw new ArgumentException(string.Format("Unknown java type ref. {0}", jRef));
 }
Esempio n. 18
0
 /// <summary>
 /// Mark this method as an explicit interface implementation.
 /// </summary>
 public void SetExplicitImplementation(NetMethodDefinition iMethod, NetTypeReference iType)
 {
     if (iMethod == null)
         throw new ArgumentNullException("iMethod");
     if (iType == null)
         throw new ArgumentNullException("iType");
     InterfaceMethod = iMethod;
     InterfaceType = iType;
 }
Esempio n. 19
0
 /// <summary>
 /// Do type refer to System.Void?
 /// </summary>
 internal static bool IsVoid(this NetTypeReference type)
 {
     return((type == null) || (StripGlobalPrefix(type.FullName) == "System.Void"));
 }
Esempio n. 20
0
 /// <summary>
 /// Do type refer to System.String?
 /// </summary>
 internal static bool IsString(this NetTypeReference type)
 {
     return(StripGlobalPrefix(type.FullName) == "System.String");
 }
Esempio n. 21
0
 /// <summary>
 /// Resolve the given generic parameter into a type reference.
 /// </summary>
 bool IBuilderGenericContext.TryResolveTypeParameter(string name, TargetFramework target, out NetTypeReference type)
 {
     return(TryResolveTypeParameter(name, target, out type));
 }
Esempio n. 22
0
        /// <summary>
        /// Resolve the given generic parameter into a type reference.
        /// </summary>
        bool IBuilderGenericContext.TryResolveTypeParameter(string name, TargetFramework target,
                                                            out NetTypeReference type)
        {
            var methodTypeParam = method.GenericParameters.FirstOrDefault(x => (x.Name == name) || (x.OriginalName == name));
            if (methodTypeParam != null)
            {
                type = methodTypeParam;
                return true;
            }

            if (((IBuilderGenericContext) declaringTypeBuilder).TryResolveTypeParameter(name, target, out type))
                return true;
            // Look in parent type
            type = ResolveTypeParameterInBaseClass(javaMethod.DeclaringClass, name, target);
            return (type != null);
        }
Esempio n. 23
0
        internal static bool AreEqual(NetTypeReference type1, NetTypeReference type2)
        {
            if ((type1 == null) && (type2 == null))
                return true;
            if ((type1 == null) || (type2 == null))
                return false;

            string fullName1 = type1.FullName;
            string fullName2 = type2.FullName;

            return fullName1 == fullName2;
        }
Esempio n. 24
0
        /// <summary>
        /// Create a name for a parameter of the given type.
        /// </summary>
        private string CreateParameterName(NetTypeReference parameterType, DocParameter doc, TargetFramework target)
        {
            if ((doc != null) && (!string.IsNullOrEmpty(doc.Name)))
                return doc.Name;

            target.ReportMissingParameterName(javaMethod.DeclaringClass.ClassName);

            var name = parameterType.Name;
            var elementType = parameterType.GetElementType();
            if (elementType != null)
            {
                name = elementType.Name.Replace('.', '_');
            }
            if (name == null)
            {
                name = "p";
            }
            if ((name.StartsWith("I")) && (name.Length > 1) && (elementType != null) && (elementType.IsInterface))
            {
                name = name.Substring(1);
            }
            name = name.Substring(0, 1).ToLower() + name.Substring(1);
            return name;
        }
Esempio n. 25
0
 /// <summary>
 /// Resolve the given generic parameter into a type reference.
 /// </summary>
 protected override bool TryResolveTypeParameter(string name, TargetFramework target, out NetTypeReference type)
 {
     var parentContext = (IBuilderGenericContext) parent;
     type = typeDef.GenericParameters.FirstOrDefault(x => x.Name == name);
     if (type != null)
         return true;
     return parentContext.TryResolveTypeParameter(name, target, out type);
 }
Esempio n. 26
0
        /// <summary>
        /// Gets a mapping
        /// </summary>
        public bool TryGetType(ObjectTypeReference javaTypeRef, TargetFramework target, IBuilderGenericContext gcontext, out NetTypeReference result)
        {
            NetTypeDefinition typeDef;

            if (TryGetByJavaClassName(javaTypeRef.ClassName, out typeDef))
            {
                // Custom

                /*if (typeDef.FullName.StartsWith("System.Type"))
                 * {
                 * }*/

                // Create result
                if (!javaTypeRef.Arguments.Any() && (typeDef.GenericParameters.Count == 0))
                {
                    // Normal non-generic type
                    result = typeDef;
                    return(true);
                }

                if (typeDef.IgnoreGenericArguments)
                {
                    // Force use as normal type
                    result = typeDef;
                    return(true);
                }

                // Generic type is used as non-generic?
                NetTypeReference declaringType = null;
                if (javaTypeRef.Prefix != null)
                {
                    TryGetType(javaTypeRef.Prefix, target, gcontext, out declaringType);
                }
                var git = new NetGenericInstanceType(typeDef, declaringType);
                if (!javaTypeRef.Arguments.Any() && (typeDef.GenericParameters.Count > 0))
                {
                    // Add "object" arguments
                    foreach (var tp in typeDef.GenericParameters)
                    {
                        git.AddGenericArgument(Object, this);
                    }
                    result = git;
                    return(true);
                }

                if (javaTypeRef.Arguments.Count() != typeDef.GenericParameters.Count)
                {
                    if ((resolver == null) || (typeDef.GenericParameters.Count != 0) ||
                        (!resolver.AcceptLackOfGenericParameters))
                    {
                        throw new ArgumentException(string.Format("Mismatch between generic parameter count and generic argument count in {0}", javaTypeRef));
                    }
                    if ((resolver != null) && (resolver.AcceptLackOfGenericParameters) &&
                        (typeDef.GenericParameters.Count == 0))
                    {
                        result = typeDef;
                        return(true);
                    }
                }

                // Type with generic arguments
                foreach (var typeArg in javaTypeRef.Arguments)
                {
                    NetTypeReference arg;
                    if (typeArg.IsAny)
                    {
                        arg = Object;
                    }
                    else
                    {
                        if (!typeArg.Signature.TryResolve(target, gcontext, false, out arg))
                        {
                            arg = Object;
                            //result = null;
                            //return false;
                        }
                    }
                    git.AddGenericArgument(arg, this);
                }
                result = git;
                return(true);
            }
#if DEBUG
            var names = map.Keys.OrderBy(x => x).ToArray();
#endif
            //throw new ArgumentException(string.Format("{0} not found", javaTypeRef));
            result = null;
            return(false);
        }
Esempio n. 27
0
 /// <summary>
 /// Default ctor
 /// </summary>
 public NetCustomAttribute(NetTypeReference type, params object[] ctorArguments)
 {
     this.type = type;
     ConstructorArguments.AddRange(ctorArguments);
 }
Esempio n. 28
0
 /// <summary>
 /// Resolve the given generic parameter into a type reference.
 /// </summary>
 protected virtual bool TryResolveTypeParameter(string name, TargetFramework target, out NetTypeReference type)
 {
     throw new NotImplementedException();
 }
Esempio n. 29
0
        private static string ConvertPrimitive(object value, NetTypeReference expectedType)
        {
            if (expectedType != null)
            {
                if (expectedType.IsBoolean())
                {
                    value = System.Convert.ToBoolean(value);
                }
                else if (expectedType.IsChar())
                {
                    value = System.Convert.ToChar(value);
                }
            }

            if (value is byte[])
            {
                var arr = (byte[])value;
                var seq = arr.Select(x => string.Format("{0}", x));
                return("new byte[] { " + string.Join(",", seq) + " } ");
            }
            if (value is string[])
            {
                var arr = (string[])value;
                var seq = arr.Select(x => ConvertPrimitive(x, null));
                return("new string[] { " + string.Join("," + Environment.NewLine + "\t", seq) + " } ");
            }

            if (value is double)
            {
                var dvalue = (double)value;
                if (double.IsNaN(dvalue))
                {
                    return("0.0d / 0.0d");
                }
                if (double.IsNegativeInfinity(dvalue))
                {
                    return("-1.0d / 0.0d");
                }
                if (double.IsPositiveInfinity(dvalue))
                {
                    return("1.0d / 0.0d");
                }
            }

            if (value is float)
            {
                var fvalue = (float)value;
                if (float.IsNaN(fvalue))
                {
                    return("0.0f / 0.0f");
                }
                if (float.IsNegativeInfinity(fvalue))
                {
                    return("-1.0f / 0.0f");
                }
                if (float.IsPositiveInfinity(fvalue))
                {
                    return("1.0f / 0.0f");
                }
            }

            var compiler = new CSharpCodeProvider();
            var writer   = new StringWriter();

            compiler.GenerateCodeFromExpression(new CodePrimitiveExpression(value), writer,
                                                new CodeGeneratorOptions());
            return(writer.ToString());
        }
Esempio n. 30
0
        /// <summary>
        /// Gets a mapping
        /// </summary>
        public bool TryGetType(ObjectTypeReference javaTypeRef, TargetFramework target, IBuilderGenericContext gcontext, out NetTypeReference result)
        {
            NetTypeDefinition typeDef;
            if (TryGetByJavaClassName(javaTypeRef.ClassName, out typeDef))
            {
                // Custom
                /*if (typeDef.FullName.StartsWith("System.Type"))
                {
                }*/

                // Create result
                if (!javaTypeRef.Arguments.Any() && (typeDef.GenericParameters.Count == 0))
                {
                    // Normal non-generic type
                    result = typeDef;
                    return true;
                }

                if (typeDef.IgnoreGenericArguments)
                {
                    // Force use as normal type
                    result = typeDef;
                    return true;
                }

                // Generic type is used as non-generic?
                NetTypeReference declaringType = null;
                if (javaTypeRef.Prefix != null)
                {
                    TryGetType(javaTypeRef.Prefix, target, gcontext, out declaringType);
                }
                var git = new NetGenericInstanceType(typeDef, declaringType);
                if (!javaTypeRef.Arguments.Any() && (typeDef.GenericParameters.Count > 0))
                {
                    // Add "object" arguments
                    foreach (var tp in typeDef.GenericParameters)
                    {
                        git.AddGenericArgument(Object, this);
                    }
                    result = git;
                    return true;
                }

                if (javaTypeRef.Arguments.Count() != typeDef.GenericParameters.Count)
                {
                    if ((resolver == null) || (typeDef.GenericParameters.Count != 0) ||
                        (!resolver.AcceptLackOfGenericParameters))
                    {
                        throw new ArgumentException(string.Format("Mismatch between generic parameter count and generic argument count in {0}", javaTypeRef));
                    }
                    if ((resolver != null) && (resolver.AcceptLackOfGenericParameters) &&
                        (typeDef.GenericParameters.Count == 0))
                    {
                        result = typeDef;
                        return true;
                    }
                }

                // Type with generic arguments
                foreach (var typeArg in javaTypeRef.Arguments)
                {
                    NetTypeReference arg;
                    if (typeArg.IsAny)
                    {
                        arg = Object;
                    }
                    else
                    {
                        if (!typeArg.Signature.TryResolve(target, gcontext, false, out arg))
                        {
                            arg = Object;
                            //result = null;
                            //return false;
                        }
                    }
                    git.AddGenericArgument(arg, this);
                }
                result = git;
                return true;
            }
            #if DEBUG
            var names = map.Keys.OrderBy(x => x).ToArray();
            #endif
            //throw new ArgumentException(string.Format("{0} not found", javaTypeRef));
            result = null;
            return false;
        }
Esempio n. 31
0
 /// <summary>
 /// Resolve the given generic parameter into a type reference.
 /// </summary>
 protected override bool TryResolveTypeParameter(string name, TargetFramework target, out NetTypeReference type)
 {
     if (!AddGenericParameters)
     {
         if (cf.Signature.TypeParameters.Any(x => x.Name == name))
         {
             type = target.TypeNameMap.Object;
             return true;
         }
     }
     var result = typeDef.GenericParameters.FirstOrDefault(x => x.Name == name);
     if (result != null)
     {
         type = result;
         return true;
     }
     // This is a hack for non-behaving java classes
     type = target.TypeNameMap.Object;
     return false;
 }
Esempio n. 32
0
        /// <summary>
        /// Resolve the given generic parameter into a type reference.
        /// </summary>
        protected override bool TryResolveTypeParameter(string name, TargetFramework target, out NetTypeReference type)
        {
            if (!AddGenericParameters)
            {
                if (cf.Signature.TypeParameters.Any(x => x.Name == name))
                {
                    type = target.TypeNameMap.Object;
                    return(true);
                }
            }
            var result = typeDef.GenericParameters.FirstOrDefault(x => x.Name == name);

            if (result != null)
            {
                type = result;
                return(true);
            }
            // This is a hack for non-behaving java classes
            type = target.TypeNameMap.Object;
            return(false);
        }