ExpectedTypeInfo (@Nullable PsiExpression anotherExpr) { PsiType anotherType = anotherExpr != null ? anotherExpr.getType() : null; if (anotherType == null) { return null; } Supplier<String> expectedName = ExpectedTypeInfoImpl.NULL; if (anotherExpr instanceof PsiReferenceExpression) { PsiElement refElement = ((PsiReferenceExpression)anotherExpr).resolve(); if (refElement instanceof PsiVariable) { expectedName = getPropertyName((PsiVariable)refElement); } } ExpectedTypeInfoImpl info; if (anotherType instanceof PsiPrimitiveType) { if (PsiTypes.booleanType().equals(anotherType)) { info = createInfoImpl(anotherType, ExpectedTypeInfo.TYPE_STRICTLY, anotherType, TailTypes.noneType(), null, expectedName); } else if (PsiTypes.nullType().equals(anotherType)) { PsiType objectType = PsiType.getJavaLangObject(anotherExpr.getManager(), anotherExpr.getResolveScope()); info = createInfoImpl(objectType, ExpectedTypeInfo.TYPE_OR_SUBTYPE, objectType, TailTypes.noneType(), null, expectedName); } else { info = createInfoImpl(PsiTypes.doubleType(), ExpectedTypeInfo.TYPE_OR_SUBTYPE, anotherType, TailTypes.noneType(), null, expectedName); } } else { info = createInfoImpl(anotherType, ExpectedTypeInfo.TYPE_STRICTLY, anotherType, TailTypes.noneType(), null, expectedName); } return info; }