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 168873f8fe38..8ed59d42b629 100644 --- a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java @@ -18,6 +18,8 @@ package com.intellij.psi; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.projectRoots.JavaSdkVersion; +import com.intellij.openapi.projectRoots.JavaVersionService; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Ref; @@ -167,6 +169,12 @@ public class PsiDiamondTypeImpl extends PsiDiamondType { final DiamondInferenceResult result = new DiamondInferenceResult(classOrAnonymousClassReference.getReferenceName() + "<>"); if (PsiUtil.isRawSubstitutor(staticFactory, inferredSubstitutor)) { + if (!JavaVersionService.getInstance().isAtLeast(argumentList, JavaSdkVersion.JDK_1_8) && + PsiUtil.skipParenthesizedExprUp(newExpression.getParent()) instanceof PsiExpressionList) { + for (PsiTypeParameter parameter : parameters) { + result.addInferredType(PsiType.getJavaLangObject(psiClass.getManager(), GlobalSearchScope.allScope(psiClass.getProject()))); + } + } return result; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/RawSubstitutor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/RawSubstitutor.java index 6c60f2909093..cce09281bb81 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/RawSubstitutor.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/RawSubstitutor.java @@ -3,4 +3,14 @@ import java.util.*; class Sample { public static List getList() {return null;} List list = new ArrayList<>(getList()); + + void foo() { + barz(new HashMap<>(create())); + } + + Map create() { + return null; + } + + void barz(Map map) {} }