DiamondInferenceResult (PsiNewExpression newExpression, PsiElement context) { final PsiAnonymousClass anonymousClass = newExpression.getAnonymousClass(); if (anonymousClass != null && !PsiUtil.isLanguageLevel9OrHigher(newExpression)) { final PsiElement resolve = anonymousClass.getBaseClassReference().resolve(); if (resolve instanceof PsiClass) { return PsiDiamondTypeImpl.DiamondInferenceResult.ANONYMOUS_INNER_RESULT; } } final PsiReferenceParameterList referenceParameterList = PsiTreeUtil.getChildOfType(newExpression, PsiReferenceParameterList.class); if (referenceParameterList != null && referenceParameterList.getTypeParameterElements().length > 0) { return DiamondInferenceResult.EXPLICIT_CONSTRUCTOR_TYPE_ARGS; } final DiamondInferenceResult inferenceResult = resolveInferredTypesNoCheck(newExpression, context); if (anonymousClass != null && PsiUtil.isLanguageLevel9OrHigher(newExpression)) { final InferredAnonymousTypeVisitor anonymousTypeVisitor = new InferredAnonymousTypeVisitor(context); for (PsiType type : inferenceResult.getInferredTypes()) { final Boolean accepted = type.accept(anonymousTypeVisitor); if (accepted != null && !accepted.booleanValue()) { return PsiDiamondTypeImpl.DiamondInferenceResult.ANONYMOUS_INNER_RESULT; } } } return inferenceResult; }