This behavior is by design1 and is codified in the JLS: Java Language Specification.
First, note that this is not related to widening which is why the (valid) integer-literal is promoted to a long value. Instead, this is related to the very specification of the int literal:
It is a compile-time error if a hexadecimal, octal, or binary int literal does not fit in 32 bits.
The smallest and largest signed 32-bit integer values are -2147483648 and 2147483647, respectively.
1I care not speculate on why it works this way, and languages like C# have different rules.