Issue 9140: FullInterfaceDescription and base_interfaces question (corba-rtf) Source: Progress Software (Mr. Steve Vinoski, steve.vinoski(at)iona.com) Nature: Uncategorized Issue Severity: Summary: Regarding the base_interfaces attribute of the Interface Repository (IFR) InterfaceDef and the ExtInterfaceDef interfaces, the CORBA spec has only this to say: "The base_interfaces attribute lists all the interfaces from which this interface inherits." Does that sentence mean that the base_interfaces attribute lists only immediate base interfaces, or does it list *all* base interfaces, i.e., the transitive closure of the inheritance graph (minus the implied Object interface at the root)? I believe it is supposed to be a list of only immediate interfaces, as one can make further calls on the IFR to obtain more information about those bases, including their bases. However, both the FullInterfaceDescription and the ExtFullInterfaceDescription structures also have a base_interfaces member, which is specified as a sequence of repository IDs. Unfortunately, the specification contains no description whatsoever for this member. I argue that unlike the base_interfaces attribute described above, this member can't list only the immediate base interfaces. I believe that the base_interfaces member of the FullInterfaceDescription and the ExtFullInterfaceDescription structures should contain the transitive closure of all base interfaces. These structures are intended to supply *full* interface descriptions, after all. Specifying the base_interfaces as I suggest would match the operations and attributes fields of the same structs, which are already explicitly specified to contain all operations and attributes respectively from the transitive closure of the inheritance graph. Note also that if base_interfaces does not contain the transitive closure of all base interfaces, there's no way to obtain the information from TypeCodes, since names do not appear in TypeCodes in minimum CORBA. I therefore propose that the third paragraph of section 10.5.24.1 of CORBA 3.0.2 be changed from this: "The describe_interface operation returns a FullInterfaceDescription describing the interface, including its operations and attributes. The operations and attributes fields of the FullInterfaceDescription structure include descriptions of all of the operations and attributes in the transitive closure of the inheritance graph of the interface being described." to add a sentence defining the base_interfaces member, like this: "The describe_interface operation returns a FullInterfaceDescription describing the interface, including its operations and attributes. The operations and attributes fields of the FullInterfaceDescription structure include descriptions of all of the operations and attributes in the transitive closure of the inheritance graph of the interface being described. The base_interfaces field of the FullInterfaceDescription structure includes the repository IDs of all the base interfaces in the transitive closure of the inheritance graph of the interface being described, except for the repository ID of the implied Object base interface." Note that even if this change is made, the base_interfaces attribute of InterfaceDef and ExtInterfaceDef can (and should) remain as listing only immediate bases, assuming that's what the spec's original intent was. Resolution: Revised Text: Actions taken: November 7, 2005: received issue April 11, 2012: Deferred Discussion: End of Annotations:===== c: Rebecca Bergersen From: Stephen Vinoski Subject: FullInterfaceDescription and base_interfaces question Date: Mon, 7 Nov 2005 11:21:17 -0500 To: corba-rtf@omg.org, issues@omg.org X-Mailer: Apple Mail (2.746.2) X-OriginalArrivalTime: 07 Nov 2005 16:21:19.0320 (UTC) FILETIME=[49003D80:01C5E3B7] Regarding the base_interfaces attribute of the Interface Repository (IFR) InterfaceDef and the ExtInterfaceDef interfaces, the CORBA spec has only this to say: "The base_interfaces attribute lists all the interfaces from which this interface inherits." Does that sentence mean that the base_interfaces attribute lists only immediate base interfaces, or does it list *all* base interfaces, i.e., the transitive closure of the inheritance graph (minus the implied Object interface at the root)? I believe it is supposed to be a list of only immediate interfaces, as one can make further calls on the IFR to obtain more information about those bases, including their bases. However, both the FullInterfaceDescription and the ExtFullInterfaceDescription structures also have a base_interfaces member, which is specified as a sequence of repository IDs. Unfortunately, the specification contains no description whatsoever for this member. I argue that unlike the base_interfaces attribute described above, this member can't list only the immediate base interfaces. I believe that the base_interfaces member of the FullInterfaceDescription and the ExtFullInterfaceDescription structures should contain the transitive closure of all base interfaces. These structures are intended to supply *full* interface descriptions, after all. Specifying the base_interfaces as I suggest would match the operations and attributes fields of the same structs, which are already explicitly specified to contain all operations and attributes respectively from the transitive closure of the inheritance graph. Note also that if base_interfaces does not contain the transitive closure of all base interfaces, there's no way to obtain the information from TypeCodes, since names do not appear in TypeCodes in minimum CORBA. I therefore propose that the third paragraph of section 10.5.24.1 of CORBA 3.0.2 be changed from this: "The describe_interface operation returns a FullInterfaceDescription describing the interface, including its operations and attributes. The operations and attributes fields of the FullInterfaceDescription structure include descriptions of all of the operations and attributes in the transitive closure of the inheritance graph of the interface being described." to add a sentence defining the base_interfaces member, like this: "The describe_interface operation returns a FullInterfaceDescription describing the interface, including its operations and attributes. The operations and attributes fields of the FullInterfaceDescription structure include descriptions of all of the operations and attributes in the transitive closure of the inheritance graph of the interface being described. The base_interfaces field of the FullInterfaceDescription structure includes the repository IDs of all the base interfaces in the transitive closure of the inheritance graph of the interface being described, except for the repository ID of the implied Object base interface." Note that even if this change is made, the base_interfaces attribute of InterfaceDef and ExtInterfaceDef can (and should) remain as listing only immediate bases, assuming that's what the spec's original intent was. --steve