From 1d5531c39f3cc14a37ea976b3e8b3ff9fdc2062a Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Mon, 21 Sep 2026 07:17:54 +0200 Subject: [PATCH] Consistently sort projects by path --- .../modules/project/ui/OpenProjectList.java | 49 +------------------ .../project/ui/TemplateChooserPanelGUI.java | 2 +- .../project/ui/actions/SetMainProject.java | 4 +- .../ui/ProjectsRootNodePhysicalViewTest.java | 2 +- 4 files changed, 5 insertions(+), 52 deletions(-) diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java b/ide/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java index e6d4f0297078..982cb07f7156 100644 --- a/ide/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java +++ b/ide/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java @@ -123,11 +123,7 @@ public final class OpenProjectList { */ static final Mutex MUTEX = new Mutex(); - public static Comparator projectByDisplayName() { - return new ProjectByDisplayNameComparator(); - } - - static Comparator projectByPath() { + public static Comparator projectByPath() { return new ProjectByPathComparator(); } @@ -1926,49 +1922,6 @@ public URL getURL() { } - private static class ProjectByDisplayNameComparator implements Comparator { - - private static final Comparator COLLATOR = Collator.getInstance(); - - // memoize results since it could be called >1 time per project: - private final Map names = new HashMap(); - private String getDisplayName(Project p) { - String n = names.get(p); - if (n == null) { - n = ProjectUtils.getInformation(p).getDisplayName(); - names.put(p, n); - } - return n; - } - - @Override - public int compare(Project p1, Project p2) { -// Uncoment to make the main project be the first one -// but then needs to listen to main project change -// if ( OpenProjectList.getDefault().isMainProject( p1 ) ) { -// return -1; -// } -// -// if ( OpenProjectList.getDefault().isMainProject( p2 ) ) { -// return 1; -// } - - String n1 = getDisplayName(p1); - String n2 = getDisplayName(p2); - if (n1 != null && n2 != null) { - return COLLATOR.compare(n1, n2); - } else if (n1 == null && n2 != null) { - log(Level.WARNING, p1 + ": ProjectInformation.getDisplayName() should not return null!"); - return -1; - } else if (n1 != null && n2 == null) { - log(Level.WARNING, p2 + ": ProjectInformation.getDisplayName() should not return null!"); - return 1; - } - return 0; // both null - - } - - } private static class ProjectByPathComparator implements Comparator { @Override public int compare(Project p1, Project p2) { diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java b/ide/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java index 5ea065863b29..5370324c4aa7 100644 --- a/ide/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java +++ b/ide/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java @@ -119,7 +119,7 @@ private void initValues( @NullAllowed Project p ) { DefaultComboBoxModel projectsModel; if (includeTemplatesWithProjects) { Project openProjects[] = OpenProjectList.getDefault().getOpenProjects(); - Arrays.sort(openProjects, OpenProjectList.projectByDisplayName()); + Arrays.sort(openProjects, OpenProjectList.projectByPath()); projectsModel = new DefaultComboBoxModel( openProjects ); selectProject(p); } else { diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/actions/SetMainProject.java b/ide/projectui/src/org/netbeans/modules/project/ui/actions/SetMainProject.java index 6dfd4daab9a7..bf1330035c6a 100644 --- a/ide/projectui/src/org/netbeans/modules/project/ui/actions/SetMainProject.java +++ b/ide/projectui/src/org/netbeans/modules/project/ui/actions/SetMainProject.java @@ -75,7 +75,7 @@ public class SetMainProject extends ProjectAction implements PropertyChangeListe private static Preferences prefs() { return NbPreferences.forModule(SetMainProject.class); } - private static RequestProcessor RP = new RequestProcessor(SetMainProject.class); + private static final RequestProcessor RP = new RequestProcessor(SetMainProject.class); protected JMenu subMenu; private boolean empty; @@ -162,7 +162,7 @@ public void run() { "LBL_NoneMainProject_Name=&None" }) private void createSubMenu(Project[] projects) { - Arrays.sort(projects, OpenProjectList.projectByDisplayName()); + Arrays.sort(projects, OpenProjectList.projectByPath()); // Enable disable the action according to number of open projects if (projects.length == 0) { diff --git a/ide/projectui/test/unit/src/org/netbeans/modules/project/ui/ProjectsRootNodePhysicalViewTest.java b/ide/projectui/test/unit/src/org/netbeans/modules/project/ui/ProjectsRootNodePhysicalViewTest.java index e53a8884791d..b9578450653e 100644 --- a/ide/projectui/test/unit/src/org/netbeans/modules/project/ui/ProjectsRootNodePhysicalViewTest.java +++ b/ide/projectui/test/unit/src/org/netbeans/modules/project/ui/ProjectsRootNodePhysicalViewTest.java @@ -133,7 +133,7 @@ private Node doBehaviourOfProjectsNode() throws InterruptedException { for (Node n : view.getChildren().getNodes(true)) { TestSupport.TestProject p = n.getLookup().lookup(TestSupport.TestProject.class); - assertNull("No project of this type, yet", p); + assertNull("No project of this type, yet: " + n, p); } // let project open code run