PsiElement (PsiExpression initializer, PsiElement ref) { if (initializer instanceof PsiNewExpression) { final PsiDiamondType diamondType = PsiDiamondType.getDiamondType((PsiNewExpression)initializer); if (diamondType != null) { final PsiDiamondType.DiamondInferenceResult inferenceResult = diamondType.resolveInferredTypes(); if (inferenceResult.getErrorMessage() == null) { final PsiElement copy = ref.copy(); final PsiElement parent = ref.replace(initializer); final PsiDiamondType.DiamondInferenceResult result = PsiDiamondTypeImpl.resolveInferredTypes((PsiNewExpression)initializer, parent); ref = parent.replace(copy); if (!result.equals(inferenceResult)) { final String inferredTypeText = StringUtil.join(inferenceResult.getTypes(), psiType -> psiType.getCanonicalText(), ", "); final PsiJavaCodeReferenceElement classReference = ((PsiNewExpression)initializer).getClassOrAnonymousClassReference(); final PsiNewExpression expandedDiamond = (PsiNewExpression)JavaPsiFacade.getElementFactory(initializer.getProject()) .createExpressionFromText("new " + Objects.requireNonNull(classReference).getReferenceName() + "<" + inferredTypeText + ">()", initializer); PsiNewExpression newExpression = (PsiNewExpression)initializer.copy(); Objects.requireNonNull(newExpression.getClassOrAnonymousClassReference()).replace(Objects.requireNonNull(expandedDiamond.getClassReference())); return ref.replace(newExpression); } } } } return ref != initializer ? ref.replace(initializer) : initializer; }