var key = ""; if( structKeyExists(arguments.metadata,"name") AND listFindNoCase(accumulator,arguments.metaData.name) eq 0 ){ accumulator = accumulator & arguments.metaData.name & ","; } if(structKeyExists(arguments.metaData,"extends")){ //why, oh why, is the structure different for interfaces vs. extends? For F**k's sake! if( structKeyExists( metadata.extends, "name" ) ){ accumulator = buildInheritanceTree(metaData.extends, accumulator); }else{ accumulator = buildInheritanceTree(metadata.extends[ structKeyList(metadata.extends) ], accumulator); } } if(structKeyExists(arguments.metaData,"implements")){ for(key in arguments.metadata.implements){ accumulator = buildInheritanceTree(metaData.implements[ key ], accumulator); } } return accumulator;