List<PsiTypeParameter> (@NotNull PsiSubstitutor substitutor, @NotNull PsiType expectedType, @Type int kind) { final List<PsiTypeParameter> result = new SmartList<>(); for (Map.Entry<PsiTypeParameter, PsiType> entry : substitutor.getSubstitutionMap().entrySet()) { final PsiType typeArgument = entry.getValue(); if (typeArgument != null && matches(typeArgument, expectedType, kind)) { result.add(entry.getKey()); } } return result; }