Example #1
0
    @Value.Lazy
    public Optional<AbstractDeclaring> typeAdaptersProvider() {
      Optional<DeclaringType> typeDefining =
          declaringType().isPresent()
              ? Optional.of(declaringType().get().associatedTopLevel())
              : Optional.<DeclaringType>absent();

      Optional<TypeAdaptersMirror> typeDefined =
          typeDefining.isPresent()
              ? typeDefining.get().typeAdapters()
              : Optional.<TypeAdaptersMirror>absent();

      Optional<TypeAdaptersMirror> packageDefined = packageOf().typeAdapters();

      if (packageDefined.isPresent()) {
        if (typeDefined.isPresent()) {
          report()
              .withElement(typeDefining.get().element())
              .annotationNamed(TypeAdaptersMirror.simpleName())
              .warning(
                  "@%s is also used on the package, this type level annotation is ignored",
                  TypeAdaptersMirror.simpleName());
        }
        return Optional.<AbstractDeclaring>of(packageOf());
      }

      return typeDefined.isPresent()
          ? Optional.<AbstractDeclaring>of(typeDefining.get())
          : Optional.<AbstractDeclaring>absent();
    }
Example #2
0
    @Value.Lazy
    public Optional<RepositoryMirror> repository() {
      if (!declaringType().isPresent()) {
        return Optional.absent();
      }

      Optional<RepositoryMirror> repositoryMirror =
          kind().isIncluded() || kind().isDefinedValue()
              ? declaringType().get().repository()
              : Optional.<RepositoryMirror>absent();

      if (repositoryMirror.isPresent() && !typeAdaptersProvider().isPresent()) {
        if (kind().isNested()) {
          report()
              .annotationNamed(RepositoryMirror.simpleName())
              .error(
                  "@Mongo.%s should also have associated @Gson.%s on a top level type.",
                  RepositoryMirror.simpleName(), TypeAdaptersMirror.simpleName());
        } else {
          report()
              .annotationNamed(RepositoryMirror.simpleName())
              .warning(
                  "@Mongo.%s types better have explicit @Gson.%s annotation"
                      + " be placed on the class or enclosing package."
                      + " It is also common to forget to generate type adapters"
                      + " for nested document classes, which will fallback to reflective Gson adapter otherwise.",
                  RepositoryMirror.simpleName(), TypeAdaptersMirror.simpleName());
        }
      }

      return repositoryMirror;
    }