Gsons.java 文件源码

java
阅读 32 收藏 0 点赞 0 评论 0

项目:GitHub 作者:
public Iterable<TypeAdapterTypes> typeAdapters() {
  Map<AbstractDeclaring, GsonMirrors.TypeAdapters> mirrors = Maps.newHashMap();

  Multimap<AbstractDeclaring, ValueType> byDeclaring = HashMultimap.create();
  for (ValueType value : values().values()) {
    Protoclass protoclass = value.constitution.protoclass();
    if (protoclass.kind().isValue()) {
      Optional<AbstractDeclaring> typeAdaptersProvider = protoclass.typeAdaptersProvider();
      if (typeAdaptersProvider.isPresent()) {
        AbstractDeclaring key = typeAdaptersProvider.get();
        mirrors.put(key, key.typeAdapters().get());
        byDeclaring.put(key, value);
      } else if (protoclass.gsonTypeAdapters().isPresent()
          && protoclass.declaringType().isPresent()) {
        DeclaringType topLevel = protoclass.declaringType().get().associatedTopLevel();
        mirrors.put(topLevel, protoclass.gsonTypeAdapters().get());
        byDeclaring.put(topLevel, value);
      }
    }
  }

  ImmutableList.Builder<TypeAdapterTypes> builder = ImmutableList.builder();
  for (Entry<AbstractDeclaring, Collection<ValueType>> entry : byDeclaring.asMap().entrySet()) {
    String pack = Iterables.get(entry.getValue(), 0).$$package();
    builder.add(ImmutableTypeAdapterTypes.builder()
        .definedBy(entry.getKey())
        .mirror(mirrors.get(entry.getKey()))
        .packageGenerated(pack)
        .addAllTypes(entry.getValue())
        .build());
  }

  return builder.build();
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号