boolean (@NotNull AnnotationHolder holder, @NotNull GrAnnotation annotation) { final PsiAnnotation annotationCollector = GrAnnotationCollector.findAnnotationCollector(annotation); if (annotationCollector == null) { return false; } final ArrayList<GrAnnotation> annotations = new ArrayList<>(); final Set<String> usedAttributes = GrAnnotationCollector.collectAnnotations(annotations, annotation, annotationCollector); for (GrAnnotation aliased : annotations) { Pair<PsiElement, @InspectionMessage String> r = AnnotationChecker.checkAnnotationArgumentList(aliased, holder); if (r != null && r.getSecond() != null) { AnnotationBuilder builder = holder.newAnnotation(HighlightSeverity.ERROR, r.getSecond()); PsiElement element = r.getFirst(); PsiElement highlightElement = element != null && PsiTreeUtil.isAncestor(annotation, element, true) ? element : null; if (highlightElement != null) { builder = builder.range(highlightElement); } builder.create(); return true; } } final GrAnnotationNameValuePair[] attributes = annotation.getParameterList().getAttributes(); final String aliasQName = annotation.getQualifiedName(); if (attributes.length == 1 && attributes[0].getNameIdentifierGroovy() == null && !usedAttributes.contains("value")) { holder.newAnnotation(HighlightSeverity.ERROR, GroovyBundle.message("at.interface.0.does.not.contain.attribute", aliasQName, "value")).range(attributes[0]).create(); } for (GrAnnotationNameValuePair pair : attributes) { final PsiElement nameIdentifier = pair.getNameIdentifierGroovy(); if (nameIdentifier != null && !usedAttributes.contains(pair.getName())) { holder.newAnnotation(HighlightSeverity.ERROR, GroovyBundle.message("at.interface.0.does.not.contain.attribute", aliasQName, pair.getName())).range(nameIdentifier).create(); } } return true; }