@NotNull
  public static <T extends PsiModifierListOwner> List<T> getSuperAnnotationOwners(@NotNull T element) {
    PsiModifierListOwner listOwner = AnnotationCacheOwnerNormalizer.normalize(element);
    return CachedValuesManager.getCachedValue(listOwner, () -> {
      Set<PsiModifierListOwner> result = new LinkedHashSet<>();
      if (listOwner instanceof PsiMethod) {
        if (!listOwner.hasModifierProperty(PsiModifier.STATIC)) {
          collectSuperMethods(result, ((PsiMethod)listOwner).getHierarchicalMethodSignature(), listOwner,
                              JavaPsiFacade.getInstance(listOwner.getProject()).getResolveHelper());
        }
      }
      else if (listOwner instanceof PsiClass) {
        InheritanceUtil.processSupers((PsiClass)listOwner, false, Processors.cancelableCollectProcessor(result));
      }
      else if (listOwner instanceof PsiParameter) {
        collectSuperParameters(result, (PsiParameter)listOwner);
      }

      List<T> list;
      if(result.isEmpty()) {
        list = Collections.emptyList();
      }
      else {
        PsiModifierListOwner[] array = result.toArray(new PsiModifierListOwner[0]);
        //noinspection unchecked
        list = Arrays.asList((T[])array);
      }

      return CachedValueProvider.Result.create(list, PsiModificationTracker.MODIFICATION_COUNT);
    });
  }
@NotNull
  public static <T extends PsiModifierListOwner> List<T> getSuperAnnotationOwners(@NotNull T element)