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"); }
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"); }
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)); } } } }