# File lib/ruote/util/tree.rb, line 73
  def self.compact_tree(tree)

    tree = tree.dup

    if %w[ participant subprocess ].include?(tree[0])

      ref =
        tree[1].delete('ref') ||
        begin
          kv = tree[1].find { |k, v| v == nil }
          tree[1].delete(kv[0])
          kv[0]
        end

      tree[0] = ref

    else

      tree[2] = tree[2].collect { |t| compact_tree(t) }
    end

    tree
  end