@Value.Lazy
    public Optional<ValueImmutableInfo> features() {
      Optional<ValueImmutableInfo> immutableAnnotation =
          ImmutableMirror.find(element()).transform(ToImmutableInfo.FUNCTION);

      if (immutableAnnotation.isPresent()) {
        return immutableAnnotation;
      }

      for (String a : environment().round().customImmutableAnnotations()) {
        if (isAnnotatedWith(element(), a)) {
          return Optional.of(environment().defaultStyles().defaults());
        }
      }

      return Optional.absent();
    }
returns this class if it's top level or enclosing top level type.
@return accossiated top level type.
value-processor/src/org/immutables/value/processor/meta/Proto.java