void (final PsiElement element) { PsiType constrainingType = null; final PsiElement parent = element.getParent(); if (parent instanceof PsiReturnStatement) { constrainingType = PsiTypesUtil.getMethodReturnType(parent); } else if (parent instanceof PsiAssignmentExpression) { constrainingType = ((PsiAssignmentExpression)parent).getLExpression().getType(); } //todo[ann] this works for AImpl->A but fails on List<AImpl> (see testForEach1() and testIDEADEV23807()). //else if (parent instanceof PsiForeachStatement) { // final PsiType exprType = ((PsiExpression)element).getType(); // if (!(exprType instanceof PsiArrayType)) { // final PsiJavaParserFacade facade = JavaPsiFacade.getInstance(myProject).getParserFacade(); // constrainingType = facade.createTypeFromText(CommonClassNames.JAVA_LANG_ITERABLE, parent); // } //} else if (parent instanceof PsiLocalVariable) { constrainingType = ((PsiLocalVariable)parent).getType(); } checkConstrainingType(element, constrainingType); }