Set<String> (@NotNull List<? super GrAnnotation> list, @NotNull GrAnnotation alias, @NotNull PsiAnnotation annotationCollector) { final PsiModifierList modifierList = (PsiModifierList)annotationCollector.getParent(); Map<String, Map<String, PsiNameValuePair>> annotations = new LinkedHashMap<>(); collectAliasedAnnotationsFromAnnotationCollectorValueAttribute(annotationCollector, annotations); collectAliasedAnnotationsFromAnnotationCollectorAnnotations(modifierList, annotations); final PsiManager manager = alias.getManager(); final GrAnnotationNameValuePair[] attributes = alias.getParameterList().getAttributes(); Set<String> allUsedAttrs = new LinkedHashSet<>(); for (Map.Entry<String, Map<String, PsiNameValuePair>> entry : annotations.entrySet()) { final String qname = entry.getKey(); if (qname.equals(alias.getQualifiedName())) { continue; } final PsiClass resolved = JavaPsiFacade.getInstance(alias.getProject()).findClass(qname, alias.getResolveScope()); if (resolved == null) continue; final GrLightAnnotation annotation = new GrLightAnnotation(manager, alias.getLanguage(), qname, (PsiModifierList)alias.getParent()); Set<String> usedAttrs = new LinkedHashSet<>(); for (GrAnnotationNameValuePair attr : attributes) { final String name = attr.getName() != null ? attr.getName() : "value"; if (resolved.findMethodsByName(name, false).length > 0) { annotation.addAttribute(attr); allUsedAttrs.add(name); usedAttrs.add(name); } } final Map<String, PsiNameValuePair> defaults = entry.getValue(); for (Map.Entry<String, PsiNameValuePair> defa : defaults.entrySet()) { if (!usedAttrs.contains(defa.getKey())) { annotation.addAttribute(defa.getValue()); } } list.add(annotation); } return allUsedAttrs; }