@Override
  public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element,
                                                         @NotNull ProcessingContext context) {
    final XmlAttributeValue xmlAttributeValue = (XmlAttributeValue)element;
    final String value = xmlAttributeValue.getValue();
    if (JavaFxPsiUtil.isIncorrectExpressionBinding(value)) {
      return PsiReference.EMPTY_ARRAY;
    }
    final XmlTag currentTag = PsiTreeUtil.getParentOfType(xmlAttributeValue, XmlTag.class);
    final Map<String, XmlAttributeValue> fileIds = JavaFxPsiUtil.collectFileIds(currentTag);

    if (JavaFxPsiUtil.isExpressionBinding(value)) {
      return getExpressionReferences(element, xmlAttributeValue, value, fileIds);
    }
    if (value.startsWith("$")) {
      return getSinglePropertyReferences(xmlAttributeValue, value, fileIds);
    }
    final Set<String> acceptableIds = new HashSet<>();
    if (currentTag != null) {
      final XmlTag parentTag = currentTag.getParentTag();
      for (final String id : fileIds.keySet()) {
        final XmlAttributeValue resolvedAttrValue = fileIds.get(id);
        if (JavaFxPsiUtil.isClassAcceptable(parentTag, JavaFxPsiUtil.getTagClass(resolvedAttrValue))) {
          acceptableIds.add(id);
        }
      }
    }
    return new PsiReference[]{new JavaFxIdReferenceBase(xmlAttributeValue, fileIds, acceptableIds, value)};
  }
@Override
  public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element,
                                                         @NotNull ProcessingContext context)