<T extends SemElement> void registerSemProvider(
    SemKey<T> key,
    BiFunction<? super PsiElement, ? super ProcessingContext, ? extends Collection<T>> provider
  );
<T extends SemElement> void registerSemProvider(
    SemKey<T> key,
    BiFunction<? super PsiElement, ? super ProcessingContext, ? extends Collection<T>> provider
  )