public void GenericConstructors()
        {
            string xml = @"<api>
		  <package name='XXX'>
		    <class abstract='true' deprecated='not deprecated' final='false' name='GenericConstructors' static='false' visibility='public' jni-signature='Landroid/app/GenericConstructors' extends='java.lang.Object' extends-generic-aware='java.lang.Object'>
		      <constructor deprecated='not deprecated' final='false' name='GenericConstructors' static='false' visibility='public' jni-signature='(LTTE;)V'>
		        <typeParameters>
		          <typeParameter name='E' interfaceBounds='' jni-interfaceBounds='' />
		        </typeParameters>
		        <parameter name = 'e' type='E' jni-type='TE;'>
		        </parameter>
		      </constructor>
		    </class>
		  </package>
		</api>"        ;

            var xapi = JavaApiTestHelper.GetLoadedApi();

            JavaXmlApiImporter.ParseString(xml, xapi);

            var results = xapi.ResolveCollection();

            var t = xapi.Packages ["XXX"].Types.First(_ => _.Name == "GenericConstructors") as JavaClassModel;
            var m = t.Constructors.FirstOrDefault();

            Assert.IsNotNull(m.TypeParameters, "constructor not found");
        }
        public void AncestralOverrides()
        {
            string xml = @"<api>
  <package name='XXX'>
    <class abstract='true' deprecated='not deprecated' extends='android.app.ExpandableListActivity' extends-generic-aware='android.app.ExpandableListActivity' final='false' name='SherlockExpandableListActivity' static='false' visibility='public' jni-signature='Landroid/app/ExpandableListActivity;'>
      <method abstract='false' deprecated='not deprecated' final='false' name='addContentView' native='false' return='void' static='false' synchronized='false' visibility='public' jni-signature='(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V'>
        <parameter name = 'view' type='android.view.View' jni-type='Landroid/view/View;'>
        </parameter>
        <parameter name = 'params' type='android.view.ViewGroup.LayoutParams' jni-type='Landroid/view/ViewGroup$LayoutParams;'>
        </parameter>
      </method>
    </class>
  </package>
</api>";

            var xapi = JavaApiTestHelper.GetLoadedApi();

            JavaXmlApiImporter.ParseString(xml, xapi);

            xapi.ResolveCollection();

            var t = xapi.Packages ["XXX"].Types.First(_ => _.Name == "SherlockExpandableListActivity");
            var m = t.Methods.First(_ => _.Name == "addContentView");

            Assert.IsNotNull(m.BaseMethod, "base method not found");
        }
Ejemplo n.º 3
0
        public void InheritedGenericTypeParameters()
        {
            // Ensure we can resolve generic type parameters from parent types:
            // public class MyClass<T>
            // {
            //     public class MyNestedClass<U>
            //     {
            //       public void DoT (T value) { }
            //       public void DoU (U value) { }
            //     }
            // }
            var xml = @"
<api api-source='class-parse'>
   <package name='example' jni-name='example'>
      <class abstract='false' deprecated='not deprecated' jni-extends='Ljava/lang/Object;' extends='java.lang.Object' extends-generic-aware='java.lang.Object' final='false' name='MyClass' jni-signature='Lexample/MyClass;' source-file-name='MyClass.java' static='false' visibility='public'>
         <typeParameters>
            <typeParameter name='T' jni-classBound='Ljava/lang/Object;' classBound='java.lang.Object' interfaceBounds='' jni-interfaceBounds='' />
         </typeParameters>
         <constructor deprecated='not deprecated' final='false' name='MyClass' static='false' visibility='public' bridge='false' synthetic='false' jni-signature='()V' />
      </class>
      <class abstract='false' deprecated='not deprecated' jni-extends='Ljava/lang/Object;' extends='java.lang.Object' extends-generic-aware='java.lang.Object' final='false' name='MyClass.MyNestedClass' jni-signature='Lexample/MyClass$MyNestedClass;' source-file-name='MyClass.java' static='false' visibility='public'>
         <typeParameters>
            <typeParameter name='U' jni-classBound='Ljava/lang/Object;' classBound='java.lang.Object' interfaceBounds='' jni-interfaceBounds='' />
         </typeParameters>
         <constructor deprecated='not deprecated' final='false' name='MyClass.MyNestedClass' static='false' visibility='public' bridge='false' synthetic='false' jni-signature='(Lexample/MyClass;)V' />
         <method abstract='false' deprecated='not deprecated' final='false' name='DoT' native='false' return='void' jni-return='V' static='false' synchronized='false' visibility='public' bridge='false' synthetic='false' jni-signature='(Ljava/lang/Object;)V'>
            <parameter name='p0' type='T' jni-type='TT;' />
         </method>
         <method abstract='false' deprecated='not deprecated' final='false' name='DoU' native='false' return='void' jni-return='V' static='false' synchronized='false' visibility='public' bridge='false' synthetic='false' jni-signature='(Ljava/lang/Object;)V'>
            <parameter name='p0' type='U' jni-type='TU;' />
         </method>
      </class>
   </package>
</api>";

            var xapi = JavaApiTestHelper.GetLoadedApi();

            JavaXmlApiImporter.ParseString(xml, xapi);

            var results = xapi.ResolveCollection();

            var t = xapi.Packages ["example"].Types.First(_ => _.Name == "MyClass").NestedTypes.First(_ => _.Name == "MyNestedClass") as JavaClassModel;

            Assert.AreEqual(2, t.Methods.Count);

            Assert.IsNotNull(t.Methods.SingleOrDefault(m => m.Name == "DoT"), "Method with generic T not found");
            Assert.IsNotNull(t.Methods.SingleOrDefault(m => m.Name == "DoU"), "Method with generic U not found");
        }
        // This fixup ensures all referenced Java types can be resolved, and
        // removes types and members that rely on unresolvable Java types.
        public static void Fixup(string xmlFile, string outputXmlFile, DirectoryAssemblyResolver resolver, string [] references)
        {
            // Parse api.xml
            var type_collection = JavaXmlApiImporter.Parse(xmlFile);

            // Add in reference types from assemblies
            foreach (var reference in references.Distinct())
            {
                Report.Verbose(0, "Resolving assembly for Java type resolution: '{0}'.", reference);
                var assembly = resolver.Load(reference);

                ManagedApiImporter.Parse(assembly, type_collection);
            }

            // Run the type resolution pass
            var results = type_collection.ResolveCollection();

            OutputResults(results, xmlFile, outputXmlFile);

            // Output the adjusted xml
            JavaXmlApiExporter.Save(type_collection, outputXmlFile);
        }
 public static JavaTypeCollection GetLoadedApi()
 {
     return(JavaXmlApiImporter.Parse(ApiPath));
 }