Merge pull request #3309 from apache/delivery

Merge delivery into release126 for 12.6-rc3
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
index 24c2c15..a6f96f8 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
@@ -47,6 +47,11 @@
      */
     private final Optional<String> vendor;
 
+    /**
+     * JDK vm
+     */
+    private final Optional<String> vm;
+
     private final static int MAJOR_INDEX = 0;
     private final static int MINOR_INDEX = 1;
     private final static int SUBMINOR_INDEX = 2;
@@ -58,21 +63,23 @@
 
     private static final Short DEFAULT_VALUE = 0;
 
-    private JDKVersion(String version, String vendor) {
+    private JDKVersion(String version, String vendor, String vm) {
         short[] versions = parseVersions(version);
         this.major = versions[MAJOR_INDEX];
         this.minor = Optional.ofNullable(versions[MINOR_INDEX]);
         this.subminor = Optional.ofNullable(versions[SUBMINOR_INDEX]);
         this.update = Optional.ofNullable(versions[UPDATE_INDEX]);
         this.vendor = Optional.ofNullable(vendor);
+        this.vm = Optional.ofNullable(vm);
     }
 
-    JDKVersion(Short major, Optional<Short> minor, Optional<Short> subminor, Optional<Short> update, Optional<String> vendor) {
+    JDKVersion(Short major, Optional<Short> minor, Optional<Short> subminor, Optional<Short> update, Optional<String> vendor, Optional<String> vm) {
         this.major = major;
         this.minor = minor;
         this.subminor = subminor;
         this.update = update;
         this.vendor = vendor;
+        this.vm = vm;
     }
 
     /**
@@ -112,7 +119,7 @@
     }
 
     /**
-     * Get JDK Vendor.
+     * Get JDK Vendor name.
      *
      * @return JDK vendor.
      */
@@ -120,6 +127,15 @@
         return vendor;
     }
 
+    /**
+     * Get JDK VM name.
+     *
+     * @return JDK vm.
+     */
+    public Optional<String> getVM() {
+        return vm;
+    }
+
     public boolean gt(JDKVersion version) {
         if (major > version.getMajor()) {
             return true;
@@ -241,7 +257,7 @@
 
     public static JDKVersion toValue(String version) {
         if (version != null && version.matches(VERSION_MATCHER)) {
-            return new JDKVersion(version, null);
+            return new JDKVersion(version, null, null);
         } else {
             return null;
         }
@@ -249,7 +265,15 @@
 
     public static JDKVersion toValue(String version, String vendor) {
         if (version != null && version.matches(VERSION_MATCHER)) {
-            return new JDKVersion(version, vendor);
+            return new JDKVersion(version, vendor, null);
+        } else {
+            return null;
+        }
+    }
+
+    public static JDKVersion toValue(String version, String vendor, String vm) {
+        if (version != null && version.matches(VERSION_MATCHER)) {
+            return new JDKVersion(version, vendor, vm);
         } else {
             return null;
         }
@@ -259,15 +283,12 @@
         return IDE_JDK_VERSION;
     }
 
-    public static boolean isCorrectJDK(JDKVersion jdkVersion, Optional<String> vendor, Optional<JDKVersion> minVersion, Optional<JDKVersion> maxVersion) {
+    public static boolean isCorrectJDK(JDKVersion jdkVersion, Optional<String> vendorOrVM, Optional<JDKVersion> minVersion, Optional<JDKVersion> maxVersion) {
         boolean correctJDK = true;
 
-        if (vendor.isPresent()) {
-            if (jdkVersion.getVendor().isPresent()) {
-                correctJDK = jdkVersion.getVendor().get().contains(vendor.get());
-            } else {
-                correctJDK = false;
-            }
+        if (vendorOrVM.isPresent()) {
+            correctJDK = jdkVersion.getVendor().map(vendor -> vendor.contains(vendorOrVM.get())).orElse(false)
+                    || jdkVersion.getVM().map(vm -> vm.contains(vendorOrVM.get())).orElse(false);
         }
         if (correctJDK && minVersion.isPresent()) {
             correctJDK = jdkVersion.ge(minVersion.get());
@@ -288,6 +309,7 @@
 
     private static void initialize() {
         String vendor = System.getProperty("java.vendor"); // NOI18N
+        String vm = System.getProperty("java.vm.name"); // NOI18N
         /*
             In JEP 223 java.specification.version will be a single number versioning , not a dotted versioning . 
             For JDK 8:
@@ -308,7 +330,8 @@
                 Optional.of(versions[MINOR_INDEX]),
                 Optional.of(versions[SUBMINOR_INDEX]),
                 Optional.of(versions[UPDATE_INDEX]),
-                Optional.of(vendor)
+                Optional.of(vendor),
+                Optional.of(vm)
         );
     }
 
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
index 5c53d4f..f6ff41b 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
@@ -187,7 +187,8 @@
                     if (javaVersionLine != null) {
                         javaVersion = JDKVersion.toValue(
                                 javaVersionLine.substring(javaVersionLine.indexOf("\"") + 1, javaVersionLine.lastIndexOf("\"")), // NOI18N
-                                implementorLine != null ? implementorLine.substring(implementorLine.indexOf("\"") + 1, implementorLine.lastIndexOf("\"")) : null // NOI18N
+                                implementorLine != null ? implementorLine.substring(implementorLine.indexOf("\"") + 1, implementorLine.lastIndexOf("\"")) : null, // NOI18N
+                                null
                         );
                     }
                 } catch (IOException ex) {
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
index 935c3a6..6ceaefe 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
@@ -167,7 +167,7 @@
         List<String> optList
                 = jvmConfigReader.getJvmOptions()
                         .stream()
-                        .filter(fullOption -> JDKVersion.isCorrectJDK(javaVersion, fullOption.vendor, fullOption.minVersion, fullOption.maxVersion))
+                        .filter(fullOption -> JDKVersion.isCorrectJDK(javaVersion, fullOption.vendorOrVM, fullOption.minVersion, fullOption.maxVersion))
                         .map(fullOption -> fullOption.option)
                         .collect(toList());
 
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
index d466ae9..f85717d 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
@@ -201,7 +201,9 @@
     public static class JvmOption {
 
         public final String option;
+        @Deprecated
         public final Optional<String> vendor;
+        public final Optional<String> vendorOrVM;
         public final Optional<JDKVersion> minVersion;
         public final Optional<JDKVersion> maxVersion;
 
@@ -217,21 +219,22 @@
 
         public JvmOption(String option) {
             Matcher matcher = PATTERN.matcher(option);
+            this.vendor = Optional.empty();
             if (matcher.matches()) {
                 if (matcher.group(1).contains("-")  // NOI18N
                         && Character.isLetter(matcher.group(1).charAt(0))) {
                     String[] parts = matcher.group(1).split("-"); // NOI18N
-                    this.vendor = Optional.ofNullable(parts[0]);
+                    this.vendorOrVM = Optional.ofNullable(parts[0]);
                     this.minVersion = Optional.ofNullable(JDKVersion.toValue(parts[1]));
                 } else {
-                    this.vendor = Optional.empty();
+                    this.vendorOrVM = Optional.empty();
                     this.minVersion = Optional.ofNullable(JDKVersion.toValue(matcher.group(1)));
                 }
                 this.maxVersion = Optional.ofNullable(JDKVersion.toValue(matcher.group(2)));
                 this.option = matcher.group(3);
             } else {
                 this.option = option;
-                this.vendor = Optional.empty();
+                this.vendorOrVM = Optional.empty();
                 this.minVersion = Optional.empty();
                 this.maxVersion = Optional.empty();
             }
@@ -240,6 +243,7 @@
         public JvmOption(String option, String minVersion, String maxVersion) {
             this.option = option;
             this.vendor = Optional.empty();
+            this.vendorOrVM = Optional.empty();
             this.minVersion = Optional.ofNullable(JDKVersion.toValue(minVersion));
             this.maxVersion = Optional.ofNullable(JDKVersion.toValue(maxVersion));
         }
diff --git a/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java b/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java
index 8e3c1e2..8759aa5 100644
--- a/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java
+++ b/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java
@@ -40,23 +40,23 @@
     public void parseJDKVersion() {
         Map<String, JDKVersion> jdkVersions = new HashMap<>();
         jdkVersions.put("1.8",
-                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 0), Optional.empty()));
+                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 0), Optional.empty(), Optional.empty()));
         jdkVersions.put("1.8.0",
-                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 0), Optional.empty()));
+                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 0), Optional.empty(), Optional.empty()));
         jdkVersions.put("1.8.0u121",
-                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 121), Optional.empty()));
+                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 121), Optional.empty(), Optional.empty()));
         jdkVersions.put("1.8.0_191",
-                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 191), Optional.empty()));
+                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 191), Optional.empty(), Optional.empty()));
         jdkVersions.put("1.8.0_232-ea-8u232-b09-0ubuntu1-b09",
-                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 232), Optional.empty()));
+                new JDKVersion((short) 1, Optional.of((short) 8), Optional.of((short) 0), Optional.of((short) 232), Optional.empty(), Optional.empty()));
         jdkVersions.put("9",
-                new JDKVersion((short) 9, Optional.of((short) 0), Optional.of((short) 0), Optional.of((short) 0), Optional.empty()));
+                new JDKVersion((short) 9, Optional.of((short) 0), Optional.of((short) 0), Optional.of((short) 0), Optional.empty(), Optional.empty()));
         jdkVersions.put("11.0.6",
-                new JDKVersion((short) 11, Optional.of((short) 0), Optional.of((short) 6), Optional.of((short) 0), Optional.empty()));
+                new JDKVersion((short) 11, Optional.of((short) 0), Optional.of((short) 6), Optional.of((short) 0), Optional.empty(), Optional.empty()));
         jdkVersions.put("11.0.6_234",
-                new JDKVersion((short) 11, Optional.of((short) 0), Optional.of((short) 6), Optional.of((short) 234), Optional.empty()));
+                new JDKVersion((short) 11, Optional.of((short) 0), Optional.of((short) 6), Optional.of((short) 234), Optional.empty(), Optional.empty()));
         jdkVersions.put("11.0.6u234",
-                new JDKVersion((short) 11, Optional.of((short) 0), Optional.of((short) 6), Optional.of((short) 234), Optional.empty()));
+                new JDKVersion((short) 11, Optional.of((short) 0), Optional.of((short) 6), Optional.of((short) 234), Optional.empty(), Optional.empty()));
 
         for (Entry<String, JDKVersion> version : jdkVersions.entrySet()) {
             assertTrue(JDKVersion.toValue(version.getKey()).equals(version.getValue()), version.getKey());
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/queries/Info.java b/extide/gradle/src/org/netbeans/modules/gradle/queries/Info.java
index 46e4e86..9789169 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/queries/Info.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/queries/Info.java
@@ -69,7 +69,11 @@
 
     @Override
     public String getName() {
+        final NbGradleProject nb = NbGradleProject.get(project);
         GradleBaseProject prj = GradleBaseProject.get(project);
+        if (!nb.isGradleProjectLoaded() || prj == null || prj.getName() == null) {
+            return project.getProjectDirectory().getNameExt();
+        }
 
         String ret = prj.isRoot() ? prj.getName() : prj.getRootDir().getName() + prj.getPath();
         return ret;
diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java
index 2a948a7..8a3bfa2 100644
--- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java
+++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java
@@ -87,6 +87,11 @@
         }).get();
     }
     
+    protected void dumpProject(Project project){
+        NbGradleProjectImpl impl = (NbGradleProjectImpl) project;
+        impl.dumpProject();
+    }
+    
     protected FileObject createGradleProject(String path, String buildScript, String settingsScript) throws IOException {
         FileObject ret = FileUtil.toFileObject(getWorkDir());
         if (path != null) {
diff --git a/extide/libs.gradle/external/binaries-list b/extide/libs.gradle/external/binaries-list
index 121211d..6b1f130 100644
--- a/extide/libs.gradle/external/binaries-list
+++ b/extide/libs.gradle/external/binaries-list
@@ -14,4 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-B2123DF25C938DD072C7D07716629AABEF0ABD10 gradle-tooling-api-7.3-rc-1.jar
\ No newline at end of file
+526C85998C50C960237920A9D98580F35801525D gradle-tooling-api-7.3.jar
\ No newline at end of file
diff --git a/extide/libs.gradle/external/gradle-tooling-api-7.3-rc-1-license.txt b/extide/libs.gradle/external/gradle-tooling-api-7.3-license.txt
similarity index 99%
rename from extide/libs.gradle/external/gradle-tooling-api-7.3-rc-1-license.txt
rename to extide/libs.gradle/external/gradle-tooling-api-7.3-license.txt
index d6bae9d..d1d04e9 100644
--- a/extide/libs.gradle/external/gradle-tooling-api-7.3-rc-1-license.txt
+++ b/extide/libs.gradle/external/gradle-tooling-api-7.3-license.txt
@@ -1,7 +1,7 @@
 Name: Gradle Wrapper
 Description: Gradle Tooling API
-Version: 7.3-rc-1
-Files: gradle-tooling-api-7.3-rc-1.jar
+Version: 7.3
+Files: gradle-tooling-api-7.3.jar
 License: Apache-2.0
 Origin: Gradle Inc.
 URL: https://gradle.org/
diff --git a/extide/libs.gradle/external/gradle-tooling-api-7.3-rc-1-notice.txt b/extide/libs.gradle/external/gradle-tooling-api-7.3-notice.txt
similarity index 100%
rename from extide/libs.gradle/external/gradle-tooling-api-7.3-rc-1-notice.txt
rename to extide/libs.gradle/external/gradle-tooling-api-7.3-notice.txt
diff --git a/extide/libs.gradle/nbproject/project.properties b/extide/libs.gradle/nbproject/project.properties
index 17922b1..87d66a4 100644
--- a/extide/libs.gradle/nbproject/project.properties
+++ b/extide/libs.gradle/nbproject/project.properties
@@ -22,4 +22,4 @@
 # For more information, please see http://wiki.netbeans.org/SignatureTest
 sigtest.gen.fail.on.error=false
 
-release.external/gradle-tooling-api-7.3-rc-1.jar=modules/gradle/gradle-tooling-api.jar
+release.external/gradle-tooling-api-7.3.jar=modules/gradle/gradle-tooling-api.jar
diff --git a/extide/libs.gradle/nbproject/project.xml b/extide/libs.gradle/nbproject/project.xml
index ec8671c..05c2c38 100644
--- a/extide/libs.gradle/nbproject/project.xml
+++ b/extide/libs.gradle/nbproject/project.xml
@@ -39,7 +39,7 @@
             </public-packages>
             <class-path-extension>
                 <runtime-relative-path>gradle/gradle-tooling-api.jar</runtime-relative-path>
-                <binary-origin>external/gradle-tooling-api-7.3-rc-1.jar</binary-origin>
+                <binary-origin>external/gradle-tooling-api-7.3.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryAction.java b/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryAction.java
index 0451477..8e1a08b 100644
--- a/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryAction.java
+++ b/ide/git/src/org/netbeans/modules/git/ui/history/SearchHistoryAction.java
@@ -63,63 +63,54 @@
     }
     
     public static void openSearch (final File repository, final File[] roots, final String branchName, final String contextName) {
-        openSearch(repository, roots, branchName, contextName, roots != null && (roots.length == 1 && roots[0].isFile() || roots.length > 1 && Utils.shareCommonDataObject(roots)));
+        openSearch(repository, roots, branchName, contextName, roots != null && (roots.length == 1 || roots.length > 1 && Utils.shareCommonDataObject(roots)));
     }
     
     public static void openSearch (final File repository, final File[] roots, final String branchName, final String contextName, final boolean invokeSearch) {
         final String title = NbBundle.getMessage(SearchHistoryTopComponent.class, "LBL_SearchHistoryTopComponent.title", contextName);
         final RepositoryInfo info = RepositoryInfo.getInstance(repository);
-        EventQueue.invokeLater(new Runnable() {
-            @Override
-            public void run () {
-                SearchHistoryTopComponent tc = new SearchHistoryTopComponent(repository, info, roots);
-                tc.setBranch(branchName);
-                tc.setDisplayName(title);
-                tc.open();
-                tc.requestActive();
-                if (invokeSearch) {
-                    tc.search(false);
-                }
+        EventQueue.invokeLater(() -> {
+            SearchHistoryTopComponent tc = new SearchHistoryTopComponent(repository, info, roots);
+            tc.setBranch(branchName);
+            tc.setDisplayName(title);
+            tc.open();
+            tc.requestActive();
+            if (invokeSearch) {
+                tc.search(false);
             }
         });
     }
     
-    public static void openSearch (final File repository, final File root, final String contextName,
-            final String commitIdFrom, final String commitIdTo) {
+    public static void openSearch (final File repository, final File root, final String contextName, final String commitIdFrom, final String commitIdTo) {
         final String title = NbBundle.getMessage(SearchHistoryTopComponent.class, "LBL_SearchHistoryTopComponent.title", contextName);
         final RepositoryInfo info = RepositoryInfo.getInstance(repository);
-        Mutex.EVENT.readAccess(new Runnable() {
-            @Override
-            public void run () {
-                SearchHistoryTopComponent tc = new SearchHistoryTopComponent(repository, info, new File[] { root });
-                tc.setDisplayName(title);
-                tc.open();
-                tc.requestActive();
-                tc.setSearchCommitFrom(commitIdFrom);
-                tc.setSearchCommitTo(commitIdTo);
-                tc.search(true);
-            }
+        Mutex.EVENT.readAccess(() -> {
+            SearchHistoryTopComponent tc = new SearchHistoryTopComponent(repository, info, new File[] { root });
+            tc.setDisplayName(title);
+            tc.open();
+            tc.requestActive();
+            tc.setSearchCommitFrom(commitIdFrom);
+            tc.setSearchCommitTo(commitIdTo);
+            tc.search(true);
         });
     }
     
     public static void openSearch (final File repository, final File root, final String contextName, final int lineNumber) {
         final String title = NbBundle.getMessage(SearchHistoryTopComponent.class, "LBL_SearchHistoryTopComponent.title", contextName);
         final RepositoryInfo info = RepositoryInfo.getInstance(repository);
-        EventQueue.invokeLater(new Runnable() {
-            @Override
-            public void run () {
-                SearchHistoryTopComponent tc = new SearchHistoryTopComponent(repository, info, root, new SearchHistoryTopComponent.DiffResultsViewFactory() {
-                    @Override
-                    DiffResultsView createDiffResultsView(SearchHistoryPanel panel, List<RepositoryRevision> results) {
-                        return new DiffResultsViewForLine(panel, results, lineNumber);
-                    }
-                });
-                tc.setDisplayName(title);
-                tc.open();
-                tc.requestActive();
-                tc.search(true);
-                tc.activateDiffView(true);
-            }
+        EventQueue.invokeLater(() -> {
+            SearchHistoryTopComponent tc = new SearchHistoryTopComponent(repository, info, root,
+                    new SearchHistoryTopComponent.DiffResultsViewFactory() {
+                        @Override
+                        DiffResultsView createDiffResultsView(SearchHistoryPanel panel, List<RepositoryRevision> results) {
+                            return new DiffResultsViewForLine(panel, results, lineNumber);
+                        }
+                    });
+            tc.setDisplayName(title);
+            tc.open();
+            tc.requestActive();
+            tc.search(true);
+            tc.activateDiffView(true);
         });
     }
 
diff --git a/ide/libs.graalsdk/src/org/netbeans/libs/graalsdk/impl/GraalEngine.java b/ide/libs.graalsdk/src/org/netbeans/libs/graalsdk/impl/GraalEngine.java
index 15d8d35..6adc9cc 100644
--- a/ide/libs.graalsdk/src/org/netbeans/libs/graalsdk/impl/GraalEngine.java
+++ b/ide/libs.graalsdk/src/org/netbeans/libs/graalsdk/impl/GraalEngine.java
@@ -173,13 +173,17 @@
 
     @Override
     public <T> T getInterface(Object thiz, Class<T> clasz) {
-        if (thiz instanceof Value) {
-            return ((Value) thiz).as(clasz);
-        }
-        Value v = factory.ctx.ctx().asValue(thiz);
-        T ret = v.as(clasz);
-        if (ret != null) {
-            return ret;
+        try {
+            if (thiz instanceof Value) {
+                return ((Value) thiz).as(clasz);
+            }
+            Value v = factory.ctx.ctx().asValue(thiz);
+            T ret = v.as(clasz);
+            if (ret != null) {
+                return ret;
+            }
+        } catch (ClassCastException ex) {
+            // the interface is not supported on the value object; ignore.
         }
         if (clasz.isInstance(thiz)) {
             return clasz.cast(thiz);
diff --git a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java
index 7730a71..c45511e 100644
--- a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java
+++ b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java
@@ -457,10 +457,11 @@
     private static HitBreakpointInfo[] getBreakpointInfos(ExecutionHaltedInfo haltedInfo, JPDAThread thread) {
         ObjectVariable[] breakpointsHit = haltedInfo.breakpointsHit;
         ObjectVariable[] breakpointConditionExceptions = haltedInfo.breakpointConditionExceptions;
-        int n = breakpointsHit.length;
+        int n = (breakpointsHit != null) ? breakpointsHit.length : 0;
         HitBreakpointInfo[] breakpointInfos = null;
         for (int i = 0; i < n; i++) {
-            HitBreakpointInfo breakpointInfo = HitBreakpointInfo.create(breakpointsHit[i], breakpointConditionExceptions[i]);
+            ObjectVariable exception = (breakpointConditionExceptions != null) ? breakpointConditionExceptions[i] : null;
+            HitBreakpointInfo breakpointInfo = HitBreakpointInfo.create(breakpointsHit[i], exception);
             if (breakpointInfo != null) {
                 if (breakpointInfos == null) {
                     breakpointInfos = new HitBreakpointInfo[] { breakpointInfo };
diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHint.java b/java/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHint.java
index 41a3b13..c22faae 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHint.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHint.java
@@ -26,10 +26,10 @@
 import com.sun.source.tree.StatementTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
-import javax.lang.model.SourceVersion;
 import org.netbeans.api.java.source.CompilationInfo;
 import org.netbeans.spi.editor.hints.ErrorDescription;
 import org.netbeans.spi.editor.hints.Fix;
+import org.netbeans.spi.editor.hints.Severity;
 import org.netbeans.spi.java.hints.ErrorDescriptionFactory;
 import org.netbeans.spi.java.hints.Hint;
 import org.netbeans.spi.java.hints.HintContext;
@@ -37,8 +37,7 @@
 import org.netbeans.spi.java.hints.TriggerTreeKind;
 import org.openide.util.NbBundle.Messages;
 
-@Hint(displayName = "#DN_ForLoopToFunctionalHint", description = "#DESC_ForLoopToFunctionalHint", category = "general",
-        minSourceVersion = "8")
+@Hint(displayName = "#DN_ForLoopToFunctionalHint", description = "#DESC_ForLoopToFunctionalHint", category = "general", severity = Severity.HINT, minSourceVersion = "8")
 @Messages({
     "DN_ForLoopToFunctionalHint=Use Functional Operations",
     "DESC_ForLoopToFunctionalHint=Use functional operations instead of imperative style loop."
diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHintTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHintTest.java
index 5cb20d2..093c376 100644
--- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHintTest.java
+++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/mapreduce/ForLoopToFunctionalHintTest.java
@@ -56,7 +56,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -126,7 +126,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -180,7 +180,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("22:8-22:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("22:8-22:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("/*\n"
                 + " * To change this template, choose Tools | Templates\n"
@@ -237,7 +237,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -288,7 +288,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -341,7 +341,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -398,7 +398,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -455,7 +455,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -519,7 +519,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -583,7 +583,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("14:8-14:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("14:8-14:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -658,7 +658,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("12:8-12:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("12:8-12:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -725,7 +725,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("14:8-14:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("14:8-14:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -787,7 +787,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("14:8-14:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("14:8-14:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -859,7 +859,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("14:8-14:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("14:8-14:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package testdemo;\n"
                 + "\n"
@@ -928,7 +928,7 @@
                 + "")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("17:8-17:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("17:8-17:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package javatargettempapp;\n"
                 + "\n"
@@ -990,7 +990,7 @@
                 + "")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("17:8-17:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("17:8-17:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package javatargettempapp;\n"
                 + "\n"
@@ -1052,7 +1052,7 @@
                 + "")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("17:8-17:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("17:8-17:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("package javatargettempapp;\n"
                 + "\n"
@@ -1124,7 +1124,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("23:8-23:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("23:8-23:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("/*\n"
                 + " * To change this template, choose Tools | Templates\n"
@@ -1202,7 +1202,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("23:8-23:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("23:8-23:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("/*\n"
                 + " * To change this template, choose Tools | Templates\n"
@@ -1274,7 +1274,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("23:8-23:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("23:8-23:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("/*\n"
                 + " * To change this template, choose Tools | Templates\n"
@@ -1341,7 +1341,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .findWarning("23:8-23:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint())
+                .findWarning("23:8-23:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint())
                 .applyFix()
                 .assertOutput("/*\n"
                 + " * To change this template, choose Tools | Templates\n"
@@ -1406,7 +1406,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .assertNotContainsWarnings("23:8-23:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint());
+                .assertNotContainsWarnings("23:8-23:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint());
     }
 
     public void testNoHintDueToNEF() throws Exception {
@@ -1651,7 +1651,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .assertWarnings("15:8-15:11:verifier:" + Bundle.ERR_ForLoopToFunctionalHint());
+                .assertWarnings("15:8-15:11:hint:" + Bundle.ERR_ForLoopToFunctionalHint());
     }
 
     public void testNoHintDueToMethodThrowingException() throws Exception {
@@ -1789,7 +1789,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .assertNotContainsWarnings("23:8-23:11:verifier:Can use functional operation");
+                .assertNotContainsWarnings("23:8-23:11:hint:Can use functional operation");
 
     }
 
@@ -1832,7 +1832,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .assertNotContainsWarnings("23:8-23:11:verifier:Can use functional operation");
+                .assertNotContainsWarnings("23:8-23:11:hint:Can use functional operation");
 
     }
 
@@ -1873,7 +1873,7 @@
                 + "}")
                 .sourceLevel("1.8")
                 .run(ForLoopToFunctionalHint.class)
-                .assertNotContainsWarnings("23:8-23:11:verifier:Can use functional operation");
+                .assertNotContainsWarnings("23:8-23:11:hint:Can use functional operation");
 
     }
     
diff --git a/java/java.nativeimage.debugger/src/org/netbeans/modules/java/nativeimage/debugger/displayer/JavaVariablesDisplayer.java b/java/java.nativeimage.debugger/src/org/netbeans/modules/java/nativeimage/debugger/displayer/JavaVariablesDisplayer.java
index 191e2a9..5f7035e 100644
--- a/java/java.nativeimage.debugger/src/org/netbeans/modules/java/nativeimage/debugger/displayer/JavaVariablesDisplayer.java
+++ b/java/java.nativeimage.debugger/src/org/netbeans/modules/java/nativeimage/debugger/displayer/JavaVariablesDisplayer.java
@@ -47,6 +47,7 @@
     private static final String COMPRESSED_REF_REFIX = "_z_.";
     private static final String PUBLIC = "public";
     private static final String STRING_VALUE = "value";
+    private static final String STRING_CODER = "coder";
     private static final String HASH = "hash";
     private static final String UNSET = "<optimized out>";
 
@@ -240,6 +241,16 @@
         return null;
     }
 
+    private String readArray(NIVariable lengthVariable, int offset, int itemSize) {
+        int length = Integer.parseInt(lengthVariable.getValue());
+        String expressionPath = lengthVariable.getExpressionPath();
+        if (expressionPath != null && !expressionPath.isEmpty()) {
+            String addressExpr = "&" + expressionPath;
+            return debugger.readMemory(addressExpr, 4 + offset, length * itemSize); // length has 4 bytes
+        }
+        return null;
+    }
+
     private static NIVariable[] getObjectChildren(NIVariable[] children, int from, int to) {
         for (int i = 0; i < children.length; i++) {
             if (HUB.equals(children[i].getName())) {
@@ -290,16 +301,37 @@
         @Override
         public String getValue() {
             NIVariable pub = getVarsByName(var.getChildren()).get(PUBLIC);
-            Map<String, NIVariable> arrayInfo = getVarsByName(getVarsByName(pub.getChildren()).get(STRING_VALUE).getChildren());
+            Map<String, NIVariable> varChildren = getVarsByName(pub.getChildren());
+            Map<String, NIVariable> arrayInfo = getVarsByName(varChildren.get(STRING_VALUE).getChildren());
             arrayInfo = getVarsByName(arrayInfo.get(PUBLIC).getChildren());
             NIVariable arrayVariable = arrayInfo.get(ARRAY);
             NIVariable lengthVariable = arrayInfo.get(ARRAY_LENGTH);
-            String hexArray = readArray(lengthVariable, 2);
+            int length = Integer.parseInt(lengthVariable.getValue());
+            NIVariable coderVar = varChildren.get(STRING_CODER);
+            int coder = -1;
+            if (coderVar != null) {
+                String coderStr = coderVar.getValue();
+                int space = coderStr.indexOf(' ');
+                if (space > 0) {
+                    coderStr = coderStr.substring(0, space);
+                }
+                try {
+                    coder = Integer.parseInt(coderStr);
+                } catch (NumberFormatException ex) {
+                }
+            }
+            String hexArray = readArray(lengthVariable, coder == -1 ? 4 : 0, 2);
             if (hexArray != null) {
-                return parseUTF16(hexArray);
+                switch (coder) {
+                    case 0: // Compressed String on JDK 9+
+                        return parseLatin1(hexArray, length);
+                    case 1: // UTF-16 String on JDK 9+
+                        return parseUTF16(hexArray, length/2);
+                    default: // UTF-16 String on JDK 8
+                        return parseUTF16(hexArray, length);
+                }
             } else { // legacy code
                 String arrayExpression = getArrayExpression(arrayVariable);
-                int length = Integer.parseInt(lengthVariable.getValue());
                 char[] characters = new char[length];
                 try {
                     for (int i = 0; i < length; i++) {
@@ -313,10 +345,9 @@
             }
         }
 
-        private String parseUTF16(String hexArray) {
-            CharsetDecoder cd = Charset.forName("utf-16").newDecoder();
+        private String parseUTF16(String hexArray, int length) {
+            CharsetDecoder cd = Charset.forName("utf-16").newDecoder(); // NOI18N
             ByteBuffer buffer = ByteBuffer.allocate(2);
-            int length = hexArray.length() / 4;
             char[] characters = new char[length];
             int ih = 0;
             for (int i = 0; i < length; i++) {
@@ -337,6 +368,26 @@
             return new String(characters);
         }
 
+        private String parseLatin1(String hexArray, int length) {
+            CharsetDecoder cd = Charset.forName("latin1").newDecoder(); // NOI18N
+            ByteBuffer buffer = ByteBuffer.allocate(1);
+            char[] characters = new char[length];
+            int ih = 0;
+            for (int i = 0; i < length; i++) {
+                byte b = parseByte(hexArray, ih);
+                ih += 2;
+                buffer.rewind();
+                buffer.put(b);
+                buffer.rewind();
+                try {
+                    char c = cd.decode(buffer).get();
+                    characters[i] = c;
+                } catch (CharacterCodingException ex) {
+                }
+            }
+            return new String(characters);
+        }
+
         private byte parseByte(String hexArray, int offset) {
             String hex = new String(new char[] {hexArray.charAt(offset), hexArray.charAt(offset + 1)});
             return (byte) (Integer.parseInt(hex, 16) & 0xFF);
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
index 3316ce9..b94657d 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
@@ -121,6 +121,8 @@
  */
 public final class TreeUtilities {
     
+    private static final Logger LOG = Logger.getLogger(TreeUtilities.class.getName());
+
     /**{@link Kind}s that are represented by {@link ClassTree}.
      * 
      * @since 0.67
@@ -932,7 +934,7 @@
             Method m = Enter.class.getDeclaredMethod("unenter", JCCompilationUnit.class, JCTree.class);
             m.invoke(Enter.instance(ctx), cut, tree);
         } catch (Throwable t) {
-            t.printStackTrace();
+            LOG.log(Level.FINE, null, t);
         }
     }