Пример #1
0
 /// <summary>
 /// Gets a class reference for the given type reference.
 /// </summary>
 internal static ClassReference GetClassReference(this JvmClassLib.TypeReference type, XTypeUsageFlags usageFlags, DexTargetPackage targetPackage, XModule module)
 {
     var classRef = type.GetReference(usageFlags, targetPackage, module) as ClassReference;
     if (classRef == null)
         throw new ArgumentException(string.Format("type {0} is not a class reference", type.ClassName));
     return classRef;
 }
Пример #2
0
        /// <summary>
        /// Gets a class reference for the given type reference.
        /// </summary>
        internal static TypeReference GetReference(this JvmClassLib.TypeReference type, XTypeUsageFlags usageFlags, DexTargetPackage targetPackage, XModule module)
        {
            if (type == null)
                throw new ArgumentNullException("type");

            var xType = XBuilder.AsTypeReference(module, type, usageFlags);
            return xType.GetReference(targetPackage);
        }
Пример #3
0
        /// <summary>
        /// Gets a class reference for the given type reference.
        /// </summary>
        internal static ClassReference GetClassReference(this JvmClassLib.TypeReference type, XTypeUsageFlags usageFlags, DexTargetPackage targetPackage, XModule module)
        {
            var classRef = type.GetReference(usageFlags, targetPackage, module) as ClassReference;

            if (classRef == null)
            {
                throw new ArgumentException(string.Format("type {0} is not a class reference", type.ClassName));
            }
            return(classRef);
        }
Пример #4
0
        /// <summary>
        /// Gets a class reference for the given type reference.
        /// </summary>
        internal static TypeReference GetReference(this JvmClassLib.TypeReference type, XTypeUsageFlags usageFlags, DexTargetPackage targetPackage, XModule module)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            var xType = XBuilder.AsTypeReference(module, type, usageFlags);

            return(xType.GetReference(targetPackage));
        }
Пример #5
0
 /// <summary>
 /// Make a xtype reference for a java class name.
 /// </summary>
 private XTypeReference AsTypeReference(string className, XTypeUsageFlags usageFlags)
 {
     return(XBuilder.AsTypeReference(module, className, usageFlags));
 }
Пример #6
0
 /// <summary>
 /// Make a .NET type reference for a java type reference.
 /// </summary>
 private XTypeReference AsTypeReference(JvmClassLib.TypeReference javaRef, XTypeUsageFlags usageFlags)
 {
     return(XBuilder.AsTypeReference(module, javaRef, usageFlags));
 }
Пример #7
0
 /// <summary>
 /// Make a .NET type reference for a java class file.
 /// </summary>
 private XTypeReference AsTypeReference(ClassFile classFile, XTypeUsageFlags usageFlags)
 {
     return(XBuilder.AsTypeReference(module, classFile, usageFlags));
 }
Пример #8
0
 /// <summary>
 /// Make a .NET type reference for a java type reference.
 /// </summary>
 private XTypeReference AsTypeReference(JvmClassLib.TypeReference javaRef, XTypeUsageFlags usageFlags)
 {
     return XBuilder.AsTypeReference(module, javaRef, usageFlags);
 }
Пример #9
0
 /// <summary>
 /// Make a xtype reference for a java class name.
 /// </summary>
 private XTypeReference AsTypeReference(string className, XTypeUsageFlags usageFlags)
 {
     return XBuilder.AsTypeReference(module, className, usageFlags);
 }
Пример #10
0
 /// <summary>
 /// Convert an Java type reference to an XTypeReference.
 /// </summary>
 public static XTypeReference AsTypeReference(XModule module, string className, XTypeUsageFlags usageFlags)
 {
     var objectType = new ObjectTypeReference(className, null);
     return AsTypeReference(module, objectType, usageFlags);
 }
Пример #11
0
 /// <summary>
 /// Make a .NET type reference for a java class file.
 /// </summary>
 private XTypeReference AsTypeReference(ClassFile classFile, XTypeUsageFlags usageFlags)
 {
     return XBuilder.AsTypeReference(module, classFile, usageFlags);
 }
Пример #12
0
        /// <summary>
        /// Convert an Java type reference to an XTypeReference.
        /// </summary>
        public static XTypeReference AsTypeReference(XModule module, TypeReference type, XTypeUsageFlags usageFlags)
        {
            if (type.IsArray)
            {
                var arrayType = (ArrayTypeReference)type;
                return new XArrayType(AsTypeReference(module, arrayType.ElementType, usageFlags));
            }

            if (type.IsBaseType)
            {
                var baseType = (BaseTypeReference)type;
                var ts = module.TypeSystem;
                switch (baseType.Type)
                {
                    case BaseTypes.Boolean:
                        return ts.Bool;
                    case BaseTypes.Byte:
                        return ts.SByte;
                    case BaseTypes.Char:
                        return ts.Char;
                    case BaseTypes.Short:
                        return ts.Short;
                    case BaseTypes.Int:
                        return ts.Int;
                    case BaseTypes.Long:
                        return ts.Long;
                    case BaseTypes.Float:
                        return ts.Float;
                    case BaseTypes.Double:
                        return ts.Double;
                }
                throw new NotImplementedException("Unknown base type " + (int)baseType.Type);
            }

            if (type.IsVoid)
            {
                return module.TypeSystem.Void;
            }

            if (type.IsTypeVariable)
            {
                throw new NotImplementedException("Unknown type " + type);
            }

            {
                var objectType = (ObjectTypeReference) type;
                if ((usageFlags != XTypeUsageFlags.DeclaringType) && (usageFlags != XTypeUsageFlags.BaseType))
                {
                    switch (objectType.ClassName)
                    {
                        case "java/lang/Boolean":
                            return CreateNullableT(module, module.TypeSystem.Bool);
                        case "java/lang/Byte":
                            return CreateNullableT(module, module.TypeSystem.Byte);
                        case "java/lang/Character":
                            return CreateNullableT(module, module.TypeSystem.Char);
                        case "java/lang/Short":
                            return CreateNullableT(module, module.TypeSystem.Short);
                        case "java/lang/Integer":
                            return CreateNullableT(module, module.TypeSystem.Int);
                        case "java/lang/Long":
                            return CreateNullableT(module, module.TypeSystem.Long);
                        case "java/lang/Float":
                            return CreateNullableT(module, module.TypeSystem.Float);
                        case "java/lang/Double":
                            return CreateNullableT(module, module.TypeSystem.Double);
                    }
                }

                var typeRef = new JavaTypeReference(module, objectType, objectType.ClassName);
                return typeRef;
            }
        }
Пример #13
0
 /// <summary>
 /// Convert an Java type reference to an XTypeReference.
 /// </summary>
 public static XTypeReference AsTypeReference(XModule module, ClassFile classFile, XTypeUsageFlags usageFlags)
 {
     if (classFile == null)
         return null;
     var objectType = new ObjectTypeReference(classFile.ClassName, null);
     return AsTypeReference(module, objectType, usageFlags);
 }
Пример #14
0
        /// <summary>
        /// Convert an Java type reference to an XTypeReference.
        /// </summary>
        public static XTypeReference AsTypeReference(XModule module, TypeReference type, XTypeUsageFlags usageFlags)
        {
            if (type.IsArray)
            {
                var arrayType = (ArrayTypeReference)type;
                return(new XArrayType(AsTypeReference(module, arrayType.ElementType, usageFlags)));
            }

            if (type.IsBaseType)
            {
                var baseType = (BaseTypeReference)type;
                var ts       = module.TypeSystem;
                switch (baseType.Type)
                {
                case BaseTypes.Boolean:
                    return(ts.Bool);

                case BaseTypes.Byte:
                    return(ts.SByte);

                case BaseTypes.Char:
                    return(ts.Char);

                case BaseTypes.Short:
                    return(ts.Short);

                case BaseTypes.Int:
                    return(ts.Int);

                case BaseTypes.Long:
                    return(ts.Long);

                case BaseTypes.Float:
                    return(ts.Float);

                case BaseTypes.Double:
                    return(ts.Double);
                }
                throw new NotImplementedException("Unknown base type " + (int)baseType.Type);
            }

            if (type.IsVoid)
            {
                return(module.TypeSystem.Void);
            }

            if (type.IsTypeVariable)
            {
                throw new NotImplementedException("Unknown type " + type);
            }

            {
                var objectType = (ObjectTypeReference)type;
                if ((usageFlags != XTypeUsageFlags.DeclaringType) && (usageFlags != XTypeUsageFlags.BaseType))
                {
                    switch (objectType.ClassName)
                    {
                    case "java/lang/Boolean":
                        return(CreateNullableT(module, module.TypeSystem.Bool));

                    case "java/lang/Byte":
                        return(CreateNullableT(module, module.TypeSystem.Byte));

                    case "java/lang/Character":
                        return(CreateNullableT(module, module.TypeSystem.Char));

                    case "java/lang/Short":
                        return(CreateNullableT(module, module.TypeSystem.Short));

                    case "java/lang/Integer":
                        return(CreateNullableT(module, module.TypeSystem.Int));

                    case "java/lang/Long":
                        return(CreateNullableT(module, module.TypeSystem.Long));

                    case "java/lang/Float":
                        return(CreateNullableT(module, module.TypeSystem.Float));

                    case "java/lang/Double":
                        return(CreateNullableT(module, module.TypeSystem.Double));
                    }
                }

                var typeRef = new JavaTypeReference(module, objectType, objectType.ClassName);
                return(typeRef);
            }
        }
Пример #15
0
        /// <summary>
        /// Convert an Java type reference to an XTypeReference.
        /// </summary>
        public static XTypeReference AsTypeReference(XModule module, ClassFile classFile, XTypeUsageFlags usageFlags)
        {
            if (classFile == null)
            {
                return(null);
            }
            var objectType = new ObjectTypeReference(classFile.ClassName, null);

            return(AsTypeReference(module, objectType, usageFlags));
        }
Пример #16
0
        /// <summary>
        /// Convert an Java type reference to an XTypeReference.
        /// </summary>
        public static XTypeReference AsTypeReference(XModule module, string className, XTypeUsageFlags usageFlags)
        {
            var objectType = new ObjectTypeReference(className, null);

            return(AsTypeReference(module, objectType, usageFlags));
        }