@Override
  public boolean isAvailable(@NotNull Project project, @NotNull Editor editor, @NotNull PsiElement element) {
    PsiIdentifier identifier = ObjectUtils.tryCast(element, PsiIdentifier.class);
    if (identifier == null) return false;
    PsiReferenceExpression methodExpression = ObjectUtils.tryCast(identifier.getParent(), PsiReferenceExpression.class);
    if (methodExpression == null) return false;
    PsiElement parent = methodExpression.getParent();
    if (parent instanceof PsiMethodCallExpression callExpression && callExpression.getTypeArguments().length == 0) {
      JavaResolveResult result = callExpression.resolveMethodGenerics();
      if (result instanceof MethodCandidateInfo candidateInfo && candidateInfo.isApplicable()) {
        PsiMethod method = candidateInfo.getElement();
        setText(getFamilyName());
        return !method.isConstructor() && method.hasTypeParameters() && AddTypeArgumentsFix.addTypeArguments(callExpression, null) != null;
      }
    }
    return false;
  }
@Override
  public boolean isAvailable(@NotNull Project project, @NotNull Editor editor, @NotNull PsiElement element)