Quintiq file version 2.0 #parent: #root Method GetLeafTypes ( internal[Type] root, internal[Type] excludetype ) as structured[internal[Type]] id:Method_LibOpt_DialogConditionalTypes_GetLeafTypes { #keys: '[143908.0.758167613]' Body: [* // Get all leaf types of the 'root' type. // A type is a leaf type of some root type if the leaf type is non-abstract and if the type is an (indirect) subtype of the root type. // The 'excludetype' type (and all subclasses of that type) are excluded from the set of leaf types. leafs := construct( structured[internal[Type]] ); // The LibOpt_Breakpoint type and all LibOpt_DatasetCopyConditionalNotSelectable subtypes (e.g. LibOpt_DatasetCopyUnconditional) are excluded because of this if-statement. if( root <> excludetype ) { // recursion end: roottype is a leaf. if( root.Specializations( relsize ) = 0 ) { leafs.Add( root ); } else { // recursive calls: the root's leafs are the union of its childrens' leafs: traverse( root, Specializations, child ) { leafs := leafs.Union( this.GetLeafTypes( child, excludetype ) ); } } } return & leafs; *] ReturnsOwning: true }