@Override
  public void annotate(final @NotNull PsiElement element, @NotNull AnnotationHolder holder) {
    final PsiFile containingFile = holder.getCurrentAnnotationSession().getFile();
    if (!JavaFxFileTypeFactory.isFxml(containingFile)) return;
    if (element instanceof XmlAttributeValue) {
      final String value = ((XmlAttributeValue)element).getValue();
      if (!JavaFxPsiUtil.isExpressionBinding(value) && !JavaFxPsiUtil.isIncorrectExpressionBinding(value)) {
        final PsiReference[] references = element.getReferences();
        for (PsiReference reference : references) {
          if (reference instanceof JavaFxColorReference) {
            attachColorIcon(element, holder, StringUtil.unquoteString(element.getText()));
            continue;
          }
          final PsiElement resolve = reference.resolve();
          if (resolve instanceof PsiMember) {
            if (!JavaFxPsiUtil.isVisibleInFxml((PsiMember)resolve)) {
              final String symbolPresentation = "'" + SymbolPresentationUtil.getSymbolPresentableText(resolve) + "'";
              AnnotationBuilder builder = holder.newAnnotation(HighlightSeverity.ERROR, symbolPresentation +
                                                                                        (resolve instanceof PsiClass
                                                                                         ? JavaFXBundle.message("javafx.annotator.should.be.public")
                                                                                         : JavaFXBundle.message("javafx.annotator.should.be.public.or.fxml.annotated")));
              if (!(resolve instanceof PsiClass)) {
                AddAnnotationFix fix = new AddAnnotationFix(JavaFxCommonNames.JAVAFX_FXML_ANNOTATION, (PsiMember)resolve,
                                                            ArrayUtilRt.EMPTY_STRING_ARRAY);
                builder = builder.withFix(fix)
                  .newFix(fix).batch()
                  .registerFix();
              }
              builder.create();
            }
          }
        }
      }
    } else if (element instanceof XmlAttribute attribute) {
      final String attributeName = attribute.getName();
      if (!FxmlConstants.FX_BUILT_IN_ATTRIBUTES.contains(attributeName) &&
          !attribute.isNamespaceDeclaration() &&
          JavaFxPsiUtil.isReadOnly(attributeName, attribute.getParent())) {
        holder.newAnnotation(HighlightSeverity.ERROR, JavaFXBundle.message("javafx.annotator.property.is.read.only", attributeName)).range(element.getNavigationElement()).create();
      }
      if (FxmlConstants.SOURCE.equals(attributeName)) {
        final XmlAttributeValue valueElement = attribute.getValueElement();
        if (valueElement != null) {
          final XmlTag xmlTag = attribute.getParent();
          if (xmlTag != null) {
            final XmlTag referencedTag = JavaFxBuiltInTagDescriptor.getReferencedTag(xmlTag);
            if (referencedTag != null) {
              if (referencedTag.getTextOffset() > xmlTag.getTextOffset()) {
                holder.newAnnotation(HighlightSeverity.ERROR, JavaFXBundle.message("javafx.annotator.value.not.found", valueElement.getValue())).range(valueElement.getValueTextRange()).create();
              } else if (xmlTag.getParentTag() == referencedTag.getParentTag()) {
                holder.newAnnotation(HighlightSeverity.ERROR, JavaFXBundle.message("javafx.annotator.duplicate.child.added")).range(valueElement.getValueTextRange())
                .withFix(new JavaFxWrapWithDefineIntention(referencedTag, valueElement.getValue())).create();
              }
            }
          }
        }
      }
    }
    else if (element instanceof XmlTag) {
      if (FxmlConstants.FX_SCRIPT.equals(((XmlTag)element).getName())) {
        final XmlTagValue tagValue = ((XmlTag)element).getValue();
        if (!StringUtil.isEmptyOrSpaces(tagValue.getText())) {
          final List<String> langs = JavaFxPsiUtil.parseInjectedLanguages((XmlFile)element.getContainingFile());
          if (langs.isEmpty()) {
            final ASTNode openTag = element.getNode().findChildByType(XmlTokenType.XML_NAME);

              holder.newAnnotation(HighlightSeverity.ERROR, JavaFXBundle.message("javafx.annotator.page.language.not.specified")).range(openTag != null ? openTag.getPsi() : element)
            .withFix(new JavaFxInjectPageLanguageIntention()).create();
          }
        }
      }
    }
  }
@Override
  public void annotate(final @NotNull PsiElement element, @NotNull AnnotationHolder holder)