@Override
    @Value.Lazy
    public Optional<String[]> depluralize() {
      @Nullable String[] dictionary = null;
      Optional<DeclaringPackage> parent = namedParentPackage();
      if (parent.isPresent()) {
        Optional<String[]> depluralize = parent.get().depluralize();
        if (depluralize.isPresent()) {
          dictionary = concat(dictionary, depluralize.get());
        }
      }
      Optional<String[]> depluralize = super.depluralize();
      if (depluralize.isPresent()) {
        dictionary = concat(dictionary, depluralize.get());
      }
      return Optional.fromNullable(dictionary);
    }
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