diff --git a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java index 1745d1bfff6a..43065f1cdf53 100644 --- a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java @@ -155,14 +155,16 @@ public class PsiDiamondTypeImpl extends PsiDiamondType { final PsiSubstitutor inferredSubstitutor = ourDiamondGuard.doPreventingRecursion(context, false, new Computable() { @Override public PsiSubstitutor compute() { - final MethodCandidateInfo staticFactoryCandidateInfo = CachedValuesManager.getCachedValue(context, + final MethodCandidateInfo staticFactoryCandidateInfo = context == newExpression ? + CachedValuesManager.getCachedValue(context, new CachedValueProvider() { @Nullable @Override public Result compute() { - return new Result(getStaticFactoryCandidateInfo(psiClass, newExpression, context, argumentList), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT); + return new Result(getStaticFactoryCandidateInfo(psiClass, newExpression, newExpression, argumentList), PsiModificationTracker.MODIFICATION_COUNT); } - }); + }) + : getStaticFactoryCandidateInfo(psiClass, newExpression, context, argumentList); staticFactoryRef.set(staticFactoryCandidateInfo); return staticFactoryCandidateInfo != null ? staticFactoryCandidateInfo.getSubstitutor() : null; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java index a23d434b3cb9..90ed3deb1b03 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java @@ -445,17 +445,19 @@ public class InferenceSession { public static JavaResolveResult getResolveResult(final PsiCall callExpression, final PsiExpressionList argumentList) { if (callExpression instanceof PsiNewExpression) { final PsiJavaCodeReferenceElement classReference = ((PsiNewExpression)callExpression).getClassOrAnonymousClassReference(); - final JavaResolveResult resolveResult = classReference != null ? classReference.advancedResolve(false) : null; - final PsiElement psiClass = resolveResult != null ? resolveResult.getElement() : null; - if (psiClass instanceof PsiClass) { + if (classReference != null) { return CachedValuesManager.getCachedValue(classReference, new CachedValueProvider() { @Nullable @Override public Result compute() { - final JavaPsiFacade facade = JavaPsiFacade.getInstance(callExpression.getProject()); - final JavaResolveResult constructor = facade.getResolveHelper() - .resolveConstructor(facade.getElementFactory().createType((PsiClass)psiClass).rawType(), argumentList, callExpression); - return new Result(constructor.getElement() == null ? resolveResult : constructor, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT); + final JavaResolveResult resolveResult = classReference.advancedResolve(false); + final PsiElement psiClass = resolveResult.getElement(); + JavaResolveResult constructor = JavaResolveResult.EMPTY; + if (psiClass != null) { + final JavaPsiFacade facade = JavaPsiFacade.getInstance(callExpression.getProject()); + constructor = facade.getResolveHelper().resolveConstructor(facade.getElementFactory().createType((PsiClass)psiClass).rawType(), argumentList, callExpression); + } + return new Result(constructor.getElement() == null ? resolveResult : constructor, PsiModificationTracker.MODIFICATION_COUNT); } }); }