RFR: 8343540: Report preview error for inherited effectively-preview methods [v2]
Jan Lahoda
jlahoda at openjdk.org
Mon Nov 18 11:47:07 UTC 2024
> Consider a case where a new preview interface is introduced to JDK, and an existing non-preview class is retrofitted to use it. I.e. a case like:
>
>
> //JDK types:
> @PreviewFeature(...)
> public interface NewAPI {
> public default void test() {}
> }
> public class ExistingRetrofittedClass implements NewAPI {}
>
> //user type:
> class Test {
> void t(ExistingRetrofittedClass c) {
> c.test();
> }
> }
>
>
> There is currently no error or warning about the invocation of the test method, as the method itself is not marked as preview, and the receiver is not preview either.
>
> The proposal herein is that invoking a method on a receiver that is not of preview type itself, but the method is declared in a preview class or interface, the method will be considered to be a preview method, and the appropriate error or warning will be printed. Similar behavior is implementing for dereferencing fields.
>
>
> Similarly when implementing or overriding such "effectively" preview methods, like:
>
>
> //user types:
> class Test1 extends ExistingRetrofittedClass {
> public void test() {}
> }
>
>
> java also does not produce any error or warning. If the method itself would be marked as preview, an error or warning would be printed.
>
> The proposal herein is to produce an error or warning for a method declared inside a non-preview class or interface, which directly overrides a method declared inside a preview class or interface.
>
> In particular, for the two example above, javac is currently producing no errors. With the change proposed herein, javac will produce output like (with no `--enable-preview`):
>
>
> src/Test1.java:4: error: test() is a preview API and is disabled by default.
> public void test() {}
> ^
> (use --enable-preview to enable preview APIs)
> src/Test.java:5: error: test() is a preview API and is disabled by default.
> c.test();
> ^
> (use --enable-preview to enable preview APIs)
> 2 errors
Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
Adding tests.
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/21953/files
- new: https://git.openjdk.org/jdk/pull/21953/files/95603c9c..cdb2d59f
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=21953&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=21953&range=00-01
Stats: 268 lines in 1 file changed: 268 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/21953.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21953/head:pull/21953
PR: https://git.openjdk.org/jdk/pull/21953
More information about the compiler-dev
mailing list