lambda: skip parenthesis exprs

This commit is contained in:
anna
2013-02-21 18:26:23 +01:00
parent d0f4f864d8
commit 9ab097b11d
3 changed files with 12 additions and 2 deletions
@@ -99,7 +99,7 @@ public class GraphInferencePolicy extends ProcessCandidateParameterTypeInference
}
public static void forget(PsiElement parent) {
if (parent instanceof PsiCallExpression) {
if (parent instanceof PsiExpression) {
final PsiElement gParent = parent.getParent();
if (gParent instanceof PsiExpressionList) {
final PsiElement ggParent = gParent.getParent();
@@ -43,6 +43,11 @@ public class ProcessCandidateParameterTypeInferencePolicy extends DefaultParamet
PsiCallExpression contextCall,
PsiTypeParameter typeParameter) {
PsiExpression[] expressions = expressionList.getExpressions();
PsiElement parent = innerMethodCall.getParent();
while (parent instanceof PsiParenthesizedExpression) {
innerMethodCall = (PsiExpression)parent;
parent = parent.getParent();
}
int i = ArrayUtil.find(expressions, innerMethodCall);
if (i < 0) return null;
PsiMethod owner = (PsiMethod)typeParameter.getOwner();
@@ -1073,7 +1073,12 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
expectedType = ((PsiTypeCastExpression)parent).getType();
} else if (parent instanceof PsiConditionalExpression) {
if (PsiUtil.isLanguageLevel8OrHigher(parent)) {
return inferMethodTypeParameterFromParent(parent.getParent(), (PsiExpression)parent, typeParameter, substitutor, policy);
try {
return inferMethodTypeParameterFromParent(PsiUtil.skipParenthesizedExprUp(parent.getParent()), (PsiExpression)parent, typeParameter, substitutor, policy);
}
finally {
GraphInferencePolicy.forget(parent);
}
}
}