可以将Guice配置为隐藏堆栈跟踪中的类路径吗?

时间:2012-01-07 02:27:37

标签: debugging guice stack-trace readability

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 个答案:

答案 0 :(得分:2)

所以答案是否定的。

如果你看一下guice source code,你会发现负责构建错误消息的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();
  }