Changeset 1820
- Timestamp:
- 05/30/07 23:49:09 (1 year ago)
- Files:
-
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/wsdl/soap/classDefCreator.rb
r1805 r1820 106 106 107 107 def dump_complextype 108 definitions = @complextypes.collect { |type| 109 dump_complextypedef(type.name, type) if type.abstract 110 }.compact 111 definitions += @complextypes.collect { |type| 112 dump_complextypedef(type.name, type) unless type.abstract 113 }.compact 114 definitions.join("\n") 108 definitions = sort_dependency(@complextypes).collect { |type| 109 dump_complextypedef(type.name, type) 110 }.compact.join("\n") 115 111 end 116 112 … … 372 368 end 373 369 end 370 371 def sort_dependency(types) 372 dep = {} 373 root = [] 374 types.each do |type| 375 if type.complexcontent and (base = type.complexcontent.base) 376 dep[base] ||= [] 377 dep[base] << type 378 else 379 root << type 380 end 381 end 382 sorted = [] 383 root.each do |type| 384 sorted.concat(collect_dependency(type, dep)) 385 dep.delete(type.name) 386 end 387 sorted.concat(dep.values.flatten) 388 sorted 389 end 390 391 def collect_dependency(type, dep) 392 result = [type] 393 return result unless dep.key?(type.name) 394 dep[type.name].each do |deptype| 395 result.concat(collect_dependency(deptype, dep)) 396 end 397 result 398 end 374 399 end 375 400