private static @Nullable PsiSubstitutor getTagClassSubstitutor(@NotNull XmlAttribute xmlAttribute, @NotNull PsiClass controllerClass) {
    final XmlTag xmlTag = xmlAttribute.getParent();
    final PsiClass tagClass = getTagClass(xmlTag);
    if (tagClass != null) {
      final String tagFieldName = xmlTag.getAttributeValue(FxmlConstants.FX_ID);
      if (!StringUtil.isEmpty(tagFieldName)) {
        final PsiField tagField = controllerClass.findFieldByName(tagFieldName, true);
        if (tagField != null && !tagField.hasModifierProperty(PsiModifier.STATIC) && isVisibleInFxml(tagField)) {
          final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(tagField.getType());
          final PsiClass resolvedClass = resolveResult.getElement();
          if (resolvedClass != null) {
            return TypeConversionUtil.getClassSubstitutor(tagClass, resolvedClass, resolveResult.getSubstitutor());
          }
        }
      }
    }
    return null;
  }
private static @Nullable PsiSubstitutor getTagClassSubstitutor(@NotNull XmlAttribute xmlAttribute, @NotNull PsiClass controllerClass)