binding-tools-for-swift icon indicating copy to clipboard operation
binding-tools-for-swift copied to clipboard

[DylibBinder] Generic Parameter Issue

Open tj-devel709 opened this issue 3 years ago • 0 comments

In DynamicXmlTests - TestGenericMethodInGenericClass the Generic parameters get a little wonky.

DylibBinder's xml

<?xml version="1.0" encoding="utf-8"?>
<xamreflect version="1.0">
   <modulelist>
      <module name="SomeModule" swiftVersion="5.0">
         <typedeclaration kind="class" name="Foo" accessibility="Public" isDeprecated="false" isUnavailable="false" isObjC="false" isFinal="false">
            <members>
               <func name=".ctor" returnType="SomeModule.Foo&lt;T0&gt;" isProperty="false" hasThrows="false" isStatic="false" isMutating="false" operatorKind="None" accessibility="Public" isDeprecated="false" isUnavailable="false" isFinal="false" isOptional="false" isRequired="false" isConvenienceInit="false" objcSelector="" isPossiblyIncomplete="false">
                  <parameterlists>
                     <parameterlist index="0">
                        <parameter index="0" type="inout SomeModule.Foo&lt;T0&gt;.Type" publicName="" privateName="self" isVariadic="false" />
                     </parameterlist>
                     <parameterlist index="1">
                        <parameter index="0" type="T0" publicName="a" privateName="a" isVariadic="false" />
                     </parameterlist>
                  </parameterlists>
               </func>
               <func name=".nctor" returnType="SomeModule.Foo&lt;T0&gt;" isProperty="false" hasThrows="false" isStatic="false" isMutating="false" operatorKind="None" accessibility="Public" isDeprecated="false" isUnavailable="false" isFinal="false" isOptional="false" isRequired="false" isConvenienceInit="false" objcSelector="" isPossiblyIncomplete="false">
                  <parameterlists>
                     <parameterlist index="0">
                        <parameter index="0" type="inout SomeModule.Foo&lt;T0&gt;.Type" publicName="" privateName="self" isVariadic="false" />
                     </parameterlist>
                     <parameterlist index="1">
                        <parameter index="0" type="T0" publicName="a" privateName="a" isVariadic="false" />
                     </parameterlist>
                  </parameterlists>
               </func>
               <func name="printIt" returnType="()" isProperty="false" hasThrows="false" isStatic="false" isMutating="false" operatorKind="None" accessibility="Public" isDeprecated="false" isUnavailable="false" isFinal="false" isOptional="false" isRequired="false" isConvenienceInit="false" objcSelector="" isPossiblyIncomplete="false">
                  <parameterlists>
                     <parameterlist index="0">
                        <parameter index="0" type="inout SomeModule.Foo&lt;T0&gt;" publicName="" privateName="self" isVariadic="false" />
                     </parameterlist>
                     <parameterlist index="1">
                        <parameter index="0" type="U0" publicName="a" privateName="a" isVariadic="false" />
                     </parameterlist>
                  </parameterlists>
                  <GenericParameterCollection>
                     <param name="U0" />
                  </GenericParameterCollection>
               </func>
            </members>
            <GenericParameterCollection>
               <param name="T0" />
            </GenericParameterCollection>
         </typedeclaration>
         <func name="Foo" returnType="SomeModule.Foo&lt;T0&gt;" isProperty="false" hasThrows="false" isStatic="false" isMutating="false" operatorKind="None" accessibility="Public" isDeprecated="false" isUnavailable="false" isFinal="false" isOptional="false" isRequired="false" isConvenienceInit="false" objcSelector="" isPossiblyIncomplete="false">
            <parameterlists>
               <parameterlist index="0">
                  <parameter index="0" type="T0" publicName="a" privateName="a" isVariadic="false" />
               </parameterlist>
            </parameterlists>
         </func>
      </module>
   </modulelist>
</xamreflect>

SwiftInterfaceParser's xml

<xamreflect version="1.0">
  <modulelist>
    <module name="SomeModule" swiftVersion="5.3.2">
      <typedeclaration kind="class" name="Foo" accessibility="Public" isObjC="false" isFinal="true" isDeprecated="false" isUnavailable="false">
        <members>
          <func name=".ctor" returnType="SomeModule.Foo&lt;T&gt;" accessibility="Public" isStatic="true" hasThrows="false" isFinal="false" isOptional="false" isConvenienceInit="false" isDeprecated="false" isUnavailable="false" isRequired="false" isProperty="false" isMutating="false" operatorKind="None" objcSelector="initWithA:">
            <parameterlists>
              <parameterlist index="0">
                <parameter type="SomeModule.Foo&lt;T&gt;.Type" index="0" publicName="self" privateName="self" isVariadic="false" />
              </parameterlist>
              <parameterlist index="1">
                <parameter index="0" type="T" publicName="a" privateName="a" isVariadic="false" />
              </parameterlist>
            </parameterlists>
          </func>
          <func name="printIt" returnType="()" accessibility="Public" isStatic="false" hasThrows="false" isFinal="false" isOptional="false" isConvenienceInit="false" isDeprecated="false" isUnavailable="false" isRequired="false" isProperty="false" isMutating="false" operatorKind="None" objcSelector="printItWithA:">
            <genericparameters>
              <param name="T" />
              <param name="U" />
            </genericparameters>
            <parameterlists>
              <parameterlist index="0">
                <parameter type="SomeModule.Foo&lt;T&gt;" index="0" publicName="self" privateName="self" isVariadic="false" />
              </parameterlist>
              <parameterlist index="1">
                <parameter index="0" type="U" publicName="a" privateName="a" isVariadic="false" />
              </parameterlist>
            </parameterlists>
          </func>
          <func name=".dtor" returnType="()" accessibility="public" isStatic="false" hasThrows="false" isFinal="false" isOptional="false" isConvenienceInit="false" isDeprecated="false" isUnavailable="false" isRequired="false" isProperty="false" isMutating="false" operatorKind="None" objcSelector="dealloc">
            <attributes>
              <attribute name="objc" />
            </attributes>
            <parameterlists>
              <parameterlist index="0">
                <parameter type="SomeModule.Foo&lt;T&gt;.Type" index="0" publicName="self" privateName="self" isVariadic="false" />
              </parameterlist>
              <parameterlist index="1" />
            </parameterlists>
          </func>
        </members>
        <genericparameters>
          <param name="T" />
        </genericparameters>
      </typedeclaration>
    </module>
  </modulelist>
</xamreflect>

Error: // wrong signature //Expected string length 48 but was 43. Strings differ at index 29. // Expected: "Public SomeModule.Foo.printIt<T, U> (a: U) -> ()" // But was: "Public SomeModule.Foo.printIt (a: U0) -> ()" // ----------------------------------------^

tj-devel709 avatar Jun 05 '21 01:06 tj-devel709