Thanks Matthias,
yes, using JDK-11 APIs is obviously one of the next steps:

> We should just be prepared, when the
> first version bumps for release to 11 are requested :-).

It is obviously possible to do that with reflection the way you describe below. 
However my preferred way is to use 

http://wiki.apidesign.org/wiki/AlternativeImplementation

E.g. slowly start introducing `org.netbeans.modules.xyz.jdk11` modules that 
would register "seams" and spice the default JDK8 behavior on JDK11 with 
additional functionality without the need for reflection.

By setting `java.target=11` in `project.properties` file one instructs the 
NetBeans Harness build system to insert

OpenIDE-Module-Java-Dependencies: Java > 11

into module manifest. Then such module is only going to be enabled on JDK11.
-jt


Dne neděle 14. února 2021 16:24:37 CET, Matthias Bläsing napsal(a):
> Hi Jaroslav,
> 
> I like the general idea. Using release where possible should give us a
> higher ensurance not to create unusable builds.
> 
> I can imaging where it might be interesting to build a class file for
> an older bytecode level, but still against a current API: If the usage
> of the new API is propertly behind version checks, then the module
> could use newer API on newer JDKs, but retain compatibility with older
> JDKs. Having said this, I also thing this is a corner case and if
> necessary we can still switch over. If I also remember correctly,
> MethodHandles should give us room to implement reflection like access
> with the speed of bytecode invocation, so it might not even be worth
> it.
> 
> 
> I also think requiring JDK 9+ to compile NetBeans (effectively meaning
> 11) is ok at this point in time. We should just be prepared, when the
> first version bumps for release to 11 are requested :-).
> 
> Greetings
> 
> Matthias
> 
> Am Dienstag, den 09.02.2021, 19:58 +0100 schrieb Jaroslav Tulach:
> > Has anyone seen this email? I haven't received any replies and I cannot
> > find it in the mailing list archive...
> > -jt
> > 
> > Sent on Nov 28, 2020:
> > > Hi.
> > > The release is successfully over, long live the next release!
> > > 
> > > Since the [failure of modern
> > > code](https://github.com/apache/netbeans/pull/
> > > 2369) experiment, I can't stop thinking about the enormous possibilities
> > > NetBeans project could get by adopting `--release` flag of `javac`.
> > > There
> > > has been numerous voices calling for "coding against never JDK" and
> > > that's
> > > what the `--release` flag and the nature of [NetBeans Runtime
> > > Container](http:// wiki.apidesign.org/wiki/NetBeans_Runtime_Container)
> > > allows us to do. However, let's start with the basics:
> > > 
> > > Let's enable usage of `--release` in our Ant Javac task and let's make
> > > it
> > > the same as the `javac.target` value:
> > > 
> > > ```diff
> > > --- a/nbbuild/antsrc/org/netbeans/nbbuild/CustomJavac.java
> > > +++ b/nbbuild/antsrc/org/netbeans/nbbuild/CustomJavac.java
> > > @@ -66,6 +66,11 @@
> > > 
> > >      @Override
> > >      public void execute() throws BuildException {
> > > +        String tgr = getTarget();
> > > +        if (tgr.matches("\\d+")) {
> > > +            tgr = "1." + tgr;
> > > +        }
> > > +        setRelease(tgr.substring(2));
> > >          String src = getSource();
> > >          if (src.matches("\\d+")) {
> > >              src = "1." + src;
> > > ```
> > > 
> > > That immediately shows errors in our code base. Just compile with JDK-11
> > > and you'll see errors like:
> > > 
> > > ```bash
> > >  [nb-javac] Compiling 8 source files to
> > > /netbeans/platform/queries/build/
> > > classes
> > >  [nb-javac] Ignoring source, target and bootclasspath as release has
> > > been
> > > set [repeat] warning: [options] source value 6 is obsolete and will be
> > > removed in a future release
> > >    [repeat] warning: [options] target value 1.6 is obsolete and will be
> > > removed in a future release
> > >    [repeat] warning: [options] To suppress warnings about obsolete
> > > options,
> > > use -Xlint:-options.
> > >    [repeat] /netbeans/platform/queries/src/org/netbeans/api/queries/
> > > VersioningQuery.java:52: error: cannot find symbol
> > >    [repeat]         java.util.Objects.requireNonNull(uri);
> > >    [repeat]                  ^
> > >    [repeat]   symbol:   class Objects
> > >    [repeat]   location: package java.util
> > >    [repeat] 1 error
> > >    [repeat] 3 warnings
> > >   [nbmerge] Failed to build target: all-queries
> > > ```
> > > 
> > > What's the problem? In spite our code sets the `javac.target=1.6`, it is
> > > using API which isn't present in JDK6. That's wrong. Let's fix that!
> > > 
> > > We need a Travis job using JDK-11 to compile (JDK8 doesn't support the
> > > `--
> > > release` flag and Ant javac task just ignores it) and then we need us to
> > > fix all the compilation issues found.
> > > 
> > > If the change is done properly (and the `--release` flag is used at all
> > > compilations), we can drop the requirement to use JDK8 to compile Apache
> > > NetBeans. Yet the code will still run on JDK8 thanks to using `--release
> > > 8`
> > > or older. How does that sound?
> > > 
> > > Jaroslav Tulach
> > > NetBeans Platform Architect
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org
> > For additional commands, e-mail: dev-h...@netbeans.apache.org
> > 
> > For further information about the NetBeans mailing lists, visit:
> > https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org
> For additional commands, e-mail: dev-h...@netbeans.apache.org
> 
> For further information about the NetBeans mailing lists, visit:
> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists





---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org
For additional commands, e-mail: dev-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists



Reply via email to