/**
   * Walks to the enclosing type's simple names and applies naming convention. This shortcut/fix
   * shows deficiency of model (it's probably more complicated than needed).
   *
   * @return enclosing immutable name
   */
  @Value.Lazy
  String typeImmutableEnclosingSimpleName() {
    DeclaringType declaringType = protoclass().enclosingOf().get();
    String enclosingSimpleName = declaringType.element().getSimpleName().toString();
    String enclosingRawName = names().rawFromAbstract(enclosingSimpleName);
    // Here we checking for having both enclosing and value
    // if we had protoclass it would be kind().isEnclosing() && kind().isValue()
    Naming naming =
        declaringType.isImmutable()
            ? names().namings.typeImmutable
            : names().namings.typeImmutableEnclosing;

    return naming.apply(enclosingRawName);
  }