@NotNull
  @Override
  public <Psi extends PsiElement> List<Psi> getAugments(@NotNull PsiElement element,
                                                        @NotNull final Class<Psi> type,
                                                        @Nullable String nameHint) {
    final List<Psi> emptyResult = Collections.emptyList();
    if (type != PsiClass.class && type != PsiField.class && type != PsiMethod.class || !(element instanceof PsiExtensibleClass psiClass)) {
      return emptyResult;
    }

    if (!psiClass.getLanguage().isKindOf(JavaLanguage.INSTANCE)) {
      return emptyResult;
    }

    // skip processing if disabled, or no lombok library is present
    if (!hasLombokLibrary(element.getProject()) && !DumbIncompleteModeUtil.isIncompleteModeWithLombokAnnotation(psiClass)) {
      return emptyResult;
    }
    if (psiClass.isAnnotationType() && type == PsiMethod.class) {
      return (List<Psi>)LombokAnnotationProcessor.process(psiClass, nameHint);
    }
    // Skip processing of other Annotations and Interfaces
    if (psiClass.isAnnotationType() || psiClass.isInterface()) {
      return emptyResult;
    }
    if (element instanceof PsiCompiledElement) { // skip compiled classes)
      return emptyResult;
    }

    // All invoker of AugmentProvider already make caching,
    // and we want to try to skip recursive calls completely
    DumbService dumbService = DumbService.getInstance(psiClass.getProject());
    if (DumbService.isDumb(psiClass.getProject()) && !dumbService.isAlternativeResolveEnabled()) {
      return dumbService.computeWithAlternativeResolveEnabled(()-> getPsis(psiClass, type, nameHint));
    }
    return getPsis(psiClass, type, nameHint);
  }
@NotNull
  @Override
  public <Psi extends PsiElement> List<Psi> getAugments(@NotNull PsiElement element,
                                                        @NotNull final Class<Psi> type,
                                                        @Nullable String nameHint)