private TypeMirror extractSpecificType(TypeMirror type) { TypeMirror specificType = removeWildcard(type); return typeUtils.asElement(specificType).getAnnotationMirrors().stream() .filter(a -> a.getAnnotationType().toString().equals(GenerateDiffFunction.class.getName())) .findFirst() .map(annotation -> annotation.getElementValues().entrySet().stream() .filter(entry -> "defaultImpl".equals(entry.getKey().getSimpleName().toString())) .map(Map.Entry::getValue) .map(AnnotationValue::getValue) .filter(val -> !val.equals(Object.class.getName())) .findFirst() .map(val -> elementUtils.getTypeElement(val.toString()).asType()) .orElse(specificType)) .orElse(specificType); }
values.put(entry.getKey().getSimpleName().toString(), translate(entry.getValue().getValue())); return SezpozFactory.createAnnConst(am.getAnnotationType().toString(), values);// XXX