From 616f6e5ba3241df337f80490f63f81da6a83fb6e Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Wed, 7 Oct 2026 03:03:08 +0200 Subject: [PATCH] Stable ordering for legacy hint items in popup Legacy Fix impls which were not EnhancedFixes yet were sorted with the same key. This made made their list position unstable. Their text is now appended to the key which should produce better results. bonus: While testing I noticed that some fixes didn't get deduplicated due to the fact that they didn't implement proper equals/hashCode. Those are now records. --- .../modules/editor/hints/FixData.java | 19 +++--- .../errors/SearchClassDependencyInRepo.java | 66 ++++--------------- 2 files changed, 20 insertions(+), 65 deletions(-) diff --git a/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/FixData.java b/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/FixData.java index b6fe60d257e4..5a72069dc893 100644 --- a/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/FixData.java +++ b/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/FixData.java @@ -20,7 +20,6 @@ package org.netbeans.modules.editor.hints; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.LinkedHashSet; @@ -38,35 +37,33 @@ public class FixData extends CompoundLazyFixList { public FixData(LazyFixList errorFixes, LazyFixList otherFixes) { - super(Arrays.asList(errorFixes, otherFixes)); + super(List.of(errorFixes, otherFixes)); } public List getSortedFixes() { LazyFixList errorFixes = delegates.get(0); LazyFixList otherFixes = delegates.get(1); - List result = new LinkedList(); + List result = new LinkedList<>(); - result.addAll(sortFixes(new LinkedHashSet(errorFixes.getFixes()))); - result.addAll(sortFixes(new LinkedHashSet(otherFixes.getFixes()))); + result.addAll(sortFixes(new LinkedHashSet<>(errorFixes.getFixes()))); + result.addAll(sortFixes(new LinkedHashSet<>(otherFixes.getFixes()))); return result; } private List sortFixes(Collection fixes) { - List result = new ArrayList(fixes); - + List result = new ArrayList<>(fixes); result.sort(new FixComparator()); - return result; } private static final String DEFAULT_SORT_TEXT = "\uFFFF"; private static CharSequence getSortText(Fix f) { - if (f instanceof EnhancedFix) { - return ((EnhancedFix) f).getSortText(); + if (f instanceof EnhancedFix ef) { + return ef.getSortText(); } else { - return DEFAULT_SORT_TEXT; + return DEFAULT_SORT_TEXT + f.getText(); } } private static final class FixComparator implements Comparator { diff --git a/java/maven.hints/src/org/netbeans/modules/maven/hints/errors/SearchClassDependencyInRepo.java b/java/maven.hints/src/org/netbeans/modules/maven/hints/errors/SearchClassDependencyInRepo.java index 74abed62c1b2..8b4461c9bab5 100644 --- a/java/maven.hints/src/org/netbeans/modules/maven/hints/errors/SearchClassDependencyInRepo.java +++ b/java/maven.hints/src/org/netbeans/modules/maven/hints/errors/SearchClassDependencyInRepo.java @@ -41,7 +41,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -94,12 +93,13 @@ public SearchClassDependencyInRepo() { @Override public Set getCodes() { - return new HashSet(Arrays.asList( - MODULE_DOES_NOT_READ, - "compiler.err.cant.resolve",//NOI18N - "compiler.err.cant.resolve.location",//NOI18N - "compiler.err.doesnt.exist",//NOI18N - "compiler.err.not.stmt"));//NOI18N + return Set.of( + MODULE_DOES_NOT_READ, + "compiler.err.cant.resolve", //NOI18N + "compiler.err.cant.resolve.location", //NOI18N + "compiler.err.doesnt.exist", //NOI18N + "compiler.err.not.stmt" //NOI18N + ); } @@ -445,17 +445,7 @@ public void cancel() { cancel.set(true); } - static final class MavenFixImport implements EnhancedFix { - - private final Project mavProj; - private final NBVersionInfo nbvi; - private final boolean test; - - public MavenFixImport(Project mavProj, NBVersionInfo nbvi, boolean test) { - this.mavProj = mavProj; - this.nbvi = nbvi; - this.test = test; - } + static record MavenFixImport(Project mavProj, NBVersionInfo nbvi, boolean test) implements EnhancedFix { @Override public CharSequence getSortText() { @@ -476,28 +466,12 @@ public ChangeInfo implement() throws Exception { ModelUtils.addDependency(mavProj.getProjectDirectory().getFileObject("pom.xml"), nbvi.getGroupId(), nbvi.getArtifactId(), nbvi.getVersion(), nbvi.getType(), test ? "test" : null, null, true);//NOI18N - RequestProcessor.getDefault().post(new Runnable() { - - @Override - public void run() { - mavProj.getLookup().lookup(NbMavenProject.class).triggerDependencyDownload(); - } - }); + RequestProcessor.getDefault().post(mavProj.getLookup().lookup(NbMavenProject.class)::triggerDependencyDownload); return null; } } - static final class MavenSearchFix implements EnhancedFix { - - private final Project mavProj; - private final String clazz; - private final boolean test; - - public MavenSearchFix(Project mavProj, String clazz, boolean test) { - this.mavProj = mavProj; - this.clazz = clazz; - this.test = test; - } + static record MavenSearchFix(Project mavProj, String clazz, boolean test) implements EnhancedFix { @Override public CharSequence getSortText() { @@ -540,13 +514,7 @@ public void run() { ModelUtils.addDependency(mavProj.getProjectDirectory().getFileObject("pom.xml"), nbvi.getGroupId(), nbvi.getArtifactId(), nbvi.getVersion(), nbvi.getType(), test ? "test" : null, null, true);//NOI18N - RequestProcessor.getDefault().post(new Runnable() { - - @Override - public void run() { - mavProj.getLookup().lookup(NbMavenProject.class).triggerDependencyDownload(); - } - }); + RequestProcessor.getDefault().post(mavProj.getLookup().lookup(NbMavenProject.class)::triggerDependencyDownload); } } }; @@ -559,17 +527,7 @@ public void run() { } } - static final class AddRequiresFix implements EnhancedFix { - - private final NbMavenProject prj; - private final String moduleName; - private final Artifact artifact; - - public AddRequiresFix(NbMavenProject prj, String moduleName, Artifact artifact) { - this.prj = prj; - this.moduleName = moduleName; - this.artifact = artifact; - } + static record AddRequiresFix(NbMavenProject prj, String moduleName, Artifact artifact) implements EnhancedFix { @Override public CharSequence getSortText() {