Можно ли настроить Guice, чтобы скрыть путь классов в следах стека? - PullRequest
2 голосов
/ 07 января 2012

Следы стека Guice могут быть настолько многословными, что их очень больно читать.Вот пример:

1) No implementation for java.util.Set<com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.helpers.databaseitem.itemmanipulators.ItemManipulator<com.mydomain.myapp.flash.Cat>> annotated with @com.google.inject.assistedinject.Assisted(value=) was bound.
  while locating java.util.Set<com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.helpers.databaseitem.itemmanipulators.ItemManipulator<com.mydomain.myapp.flash.Cat>> annotated with @com.google.inject.assistedinject.Assisted(value=)

...

Если бы я мог скрыть путь к классу, он бы выглядел следующим образом:

1) No implementation for Set<ItemManipulator<Cat>> annotated with @Assisted(value=) was bound.
  while locating Set<ItemManipulator<Cat>> annotated with @Assisted(value=)

Есть ли способ настроить Guiceсделать это?

1 Ответ

2 голосов
/ 07 января 2012

Так что ответ - нет.

Если вы посмотрите на исходный код , вы найдете com.google.inject.internal.Errors класс, который отвечает за создание сообщений об ошибках. В этом классе кодируется, что Key преобразует следующим образом:

  new Converter<Key>(Key.class) {
    public String toString(Key key) {
      if (key.getAnnotationType() != null) {
        return key.getTypeLiteral() + " annotated with "
            + (key.getAnnotation() != null ? key.getAnnotation() : key.getAnnotationType());
      } else {
        return key.getTypeLiteral().toString();
      }
    }
  }

Следующий шаг - взглянуть на TypeLiteral#toString метод:

  @Override public final String toString() {
    return MoreTypes.typeToString(type);
  }

Где MoreTypes#typeToString - статический метод, который нельзя настроить

  public static String typeToString(Type type) {
    return type instanceof Class ? ((Class) type).getName() : type.toString();
  }
...