public void TypeReferenceEquals()
        {
            var int_ref = JavaTypeReference.Int;

            Assert.AreEqual(JavaTypeReference.Int, int_ref, "primitive types 2");

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

            Assert.AreEqual(new JavaTypeReference(gt, null), new JavaTypeReference(new JavaTypeParameter("T", tps), null), "type parameters");
            Assert.AreNotEqual(new JavaTypeReference(gt, null), new JavaTypeReference(new JavaTypeParameter("U", tps), null), "type parameters 2");
            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 = JavaApiTestHelper.CreateClass(pkg, "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("T", tps), 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");
        }
Esempio n. 2
0
        public void GenericInheritanceMappings()
        {
            var obj = api.FindType("java.lang.Object") as JavaClassModel;

            Assert.IsNotNull(obj.GenericInheritanceMapping, "java.lang.Object mapping not found");
            Assert.AreEqual(0, obj.GenericInheritanceMapping.Count, "ContentObservable mapping not found");

            var kls = api.FindType("android.database.ContentObservable") as JavaClassModel;
            var map = kls.GenericInheritanceMapping;

            Assert.IsNotNull(map, "ContentObservable mapping not found");
            Assert.AreEqual(1, map.Count, "ContentObservable mapping count unexpected");

            Assert.IsNotNull(map.Keys.First().ReferencedTypeParameter, "key is not GenericTypeParameter");
            Assert.IsNotNull("T", map.Keys.First().ReferencedTypeParameter.Name, "key GenericTypeParameter has unexpected name");
            Assert.IsNotNull(map.Values.First().ReferencedType, "value is not to JavaType");
            Assert.IsNotNull("android.database.ContentObserver", map.Values.First().ReferencedType.FullName, "value JavaType has unexpected name");

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

            Assert.IsTrue(map.TryGetValue(new JavaTypeReference(gt, null), out var mapped),
                          "Mapped type for generic parameter 'T' not found, or dictionary lookup failed.");

            Assert.AreEqual("android.database.ContentObserver", mapped.ReferencedType.FullName, "unexpected resolved type");
        }
Esempio n. 3
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 static void ParseTypeParameter(JavaTypeParameters parameters, XElement element)
        {
            var parameter = new JavaTypeParameter(element.XGetAttribute("name"), parameters)
            {
                ExtendedJniClassBound      = element.XGetAttribute("jni-classBound"),
                ExtendedClassBound         = element.XGetAttribute("classBound"),
                ExtendedInterfaceBounds    = element.XGetAttribute("interfaceBounds"),
                ExtendedJniInterfaceBounds = element.XGetAttribute("jni-interfaceBounds")
            };

            parameters.Add(parameter);

            if (element.Element("genericConstraints") is XElement gc)
            {
                parameter.GenericConstraints.AddRange(ParseGenericConstraints(gc));
                return;
            }

            // Now we have to deal with the format difference...
            // Some versions of class-parse stopped generating <genericConstraints> but started
            // generating "classBound" and "interfaceBounds" attributes instead.
            // They don't make sense and blocking this effort, but we have to deal with that...
            if (!string.IsNullOrEmpty(parameter.ExtendedClassBound) || !string.IsNullOrEmpty(parameter.ExtendedInterfaceBounds))
            {
                if (!string.IsNullOrEmpty(parameter.ExtendedClassBound))
                {
                    parameter.GenericConstraints.Add(new JavaGenericConstraint(parameter.ExtendedClassBound));
                }
                if (!string.IsNullOrEmpty(parameter.ExtendedInterfaceBounds))
                {
                    foreach (var ic in parameter.ExtendedInterfaceBounds.Split(':'))
                    {
                        parameter.GenericConstraints.Add(new JavaGenericConstraint(ic));
                    }
                }
            }
        }