def fields_hash
      @fields_hash ||=
        begin
          field_sets_hash = Hash.new { |h, k| h[k] = Set.new }
          @types.each do |type|
            Setup.for(type).fields.each do |field|
              field_sets_hash[field.name.to_sym] << field
            end
          end
          fields_hash = {}
          field_sets_hash.each_pair do |field_name, set|
            if set.length == 1
              fields_hash[field_name] = set.to_a.first
            end
          end
          fields_hash
        end
    end
def fields_hash
      @fields_hash ||=
        begin
          field_sets_hash = Hash.new { |h, k| h[k] = Set.new }
          @types.each do |type|
            Setup.for(type).fields.each do |field|
              field_sets_hash[field.name.to_sym] << field
            end
          end
          fields_hash = {}
          field_sets_hash.each_pair do |field_name, set|
            if set.length == 1
              fields_hash[field_name] = set.to_a.first
            end
          end
          fields_hash
        end
    end
Return a hash of field names to field objects, containing all fields
 that are common to all of the classes enclosed. In order for fields
 to be common, they must be of the same type and have the same
 value for allow_multiple? and stored?. This method is memoized.

 ==== Returns

 Hash:: field names keyed to field objects