@Override
    @Value.Lazy
    public Optional<DataMirror> datatypeEnabled() {
      Optional<DataMirror> datatypeMarker = super.datatypeEnabled();
      if (datatypeMarker.isPresent()) {
        return datatypeMarker;
      }
      Optional<DeclaringPackage> parent = namedParentPackage();
      if (parent.isPresent()) {
        return parent.get().datatypeEnabled();
      }
      return Optional.absent();
    }
Name is the only equivalence attribute. Basically packages are interned by name.
@return package name
value-processor/src/org/immutables/value/processor/meta/Proto.java