diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/GraphInferencePolicy.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/GraphInferencePolicy.java index 76342896b897..a6593a730008 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/GraphInferencePolicy.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/GraphInferencePolicy.java @@ -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(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ProcessCandidateParameterTypeInferencePolicy.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ProcessCandidateParameterTypeInferencePolicy.java index b67bb8242e58..e9045a8c9c15 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ProcessCandidateParameterTypeInferencePolicy.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ProcessCandidateParameterTypeInferencePolicy.java @@ -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(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java index 48a87d8e6b3e..5af0d2dae5b3 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java @@ -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); + } } }