diff --git a/enterprise/payara.tooling/nbproject/project.properties b/enterprise/payara.tooling/nbproject/project.properties
index 0f4ec98bc91a..0d2669d99ce7 100644
--- a/enterprise/payara.tooling/nbproject/project.properties
+++ b/enterprise/payara.tooling/nbproject/project.properties
@@ -14,5 +14,5 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-javac.source=1.8
+javac.release=21
javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaSEPlatform.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaSEPlatform.java
index 67d45035594b..bad93c1fcb12 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaSEPlatform.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaSEPlatform.java
@@ -50,7 +50,9 @@ public enum JavaSEPlatform {
/** JavaSE 17. */
v17,
/** JavaSE 21. */
- v21;
+ v21,
+ /** JavaSE 25. */
+ v25;
// Class attributes //
/** Payara JavaEE platform enumeration length. */
@@ -92,6 +94,9 @@ public enum JavaSEPlatform {
/** A String representation of v21 value. */
static final String V21_STR = "21";
+ /** A String representation of v25 value. */
+ static final String V25_STR = "25";
+
/**
* Stored String values for backward String
* conversion.
@@ -136,22 +141,19 @@ public static JavaSEPlatform toValue(final String platformName) {
*/
@Override
public String toString() {
- switch (this) {
- case v1_1: return V1_1_STR;
- case v1_2: return V1_2_STR;
- case v1_3: return V1_3_STR;
- case v1_4: return V1_4_STR;
- case v1_5: return V1_5_STR;
- case v1_6: return V1_6_STR;
- case v1_7: return V1_7_STR;
- case v1_8: return V1_8_STR;
- case v11: return V11_STR;
- case v17: return V17_STR;
- case v21: return V21_STR;
- // This is unrecheable. Being here means this class does not handle
- // all possible values correctly.
- default: throw new ServerConfigException(
- ServerConfigException.INVALID_SE_PLATFORM_VERSION);
- }
+ return switch (this) {
+ case v1_1 -> V1_1_STR;
+ case v1_2 -> V1_2_STR;
+ case v1_3 -> V1_3_STR;
+ case v1_4 -> V1_4_STR;
+ case v1_5 -> V1_5_STR;
+ case v1_6 -> V1_6_STR;
+ case v1_7 -> V1_7_STR;
+ case v1_8 -> V1_8_STR;
+ case v11 -> V11_STR;
+ case v17 -> V17_STR;
+ case v21 -> V21_STR;
+ case v25 -> V25_STR;
+ };
}
}
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV6.xml b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV6.xml
index a8318a94eee3..8fe84c63b8c4 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV6.xml
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV6.xml
@@ -35,6 +35,10 @@ under the License.
+
+
+
+
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV7.xml b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV7.xml
index b003efb894ed..3090800f1be6 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV7.xml
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/PayaraV7.xml
@@ -25,6 +25,13 @@ under the License.
+
+
+
+
+
+
+
diff --git a/ide/editor/src/org/netbeans/modules/editor/EditorModule.java b/ide/editor/src/org/netbeans/modules/editor/EditorModule.java
index 12f5fb052ca8..eb8f3f0848ca 100644
--- a/ide/editor/src/org/netbeans/modules/editor/EditorModule.java
+++ b/ide/editor/src/org/netbeans/modules/editor/EditorModule.java
@@ -250,6 +250,8 @@ public void run() {
if (topComponentRegistryListener != null) {
TopComponent.getRegistry().removePropertyChangeListener(topComponentRegistryListener);
}
+
+ // TODO AppContext and kitRegistryKey don't exist anymore in JDK 27+
// unregister our registry
try {
diff --git a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
index 9205dd65fc92..8fa6e264307e 100644
--- a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
+++ b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
@@ -180,6 +180,7 @@
import org.netbeans.api.project.ui.OpenProjects;
import org.netbeans.api.sendopts.CommandLine;
import org.netbeans.junit.NbTestCase;
+import org.netbeans.junit.RandomlyFails;
import org.netbeans.modules.java.hints.infrastructure.JavaErrorProvider;
import static org.netbeans.modules.java.lsp.server.LspTestUtils.tripleSlashUri;
import org.netbeans.modules.java.lsp.server.TestCodeLanguageClient;
@@ -4730,6 +4731,7 @@ private Launcher createClientLauncherWithLogging(LanguageClient
return builder.create();
}
+ @RandomlyFails // causes frequent CI failures
public void testChangeMethodParameters() throws Exception {
File src = new File(getWorkDir(), "a/Foo.java");
src.getParentFile().mkdirs();
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CompilationInfoImpl.java b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CompilationInfoImpl.java
index 9b838b417d21..1269c6c7cbcf 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CompilationInfoImpl.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/CompilationInfoImpl.java
@@ -518,6 +518,10 @@ void setChangedMethod (final Pair changedMethod) {
userCache.remove(CacheClearPolicy.ON_TASK_END);
userCache.remove(CacheClearPolicy.ON_CHANGE);
}
+
+ boolean isDetached() {
+ return isDetached;
+ }
/**
* Sets the {@link CompilationUnitTree}
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParser.java b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParser.java
index 158baed2b23b..6b7483c1b31e 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParser.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParser.java
@@ -423,7 +423,7 @@ private void parseImpl(
boolean needsFullReparse = true;
if (supportsReparse) {
final Pair _changedMethod = changedMethod.getAndSet(null);
- if (_changedMethod != null && ciImpl != null) {
+ if (_changedMethod != null && ciImpl != null && !ciImpl.isDetached()) {
LOGGER.log(Level.FINE, "\t:trying partial reparse:\n{0}", _changedMethod.first().getText()); //NOI18N
PartialReparser reparser = Lookup.getDefault().lookup(PartialReparser.class);
needsFullReparse = !reparser.reparseMethod(ciImpl, snapshot, _changedMethod.second(), _changedMethod.first().getText());
@@ -683,7 +683,7 @@ Phase moveToPhase (final Phase phase, final CompilationInfoImpl currentInfo, Lis
currentInfo.setCompilationUnit(unit);
final Document doc = currentInfo.getDocument();
- if (doc != null && supportsReparse) {
+ if (doc != null && supportsReparse && !currentInfo.isDetached()) {
final FindMethodRegionsVisitor v = new FindMethodRegionsVisitor(doc,Trees.instance(currentInfo.getJavacTask()).getSourcePositions(),this.parserCanceled, unit);
doc.render(v);
synchronized (positions) {
diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PartialReparseTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PartialReparseTest.java
index ab2925c30df8..064e55bd4776 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PartialReparseTest.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/parsing/PartialReparseTest.java
@@ -24,6 +24,7 @@
import com.sun.source.tree.Tree.Kind;
import com.sun.source.util.TreePath;
import com.sun.source.util.TreePathScanner;
+import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
@@ -52,12 +53,15 @@
import org.netbeans.modules.java.source.TestUtil;
import org.openide.util.SharedClassObject;
import org.netbeans.api.editor.mimelookup.test.MockMimeLookup;
+import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.CompilationInfo;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.SourceUtils;
+import org.netbeans.modules.java.preprocessorbridge.api.JavaSourceUtil;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.cookies.EditorCookie;
+import org.openide.util.Exceptions;
/**
*
@@ -380,12 +384,38 @@ public enum E {
info -> {});
}
+ public void testTaggedControllerDoesNotBreakPartialReparse() throws Exception {
+ doRunTest("""
+ package test;
+ public class Test {
+ void t() {
+ java.util.List.of("a").stream().^^
+ }
+ }
+ """,
+ "filter(predicate)",
+ info -> {},
+ file -> {
+ try {
+ CompilationController cc = (CompilationController)
+ JavaSourceUtil.createControllerHandle(file, 0, null)
+ .getCompilationController();
+ cc.toPhase(Phase.RESOLVED);
+ } catch (IOException ex) {
+ throw new AssertionError(ex.getMessage(), ex);
+ }
+ });
+ }
+
private void doRunTest(String code, String inject) throws Exception {
doRunTest(code, inject, info -> {});
}
private void doRunTest(String code, String inject, Consumer callback) throws Exception {
+ doRunTest(code, inject, callback, file -> {});
+ }
+ private void doRunTest(String code, String inject, Consumer callback, Consumer runBeforeModification) throws Exception {
FileObject srcDir = FileUtil.createFolder(getWorkDir());
FileObject src = srcDir.createFolder("test").createData("Test.java");
@@ -405,6 +435,8 @@ private void doRunTest(String code, String inject, Consumer cal
callback.accept(cc);
}, true);
+ runBeforeModification.accept(src);
+
// replace snippet and run again
replaceSourceSnippetInDoc(doc, code, inject);
AtomicReference> actualTree = new AtomicReference<>();
diff --git a/java/maven/src/org/netbeans/modules/maven/api/archetype/ArchetypeWizards.java b/java/maven/src/org/netbeans/modules/maven/api/archetype/ArchetypeWizards.java
index 39b25af81fd3..e10f6238b82e 100644
--- a/java/maven/src/org/netbeans/modules/maven/api/archetype/ArchetypeWizards.java
+++ b/java/maven/src/org/netbeans/modules/maven/api/archetype/ArchetypeWizards.java
@@ -24,7 +24,6 @@
import java.util.Map;
import java.util.Set;
import org.netbeans.api.annotations.common.NullAllowed;
-import org.netbeans.api.project.Project;
import org.netbeans.api.templates.TemplateRegistration;
import org.netbeans.modules.maven.model.ModelOperation;
import org.netbeans.modules.maven.model.pom.POMModel;
@@ -32,7 +31,6 @@
import org.netbeans.modules.maven.newproject.BasicWizardPanel;
import org.netbeans.modules.maven.newproject.MavenWizardIterator;
import org.netbeans.validation.api.ui.ValidationGroup;
-import org.netbeans.validation.api.ui.ValidationGroupProvider;
import org.openide.WizardDescriptor;
import org.openide.filesystems.FileObject;
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/ArchetypeWizardUtils.java b/java/maven/src/org/netbeans/modules/maven/newproject/ArchetypeWizardUtils.java
index 6a787e10d966..58369f5d05a9 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/ArchetypeWizardUtils.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/ArchetypeWizardUtils.java
@@ -23,7 +23,6 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -64,8 +63,6 @@ public class ArchetypeWizardUtils {
/** {@code Map} of custom archetype properties to define. */
public static final String ADDITIONAL_PROPS = "additionalProps"; // NOI18N
- private static final Logger LOG = Logger.getLogger(ArchetypeWizardUtils.class.getName());
-
private ArchetypeWizardUtils() {
}
@@ -87,12 +84,12 @@ private static void runArchetype(File directory, ProjectInfo vi, Archetype arch,
config.setProperty("artifactId", vi.artifactId); //NOI18N
config.setProperty("version", vi.version); //NOI18N
final String pack = vi.packageName;
- if (pack != null && pack.trim().length() > 0) {
+ if (pack != null && !pack.isBlank()) {
config.setProperty("package", pack); //NOI18N
}
config.setProperty("basedir", directory.getAbsolutePath());//NOI18N
- Map baseprops = new HashMap(config.getProperties());
+ Map baseprops = new HashMap<>(config.getProperties());
if (additional != null) {
for (Map.Entry entry : additional.entrySet()) {
@@ -163,7 +160,7 @@ public static void createFromArchetype(File projDir, ProjectInfo vi, Archetype a
if (parent == null) {
throw new IOException("no parent of " + projDir);
}
- if (updateLastUsedProjectDir && parent != null && parent.exists()) {
+ if (updateLastUsedProjectDir && parent.exists()) {
ProjectChooser.setProjectsFolder(parent);
}
if (!parent.isDirectory() && !parent.mkdirs()) {
@@ -217,9 +214,7 @@ private static void processProjectFolder(final FileObject fo) {
if (watch != null) {
watch.downloadDependencyAndJavadocSource(false);
}
- } catch (IOException ex) {
- Exceptions.printStackTrace(ex);
- } catch (IllegalArgumentException ex) {
+ } catch (IOException | IllegalArgumentException ex) {
Exceptions.printStackTrace(ex);
}
}
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/MavenWizardIterator.java b/java/maven/src/org/netbeans/modules/maven/newproject/MavenWizardIterator.java
index 84e8909343b5..118b92e2bceb 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/MavenWizardIterator.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/MavenWizardIterator.java
@@ -93,8 +93,8 @@ public void initialize(WizardDescriptor wiz) {
}
index = 0;
ValidationGroup vg = ValidationGroup.create(new WizardDescriptorAdapter(wiz));
- panels = new ArrayList>();
- List steps = new ArrayList();
+ panels = new ArrayList<>();
+ List steps = new ArrayList<>();
if (archetype == null) {
panels.add(new ChooseWizardPanel());
steps.add(LBL_CreateProjectStep());
@@ -104,7 +104,7 @@ public void initialize(WizardDescriptor wiz) {
for (int i = 0; i < panels.size(); i++) {
JComponent c = (JComponent) panels.get(i).getComponent();
c.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i);
- c.putClientProperty(WizardDescriptor.PROP_CONTENT_DATA, steps.toArray(new String[0]));
+ c.putClientProperty(WizardDescriptor.PROP_CONTENT_DATA, steps.toArray(String[]::new));
}
if (archetype != null) {
wiz.putProperty(PROP_ARCHETYPE, archetype);
diff --git a/javafx/javafx2.kit/src/org/netbeans/modules/javafx2/kit/JavaFXWizardIterator.java b/javafx/javafx2.kit/src/org/netbeans/modules/javafx2/kit/JavaFXWizardIterator.java
index 3f9091d2f903..c22c39384517 100644
--- a/javafx/javafx2.kit/src/org/netbeans/modules/javafx2/kit/JavaFXWizardIterator.java
+++ b/javafx/javafx2.kit/src/org/netbeans/modules/javafx2/kit/JavaFXWizardIterator.java
@@ -53,6 +53,8 @@ public static WizardDescriptor.InstantiatingIterator> openJFXSimple() {
private static WizardDescriptor.InstantiatingIterator> definedFXArchetype(String g, String a, String v, String name) {
Map props = new HashMap<>();
props.put("add-debug-configuration", "Y");
+ props.put("javafx-version", "21.0.9");
+ props.put("javafx-maven-plugin-version", "0.0.8");
return ArchetypeWizards.definedArchetype(g, a, v, null, name, props);
}
diff --git a/javafx/javafx2.project/src/org/netbeans/modules/javafx2/project/Bundle.properties b/javafx/javafx2.project/src/org/netbeans/modules/javafx2/project/Bundle.properties
index bb99c9f393fd..b0c4c8c24af3 100644
--- a/javafx/javafx2.project/src/org/netbeans/modules/javafx2/project/Bundle.properties
+++ b/javafx/javafx2.project/src/org/netbeans/modules/javafx2/project/Bundle.properties
@@ -291,7 +291,7 @@ TXT_PanelOptions_Preloader_Project_Name=JavaFXApplication1-Preloader
LBL_PanelOptions_Manage_Button=&Manage Platforms...
TXT_SetupFXPlatformProgress=Setting-up JavaFX enabled Java platform...
-WARN_PanelOptionsVisual.notFXPlatform=Failed to automatically set-up a JavaFX Platform.
Please go to Platform Manager, create a non-default Java SE platform, then go to the JavaFX tab,
enable JavaFX and fill in the paths to valid JavaFX SDK and JavaFX Runtime.
Note: JavaFX SDK can be downloaded from JavaFX website.
+WARN_PanelOptionsVisual.notFXPlatform=Select a JDK containing Javafx.
Use Manage Platforms... to register more JDKs.
MSG_PreloaderInaccessible=
MSG_ComboNoPreloaderClassAvailable=
LBL_Platform_ComboBox=JavaFX Platform:
diff --git a/platform/api.search/src/org/netbeans/modules/search/ContextView.java b/platform/api.search/src/org/netbeans/modules/search/ContextView.java
index 86486ea5b4ff..a464f0c85d38 100644
--- a/platform/api.search/src/org/netbeans/modules/search/ContextView.java
+++ b/platform/api.search/src/org/netbeans/modules/search/ContextView.java
@@ -25,7 +25,6 @@
import java.awt.EventQueue;
import java.awt.Rectangle;
import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
import static java.lang.Thread.NORM_PRIORITY;
import java.util.Map;
import java.util.WeakHashMap;
@@ -53,6 +52,7 @@
import org.openide.explorer.ExplorerManager;
import org.openide.filesystems.FileObject;
import org.openide.nodes.Node;
+import org.openide.text.CloneableEditorSupport;
import org.openide.text.NbDocument;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
@@ -450,8 +450,8 @@ public void setText(final String text,
* (in this case, MIME-type only) must be set _before_ the text
* is set.
*/
- if ((editorMimeType == null) || !editorMimeType.equals(mimeType)) {
- editorPane.setContentType(mimeType);
+ if (editorMimeType == null || !editorMimeType.equals(mimeType)) {
+ editorPane.setEditorKit(CloneableEditorSupport.getEditorKit(mimeType));
editorMimeType = mimeType;
}
editorPane.setText(text);
@@ -488,12 +488,8 @@ public void run() {
if (location != null) {
final Document document = editorPane.getDocument();
- if (document instanceof StyledDocument) {
- StyledDocument styledDocument
- = (StyledDocument) document;
- int cursorOffset = getCursorOffset(
- (StyledDocument) document,
- location.getLine() - 1);
+ if (document instanceof StyledDocument sd) {
+ int cursorOffset = getCursorOffset(sd, location.getLine() - 1);
int startOff = cursorOffset + location.getColumn() - 1;
int endOff = startOff + location.getMarkLength();
editorPane.setSelectionStart(startOff);
diff --git a/platform/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java b/platform/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java
index 4379ace3e929..042870c0e8f7 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java
@@ -598,7 +598,7 @@ private TopComponent getTopComponentPersistentForID(String stringId, boolean des
private final Set warnedIDs = Collections.synchronizedSet(new HashSet<>());
/** Avoid printing dozens of warnings about the same ID in one IDE session. */
private Level warningLevelForDeserTC(String id) {
- return warnedIDs.add(id) ? Level.WARNING : Level.FINE;
+ return warnedIDs.add(id) ? Level.INFO : Level.FINE;
}
/** @return Searches for TopComponent with given string id and returns
diff --git a/platform/core.windows/src/org/netbeans/core/windows/view/ui/DocumentsDlg.java b/platform/core.windows/src/org/netbeans/core/windows/view/ui/DocumentsDlg.java
index ea3463801647..a86e04a678ff 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/view/ui/DocumentsDlg.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/view/ui/DocumentsDlg.java
@@ -25,11 +25,8 @@
import java.awt.Image;
import java.awt.Window;
import java.awt.event.ActionEvent;
-import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
@@ -87,7 +84,7 @@ private DocumentsDlg () {
initComponents();
// Internationalize.
- Mnemonics.setLocalizedText(jButtonActivate, NbBundle.getMessage(DocumentsDlg.class, "LBL_Activate"));
+ Mnemonics.setLocalizedText(jButtonActivate, NbBundle.getMessage(DocumentsDlg.class, "LBL_Activate"));
Mnemonics.setLocalizedText(jButtonClose, NbBundle.getMessage(DocumentsDlg.class, "LBL_CloseDocuments"));
Mnemonics.setLocalizedText(jButtonSave, NbBundle.getMessage(DocumentsDlg.class, "LBL_SaveDocuments"));
Mnemonics.setLocalizedText(explorerLabel, NbBundle.getMessage(DocumentsDlg.class, "LBL_Documents"));
@@ -106,12 +103,8 @@ private DocumentsDlg () {
closeButton.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(DocumentsDlg.class, "ACSD_Close"));
descriptionArea.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(DocumentsDlg.class, "ACSD_DescriptionArea"));
- ItemListener orderingListener = new ItemListener() {
-
- @Override
- public void itemStateChanged( ItemEvent e ) {
- updateNodes();
- }
+ ItemListener orderingListener = (e) -> {
+ updateNodes();
};
radioOrderByName.addItemListener( orderingListener );
radioOrderByUsage.addItemListener( orderingListener );
@@ -290,7 +283,7 @@ private void saveDocuments(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sa
for (int i = 0; i < selNodes.length; i++) {
TopComponent tc = ((TopComponentNode) selNodes[i]).getTopComponent();
Lookup l = tc.getLookup();
- SaveCookie sc = (SaveCookie) l.lookup(SaveCookie.class);
+ SaveCookie sc = l.lookup(SaveCookie.class);
if (sc != null) {
try {
sc.save();
@@ -315,16 +308,16 @@ private void closeDocuments(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_c
if (selNodes.length == 0) {
return;
}
- //#70965 begin - select document previous to first closed document
- int positionToSelectAfter = 0;
+ // avoid moving the selection if possible
+ int selectionStart = 0;
Node[] children = explorer.getRootContext().getChildren().getNodes();
for (int i = 0; i < children.length; i++) {
if (children[i] == selNodes[0]) {
- positionToSelectAfter = Math.max(0, i - 1);
+ selectionStart = i;
break;
}
}
- //#70965 end
+
for (int i = 0; i < selNodes.length; i++) {
TopComponent tc = ((TopComponentNode) selNodes[i]).getTopComponent();
if( Switches.isEditorTopComponentClosingEnabled() && Switches.isClosingEnabled( tc ) )
@@ -332,7 +325,7 @@ private void closeDocuments(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_c
}
List tcList = getOpenedDocuments();
- List tcNodes = new ArrayList (tcList.size());
+ List tcNodes = new ArrayList<>(tcList.size());
for (TopComponent tc : tcList) {
tcNodes.add(new TopComponentNode(tc));
}
@@ -346,12 +339,15 @@ private void closeDocuments(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_c
java.util.Collections.sort(tcNodes);
}
Children.Array nodeArray = new Children.Array();
- nodeArray.add((TopComponentNode[])tcNodes.toArray(new TopComponentNode[0]));
+ nodeArray.add(tcNodes.toArray(TopComponentNode[]::new));
Node root = new AbstractNode(nodeArray);
explorer.setRootContext(root);
//#54656 begin
try {
- explorer.setSelectedNodes(new Node[]{root.getChildren().getNodes()[positionToSelectAfter]});
+ Node[] nodes = root.getChildren().getNodes();
+ explorer.setSelectedNodes(new Node[] {
+ nodes[Math.min(selectionStart, nodes.length - 1)]
+ });
} catch (PropertyVetoException exc) {
//mkleint - well, what can we do, I've never seen the selection being vetoed anyway.
}
@@ -372,16 +368,14 @@ private void activate(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_activat
final TopComponent tc = ((TopComponentNode) selNodes[0]).getTopComponent();
//Call using invokeLater to make sure it is performed after dialog
//is closed.
- SwingUtilities.invokeLater(new Runnable () {
- public void run() {
- // #37226-41075 Unmaximized the other mode if needed.
- WindowManagerImpl wm = WindowManagerImpl.getInstance();
- ModeImpl mode = (ModeImpl)wm.findMode(tc);
- if(mode != null && mode != wm.getCurrentMaximizedMode()) {
- wm.switchMaximizedMode(null);
- }
- tc.requestActive();
+ SwingUtilities.invokeLater(() -> {
+ // #37226-41075 Unmaximized the other mode if needed.
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
+ ModeImpl mode = (ModeImpl)wm.findMode(tc);
+ if(mode != null && mode != wm.getCurrentMaximizedMode()) {
+ wm.switchMaximizedMode(null);
}
+ tc.requestActive();
});
}//GEN-LAST:event_activate
@@ -430,8 +424,8 @@ public static void showDocumentsDialog() {
dlgDesc.setHelpCtx( null ); //hide the default Help button
final Dialog dlg = DialogDisplayer.getDefault().createDialog(dlgDesc);
dlg.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(DocumentsDlg.class, "ACSD_DocumentsDialog"));
- if( dlg instanceof JDialog ) {
- HelpCtx.setHelpIDString(((JDialog)dlg).getRootPane(), documentsPanel.getHelpCtx().getHelpID());
+ if (dlg instanceof JDialog jd) {
+ HelpCtx.setHelpIDString(jd.getRootPane(), documentsPanel.getHelpCtx().getHelpID());
}
getDefault().updateNodes();
@@ -527,7 +521,7 @@ private void clearNodes() {
private static List getOpenedDocuments() {
WindowManagerImpl wm = WindowManagerImpl.getInstance();
TopComponent[] recentDocuments = wm.getRecentViewList();
- List documents = new ArrayList (recentDocuments.length);
+ List documents = new ArrayList<>(recentDocuments.length);
TopComponentTracker tcTracker = TopComponentTracker.getDefault();
for( TopComponent tc : recentDocuments ) {
if( tcTracker.isEditorTopComponent( tc ) ) {
@@ -538,6 +532,7 @@ private static List getOpenedDocuments() {
return documents;
}
+ @Override
public void propertyChange(PropertyChangeEvent evt) {
if (ExplorerManager.PROP_SELECTED_NODES.equals(evt.getPropertyName())) {
Node [] selNodes = (Node []) evt.getNewValue();
@@ -565,7 +560,7 @@ public void propertyChange(PropertyChangeEvent evt) {
for (int i = 0; i < selNodes.length; i++) {
TopComponent tc = ((TopComponentNode) selNodes[i]).getTopComponent();
Lookup l = tc.getLookup();
- SaveCookie sc = (SaveCookie) l.lookup(SaveCookie.class);
+ SaveCookie sc = l.lookup(SaveCookie.class);
if (sc != null) {
enableSave = true;
break;
@@ -574,7 +569,7 @@ public void propertyChange(PropertyChangeEvent evt) {
jButtonSave.setEnabled(enableSave);
// Set description.
- if(selNodes != null && selNodes.length == 1) {
+ if(selNodes.length == 1) {
descriptionArea.setText(((TopComponentNode)selNodes[0]).getDescription());
} else {
descriptionArea.setText(null);
@@ -599,6 +594,7 @@ public void propertyChange(PropertyChangeEvent evt) {
// End of variables declaration//GEN-END:variables
private ListView listView;
+ @Override
public ExplorerManager getExplorerManager() {
return explorer;
}
@@ -609,7 +605,7 @@ public ExplorerManager getExplorerManager() {
private class TopComponentNode extends AbstractNode
implements Comparable, Action, PropertyChangeListener {
- private TopComponent tc;
+ private final TopComponent tc;
public TopComponentNode (TopComponent tc) {
super(Children.LEAF);
@@ -617,6 +613,7 @@ public TopComponentNode (TopComponent tc) {
tc.addPropertyChangeListener(WeakListeners.propertyChange(this, tc));
}
+ @Override
public String getName() {
// #60263: apparently used by functional tests.
String result = tc.getName();
@@ -626,16 +623,19 @@ public String getName() {
result = tc.toString();
return result;
}
+ @Override
public String getDisplayName() {
// Also #60263. Forms do not have a tc.name??
String result = tc.getDisplayName();
return result != null ? result : tc.getName();
}
+ @Override
public String getHtmlDisplayName() {
return tc.getHtmlDisplayName();
}
+ @Override
public Image getIcon (int type) {
Image image = tc.getIcon();
return image == null ? ImageUtilities.loadImage("org/openide/resources/actions/empty.gif") : image; // NOI18N
@@ -659,6 +659,7 @@ void refresh () {
fireNameChange(null, null);
}
+ @Override
public int compareTo(TopComponentNode tcn) {
String displayName1 = getDisplayName();
String displayName2 = tcn.getDisplayName();
@@ -672,30 +673,36 @@ public int compareTo(TopComponentNode tcn) {
/** Invokes itself ac action when double click or Enter pressed on node
*/
+ @Override
public Action getPreferredAction() {
return this;
}
/** Implementation of Action interface, activates TopComponent
* currently selected in the list view (should be the same component
- * that is asociated with this Node)
+ * that is associated with this Node)
*/
+ @Override
public void actionPerformed(ActionEvent evt) {
activate(evt);
}
+ @Override
public boolean isEnabled() {
return true;
}
+ @Override
public void putValue(String key, Object value) {
// no operation
}
+ @Override
public void setEnabled(boolean b) {
// no operation
}
+ @Override
public void propertyChange(PropertyChangeEvent evt) {
fireDisplayNameChange(null, null);
}