jak Paul Boddington powiedział w komentarzu, to w rzeczywistości coś, czego JetBrains zapomniał wprowadzić w swoim algorytmie, który został fixed a few days ago.
Przed:
if (opSign == LT && comparedWith <= rangeMin) return alwaysFalse(instruction, runner, memState);
if (opSign == LT && comparedWith > rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == LE && comparedWith >= rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == GT && comparedWith >= rangeMax) return alwaysFalse(instruction, runner, memState);
if (opSign == GT && comparedWith < rangeMin) return alwaysTrue(instruction, runner, memState);
if (opSign == GE && comparedWith <= rangeMin) return alwaysTrue(instruction, runner, memState);
Po:
if (opSign == LT && comparedWith <= rangeMin) return alwaysFalse(instruction, runner, memState);
if (opSign == LT && comparedWith > rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == LE && comparedWith >= rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == LE && comparedWith < rangeMin) return alwaysFalse(instruction, runner, memState);
if (opSign == GT && comparedWith >= rangeMax) return alwaysFalse(instruction, runner, memState);
if (opSign == GT && comparedWith < rangeMin) return alwaysTrue(instruction, runner, memState);
if (opSign == GE && comparedWith <= rangeMin) return alwaysTrue(instruction, runner, memState);
if (opSign == GE && comparedWith > rangeMax) return alwaysFalse(instruction, runner, memState);
Odpowiedniego wydania: https://youtrack.jetbrains.com/issue/IDEA-146950
wydaje się winy w realizacji IntelliJ nie emisyjnej Java. Polecam zgłosić to do JetBrains. –
Nie sądzę, że istnieje jakiś głęboki powód. To musi być po prostu błąd, ale jest dość dziwny. Jeśli zrobię "int i = 5; jeśli (i <= 2) 'nie otrzymam ostrzeżenia. –
Prawdopodobnie https://youtrack.jetbrains.com/issue/IDEA-146950 –