
////
     Licensed to the Apache Software Foundation (ASF) under one
     or more contributor license agreements.  See the NOTICE file
     distributed with this work for additional information
     regarding copyright ownership.  The ASF licenses this file
     to you under the Apache License, Version 2.0 (the
     "License"); you may not use this file except in compliance
     with the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing,
     software distributed under the License is distributed on an
     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     KIND, either express or implied.  See the License for the
     specific language governing permissions and limitations
     under the License.
////
= Apache NetBeans 11.2 Features
:jbake-type: page-noaside
:jbake-tags: 11.2 features
:jbake-status: published
:keywords: Apache NetBeans 11.2 IDE features
:icons: font
:description: Apache NetBeans 11.2 features
:toc: left
:toc-title: 
:toclevels: 4
:syntax: true
:source-highlighter: pygments
:experimental:
:linkattrs:

Apache NetBeans 11.2 is the second Apache NetBeans release outside the Apache Incubator and the link:https://cwiki.apache.org/confluence/display/NETBEANS/Release+Schedule[second release of the new quarterly release cycle].

TIP: The LTS release of the Apache NetBeans 11 cycle is Apache NetBeans 11.0. The 11.1 and 11.2 releases have not been tested as heavily as the LTS release and may therefore be less stable. Use 11.2 to use the latest features and to provide feedback for the next LTS release, scheduled for April 2020. Go here to download  link:/download/nb110/nb110.html[Apache NetBeans 11.0], the current LTS release.

== Release Drivers

=== Java

The highlights of enhancements in the Java area are focused on support for JDK 13.

- link:https://openjdk.java.net/jeps/354[JEP 354]: Switch Expressions (Preview Feature): 

[.feature]
--
image::jdk13-yield.png[role="left", link="jdk13-yield.png"]
-- 

- link:https://openjdk.java.net/jeps/355[JEP 355]: Text Blocks (Preview Feature)

[.feature]
--
image::jdk13-textblock.png[role="left", link="jdk13-textblock.png"]
--  

TIP: link:https://openjdk.java.net/jeps/12[JEP 12] provides for a preview language or VM feature, which "is a new feature of the Java SE Platform that is fully specified, fully implemented, and yet impermanent. It is available in a JDK feature release to provoke developer feedback based on real world use; this may lead to it becoming permanent in a future Java SE Platform".

Preview features can only be used if the Java compiler's `--enable-preview` flag is set, as shown below for Maven. 

[source,xml]
----
<build>
   <plugins>
      <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
          <configuration>
              <compilerArgs>
                    <arg>--enable-preview</arg>
              </compilerArgs>
         </configuration>
     </plugin>
  </plugins>
</build>
----

An example to add `--enable-preview` in Gradle:

[source,groovy]
----
tasks.withType(JavaCompile).each {
    it.options.compilerArgs.add('--enable-preview')
}

run.jvmArgs(['--enable-preview'])
----

=== PHP

The highlights of enhancements in the PHP area are focused on support for PHP 7.4.

[.feature]
--
image::php-7.4.png[role="left", link="php-7.4.png"]
--  

Highlights of PHP 7.4 integration are listed below.

- PHP RFC: link:https://wiki.php.net/rfc/typed_properties_v2[Typed Properties 2.0]
- PHP RFC: link:https://wiki.php.net/rfc/null_coalesce_equal_operator[Null Coalescing Assignment Operator]
- PHP RFC: link:https://wiki.php.net/rfc/spread_operator_for_array[Spread Operator in Array Expression]
- PHP RFC: link:https://wiki.php.net/rfc/arrow_functions_v2[Arrow Functions 2.0]
- PHP RFC: link:https://wiki.php.net/rfc/numeric_literal_separator[Numeric Literal Separator]
- PHP RFC: link:https://wiki.php.net/rfc/custom_object_serialization[New Custom Object Serialization Mechanism]

Further details on new support for PHP 7.4 features are provided link:https://cwiki.apache.org/confluence/display/NETBEANS/11.2+Feature%3A+PHP[here].

== Enhancements and Fixes

The highlights of the enhancements and fixes are listed below.

See link:https://github.com/apache/netbeans/milestone/3?closed=1[the closed pull requests for 11.2] for details.

=== Enhancements

==== Performance

- Speed up finding binaries for source files, most notable performance increase on refactoring. (link:https://github.com/apache/netbeans/pull/1430[PR-1430])
- Using Java NIO2 Watchers on Windows and Linux (link:https://github.com/apache/netbeans/pull/1349[PR-1349])
- Optimized the archive file detection (link:https://github.com/apache/netbeans/pull/1422[PR-1422])

==== Gradle

- The Gradle features can now read Java compiler arguments, enabling NetBeans support for Java preview features in Gradle projects. (link:https://github.com/apache/netbeans/pull/1494[PR-1494])
- Gradle now can accept user input from its Output tab. (link:https://github.com/apache/netbeans/pull/1461[PR-1461])
- NetBeans honors the project's `org.gradle.jvmargs` property when launching Gradle Daemon (link:https://github.com/apache/netbeans/pull/1501[PR-1501]) 

==== Other
- JavaScript parser is now correctly licensed and no longer needs to be installed separately (link:https://github.com/apache/netbeans/pull/1407[PR-1407])
- Enhancement to the installer enables subsets of Apache NetBeans to be installed (link:https://github.com/apache/netbeans/pull/1505[PR-1505])
- Upgraded Payara support to Payara Platform 5.193 (link:https://github.com/apache/netbeans/pull/1470[PR-1470])
- Amazon Beanstalk support updates (link:https://github.com/apache/netbeans/pull/1312[PR-1312])
- HTML5 attribute syntax support (link:https://github.com/apache/netbeans/pull/1380[PR-1380])
- Cleaned up Welcome Screen no longer refers to Oracle backends (link:https://github.com/apache/netbeans/pull/1457[PR-1457])

=== Fixes

- Maven-based NetBeans modules can now be created again (link:https://github.com/apache/netbeans/commit/9e32a853c38f2b7514a42a3395a673d8ad06300f[commit 9e32a85])
- "Copy Dependent Libraries" in Ant-based projects works again (link:https://github.com/apache/netbeans/pull/1469[PR-1469])
- OpenJFX Gluon samples are now correctly registered (link:https://github.com/apache/netbeans/pull/1503[PR-1503])

== Notes

- The donation of the NetBeans C and C++ features from Oracle to Apache was not complete at the time of the 11.2 release, though it is not far off, and the 11.3 release (January 2020) is scheduled to focus primarily on the integration of the C and C++ features, once they land in the Apache NetBeans GitHub. Until then, go to the Plugin Manager, enable the NetBeans IDE 8.2 Update Center, which lets you install the NetBeans IDE 8.2 modules providing C and C&#x2b;&#x2b; features.
- WildFly integration is supported by means of the link:http://plugins.netbeans.org/plugin/76472/wildfly-application-server[WildFly Application Server] plugin located in the Plugin Portal.
- Support for JSF 2.3 is available as a pull request, too late for inclusion in link:https://github.com/apache/netbeans/milestone/3[11.2], scheduled for link:https://github.com/apache/netbeans/milestone/4[11.3]: link:https://github.com/apache/netbeans/pull/1576[PR-1576]

