Beispiel #1
0
        public void GenericDerivation()
        {
            var dic = api.FindType("java.util.Dictionary") as JavaClassModel;

            Assert.IsNotNull(dic, "Dictionary not found");
            Assert.AreEqual(0, dic.GenericInheritanceMapping.Count, "Dictionary should have no mapping.");

            var hashtable = api.FindType("java.util.Hashtable") as JavaClassModel;

            Assert.IsNotNull(hashtable, "Hashtable not found");
            Assert.AreEqual(0, hashtable.GenericInheritanceMapping.Count, "Hashtable should have no mapping.");

            var pkg       = new JavaPackage("com.example", "com/example", null);
            var dummyType = JavaApiTestHelper.CreateClass(pkg, "Dummy");
            var tps       = new JavaTypeParameters(dummyType);

            var props = api.FindType("java.util.Properties") as JavaClassModel;

            Assert.IsNotNull(props, "Properties not found");
            Assert.AreEqual(2, props.GenericInheritanceMapping.Count, "Properties should have no mapping.");

            var k = new JavaTypeReference(new JavaTypeParameter("K", tps), null);
            var v = new JavaTypeReference(new JavaTypeParameter("V", tps), null);

            Assert.IsNotNull(props.GenericInheritanceMapping [k], "Properties: mapping for K not found.");
            Assert.AreEqual("java.lang.Object", props.GenericInheritanceMapping [k].ReferencedType.FullName, "Properties: mapping for K is not to java.lang.Object.");
            Assert.AreEqual("java.lang.Object", props.GenericInheritanceMapping [v].ReferencedType.FullName, "Properties: mapping for K is not to java.lang.Object.");
        }
Beispiel #2
0
        public void TypeReferenceEquals()
        {
            var intRef = new JavaTypeReference("int");

            Assert.AreEqual(intRef, new JavaTypeReference("int"), "primitive types");
            Assert.AreEqual(JavaTypeReference.Int, intRef, "primitive types 2");
            Assert.AreNotEqual(new JavaTypeReference("void"), intRef, "primitive types 3");
            Assert.AreNotEqual(intRef, new JavaTypeReference(intRef, "[]"), "primitive types: array vs. non-array");
            Assert.AreEqual(new JavaTypeReference(intRef, "[]"), new JavaTypeReference(intRef, "[]"), "primitive types: array vs. array");

            var dummyType = new JavaClass(new JavaPackage(api)
            {
                Name = string.Empty
            })
            {
                Name = "Dummy"
            };
            var tps = new JavaTypeParameters(dummyType);
            var gt  = new JavaTypeParameter(tps)
            {
                Name = "T"
            };

            Assert.AreEqual(new JavaTypeReference(gt, null), new JavaTypeReference(new JavaTypeParameter(tps)
            {
                Name = "T"
            }, null), "type parameters");
            Assert.AreNotEqual(new JavaTypeReference(gt, null), new JavaTypeReference(new JavaTypeParameter(tps)
            {
                Name = "U"
            }, null), "type parameters 2");
            Assert.AreNotEqual(new JavaTypeReference(gt, null), new JavaTypeReference("T"), "primitive vs. type parameters");
            Assert.AreNotEqual(new JavaTypeReference(gt, null), new JavaTypeReference(gt, "[]"), "type parameters: array vs. non-array");
            Assert.AreEqual(new JavaTypeReference(gt, "[]"), new JavaTypeReference(gt, "[]"), "type parameters: array vs. array");

            var type = new JavaClass(new JavaPackage(api)
            {
                Name = string.Empty
            })
            {
                Name = "T"
            };

            Assert.AreEqual(new JavaTypeReference(type, null, null), new JavaTypeReference(type, null, null), "type vs. type");
            Assert.AreNotEqual(new JavaTypeReference(type, null, "[]"), new JavaTypeReference(type, null, null), "type: array vs. non array");
            Assert.AreNotEqual(new JavaTypeReference(type, null, "[]"), new JavaTypeReference(type, null, "[][]"), "type: array vs. array of array");
            Assert.AreNotEqual(new JavaTypeReference(type, null, null), new JavaTypeReference(new JavaTypeParameter(tps)
            {
                Name = "T"
            }, null), "type vs. type parameters");

            Assert.AreNotEqual(new JavaTypeReference(gt, "[]"), new JavaTypeReference(type, null, null), "type: array vs. non array");
            Assert.AreNotEqual(new JavaTypeReference(type, null, "[]"), new JavaTypeReference(type, null, "[][]"), "type: array vs. array of array");
        }
        public void GenericDerivation()
        {
            var dic = api.FindNonGenericType("java.util.Dictionary") as JavaClass;

            Assert.IsNotNull(dic, "Dictionary not found");
            Assert.AreEqual(0, dic.GenericInheritanceMapping.Count, "Dictionary should have no mapping.");

            var hashtable = api.FindNonGenericType("java.util.Hashtable") as JavaClass;

            Assert.IsNotNull(hashtable, "Hashtable not found");
            Assert.AreEqual(0, hashtable.GenericInheritanceMapping.Count, "Hashtable should have no mapping.");

            var dummyType = new JavaClass(new JavaPackage(api)
            {
                Name = string.Empty
            })
            {
                Name = "Dummy"
            };
            var tps   = new JavaTypeParameters(dummyType);
            var props = api.FindNonGenericType("java.util.Properties") as JavaClass;

            Assert.IsNotNull(props, "Properties not found");
            Assert.AreEqual(2, props.GenericInheritanceMapping.Count, "Properties should have no mapping.");
            var k = new JavaTypeReference(new JavaTypeParameter(tps)
            {
                Name = "K"
            }, null);
            var v = new JavaTypeReference(new JavaTypeParameter(tps)
            {
                Name = "V"
            }, null);

            Assert.IsNotNull(props.GenericInheritanceMapping [k], "Properties: mapping for K not found.");
            Assert.AreEqual("java.lang.Object", props.GenericInheritanceMapping [k].ReferencedType.FullName, "Properties: mapping for K is not to java.lang.Object.");
            Assert.AreEqual("java.lang.Object", props.GenericInheritanceMapping [v].ReferencedType.FullName, "Properties: mapping for K is not to java.lang.Object.");
        }
Beispiel #4
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;
            }
        }
Beispiel #5
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);
            }
        }