void (@NotNull PsiPrefixExpression expr) { IElementType i = expr.getOperationTokenType(); final PsiType type = expr.getType(); final PsiElement parent = expr.getParent(); final TailType tailType = parent instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)parent).getRExpression() == expr ? getAssignmentRValueTailType((PsiAssignmentExpression)parent) : TailTypes.noneType(); if (i == JavaTokenType.PLUSPLUS || i == JavaTokenType.MINUSMINUS || i == JavaTokenType.TILDE) { ExpectedTypeInfoImpl info; if (myUsedAfter && type != null) { info = createInfoImpl(type, ExpectedTypeInfo.TYPE_STRICTLY, type, tailType); } else { if (type != null) { info = createInfoImpl(type, type instanceof PsiPrimitiveType ? ExpectedTypeInfo.TYPE_OR_SUPERTYPE : ExpectedTypeInfo.TYPE_OR_SUBTYPE, PsiTypes.intType(), tailType); } else { info = createInfoImpl(PsiTypes.longType(), ExpectedTypeInfo.TYPE_OR_SUBTYPE, PsiTypes.intType(), tailType); } } myResult.add(info); } else if (i == JavaTokenType.PLUS || i == JavaTokenType.MINUS) { if (parent instanceof PsiStatement) { myResult.add(createInfoImpl(PsiTypes.doubleType(), ExpectedTypeInfo.TYPE_OR_SUBTYPE, PsiTypes.intType(), tailType)); } else { myExpr = (PsiExpression)myExpr.getParent(); parent.accept(this); } } else if (i == JavaTokenType.EXCL) { myResult.add(createInfoImpl(PsiTypes.booleanType(), ExpectedTypeInfo.TYPE_STRICTLY, PsiTypes.booleanType(), tailType)); } }