JavaTypeAnalyzer.java 文件源码

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

项目:jaxrs-analyzer 作者:
private Map<String, TypeIdentifier> analyzeClass(final String type, final Class<?> clazz) {
    if (clazz == null || isJDKType(type))
        return Collections.emptyMap();

    final XmlAccessType value = getXmlAccessType(clazz);

    // TODO analyze & test annotation inheritance
    ignoredFieldNames.clear();
    final List<Field> relevantFields = Stream.of(clazz.getDeclaredFields()).filter(f -> isRelevant(f, value)).collect(Collectors.toList());
    final List<Method> relevantGetters = Stream.of(clazz.getDeclaredMethods()).filter(m -> isRelevant(m, value)).collect(Collectors.toList());

    final Map<String, TypeIdentifier> properties = new HashMap<>();

    final Stream<Class<?>> allSuperTypes = Stream.concat(Stream.of(clazz.getInterfaces()), Stream.of(clazz.getSuperclass()));
    allSuperTypes.filter(Objects::nonNull).map(Type::getDescriptor).map(t -> analyzeClass(t, loadClassFromType(t))).forEach(properties::putAll);

    Stream.concat(relevantFields.stream().map(f -> mapField(f, type)), relevantGetters.stream().map(g -> mapGetter(g, type)))
            .filter(Objects::nonNull).forEach(p -> {
        properties.put(p.getLeft(), TypeIdentifier.ofType(p.getRight()));
        analyze(p.getRight());
    });

    return properties;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号