boolean (List<? super ConstraintFormula> constraints) { if (myT instanceof PsiWildcardType) { PsiType tBound = ((PsiWildcardType)myT).getBound(); if (tBound == null) { return true; } if (((PsiWildcardType)myT).isExtends()) { if (myS instanceof PsiWildcardType) { final PsiType sBound = ((PsiWildcardType)myS).getBound(); if (sBound == null) { constraints.add(new StrictSubtypingConstraint(tBound, ((PsiWildcardType)myS).getExtendsBound(), false)); return true; } if (((PsiWildcardType)myS).isExtends()) { constraints.add(new StrictSubtypingConstraint(tBound, sBound, false)); return true; } if (((PsiWildcardType)myS).isSuper()) { constraints.add(new TypeEqualityConstraint(tBound, PsiType.getJavaLangObject(((PsiWildcardType)myT).getManager(), myT.getResolveScope()))); return true; } assert false; } else { constraints.add(new StrictSubtypingConstraint(tBound, myS, false)); return true; } } else { LOG.assertTrue(((PsiWildcardType)myT).isSuper()); if (myS instanceof PsiWildcardType) { final PsiType sBound = ((PsiWildcardType)myS).getBound(); if (sBound != null && ((PsiWildcardType)myS).isSuper()) { constraints.add(new StrictSubtypingConstraint(sBound, tBound, false)); return true; } } else { constraints.add(new StrictSubtypingConstraint(myS, tBound, false)); return true; } } return false; } else { if (myS instanceof PsiWildcardType) { return false; } else { constraints.add(new TypeEqualityConstraint(myT, myS)); return true; } } }