boolean (InferenceVariable inferenceVariable, PsiClassType targetType) { if (!FunctionalInterfaceParameterizationUtil.isWildcardParameterized(targetType)) { final List<PsiType> bounds = inferenceVariable.getBounds(InferenceBound.LOWER); final Processor<Pair<PsiType, PsiType>> differentParameterizationProcessor = pair -> pair.first == null || pair.second == null || !TypesDistinctProver.provablyDistinct(pair.first, pair.second); if (findParameterizationOfTheSameGenericClass(bounds, differentParameterizationProcessor) != null) return true; final List<PsiType> eqBounds = inferenceVariable.getBounds(InferenceBound.EQ); final List<PsiType> boundsToCheck = new ArrayList<>(bounds); boundsToCheck.addAll(eqBounds); for (PsiType lowBound : boundsToCheck) { if (FunctionalInterfaceParameterizationUtil.isWildcardParameterized(lowBound)) { return true; } } } return false; }