On Tue, 22 Nov 2022 18:39:43 GMT, John Hendrikx <jhendr...@openjdk.org> wrote:

> - Remove unsupported/unnecessary SuppressWarning annotations
> - Remove reduntant type specifications (use diamond operator)
> - Remove unused or duplicate imports
> - Remove unnecessary casts (type is already correct type or can be autoboxed)
> - Remove unnecessary semi-colons (at end of class definitions, or just 
> repeated ones)
> - Remove redundant super interfaces (interface that is already inherited)
> - Remove unused type parameters
> - Remove declared checked exceptions that are never thrown
> - Add missing `@Override` annotations

It's clear that the unnecessary cast removal is causing many discussions, so I 
think its best to back out that change. The danger in many unnecessary casts is 
that they can become **real** casts after a seemingly innocuous change, so it 
is mostly a benefit to make refactors easier to reason about.  Unnecessary 
casts turning into down casts are the ones that will cause trouble:

        float x, y, z;
        float a = (float)x * (float)y * (float)z;   // unnecessary casts

However, after a refactor:

        double x, y, z;
        float a = (float)x * (float)y * (float)z;   // down casts (no warning!)

The extra precision that one may have hoped to gain is still lost.

Similarly:

        Integer number = ... ;
        Integer x = (Integer) number;  // unnecessary cast

Refactor:

        Number number = ... ;
        Integer x = (Integer) number;  // down cast (no warning!)

The code may now raise a `ClassCastException` here if `Number` is not an 
`Integer`. Without the unnecessary cast this would be a compile error to be 
investigated.

-------------

PR: https://git.openjdk.org/jfx/pull/960

Reply via email to