This is an automated email from the ASF dual-hosted git repository.

mbien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d45c28aac `SourceUtils.findMatchingChild` should never return a folder
     new aae13e97d6 Merge pull request #5739 from 
jglick/SourceUtils.findMatchingChild
5d45c28aac is described below

commit 5d45c28aac066f568bcbb1dc5e0e800c47f9e601
Author: Jesse Glick <jgl...@apache.org>
AuthorDate: Wed Mar 29 11:30:34 2023 -0400

    `SourceUtils.findMatchingChild` should never return a folder
---
 .../src/org/netbeans/api/java/source/SourceUtils.java        | 12 ++++++++----
 .../src/org/netbeans/api/java/source/SourceUtilsTest.java    |  9 +++++----
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git 
a/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java 
b/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java
index e58a6a257c..dfb02790c6 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/SourceUtils.java
@@ -628,7 +628,9 @@ public class SourceUtils {
     private static FileObject findMatchingChild(String sourceFileName, 
Collection<FileObject> folders, boolean caseSensitive) {
         final Match matchSet = caseSensitive ? new 
CaseSensitiveMatch(sourceFileName) : new CaseInsensitiveMatch(sourceFileName);
         for (FileObject folder : folders) {
-            for (FileObject child : folder.getChildren()) {
+            FileObject[] children = folder.getChildren();
+            Arrays.sort(children, 
Comparator.comparing(FileObject::getNameExt)); // for determinism
+            for (FileObject child : children) {
                 if (matchSet.apply(child)) {
                     return child;
                 }
@@ -684,6 +686,9 @@ public class SourceUtils {
         }
 
         final boolean apply(final FileObject fo) {
+            if (fo.isFolder()) {
+                return false;
+            }
             if (fo.getNameExt().equals(name)) {
                 return true;
             }
@@ -1127,9 +1132,8 @@ public class SourceUtils {
     }
 
     /**
-     * Returns candidate filenames given a classname. The return value is 
either
-     * a String (top-level class, no $) or List&lt;String> as the JLS permits 
$ in
-     * class names.
+     * Returns candidate filenames given a classname.
+     * @return a single name (top-level class, no $) or multiple as the JLS 
permits $ in class names.
      */
     private static List<String> getSourceFileNames(String classFileName) {
         int index = classFileName.lastIndexOf('$');
diff --git 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
index 0a12ba30d8..90da3063a1 100644
--- 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
+++ 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/SourceUtilsTest.java
@@ -321,6 +321,7 @@ public class SourceUtilsTest extends ClassIndexTestCase {
         FileObject srcInDefPkg = src.createData("Foo","java");
         assertNotNull(srcInDefPkg);
         FileObject sourceFile = 
src.createFolder("org").createFolder("me").createData("Test", "java");
+        src.getFileObject("org/me").createFolder("Test"); // 
https://github.com/apache/netbeans/issues/5738
         assertNotNull(sourceFile);
         ClasspathInfo cpInfo = 
ClasspathInfo.create(ClassPathSupport.createClassPath(new FileObject[0]), 
ClassPathSupport.createClassPath(new FileObject[0]),
             ClassPathSupport.createClassPath(new FileObject[]{src}));
@@ -337,16 +338,16 @@ public class SourceUtilsTest extends ClassIndexTestCase {
         ElementHandle<? extends Element> handle = 
ElementHandle.createTypeElementHandle(ElementKind.CLASS, "org.me.Test");
         assertNotNull (handle);
         FileObject result = SourceUtils.getFile(handle, cpInfo);
-        assertNotNull(result);
+        assertEquals(sourceFile, result);
         handle = ElementHandle.createTypeElementHandle(ElementKind.CLASS, 
"org.me.Test$Inner");
         result = SourceUtils.getFile(handle,cpInfo);
-        assertNotNull(result);
+        assertEquals(sourceFile, result);
         handle = ElementHandle.createPackageElementHandle("org.me");
         result = SourceUtils.getFile(handle,cpInfo);
-        assertNotNull(result);
+        assertEquals(sourceFile.getParent(), result);
         handle = ElementHandle.createTypeElementHandle(ElementKind.CLASS, 
"Foo");
         result = SourceUtils.getFile(handle,cpInfo);
-        assertNotNull(result);
+        assertEquals(srcInDefPkg, result);
     }
 
     public void testGetMainClasses() throws Exception {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-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