From e10eaf4008837b715a56da5c27d6eeee581a5427 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 15:45:18 +0000 Subject: [PATCH 1/4] feat: retarget build to JDK 21 --- .travis.yml | 2 +- BASELINE-METRICS.txt | 33 +++++++++++++++++++++++++++++++++ nbproject/project.properties | 4 ++-- release-build.properties | 2 +- release-build.xml | 2 +- 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 BASELINE-METRICS.txt diff --git a/.travis.yml b/.travis.yml index 0eadda7688..909b77aa12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ language: java # Configure the build to use Oracle JDK 9 jdk: - - openjdk11 + - openjdk21 # Install the Ant JUnit package, which is missing from the Travis CI environment. See the Travis documentation: https://docs.travis-ci.com/user/installing-dependencies/#Adding-APT-Packages addons: diff --git a/BASELINE-METRICS.txt b/BASELINE-METRICS.txt new file mode 100644 index 0000000000..565ee9692c --- /dev/null +++ b/BASELINE-METRICS.txt @@ -0,0 +1,33 @@ +WorldWindJava Java 11 Pre-Migration Baseline +Captured: 2026-05-26T15:41:55Z +Branch: develop +Commit: 2543c234349c76f4a290e318b49f071ac156d2a0 + +JDK: +openjdk version "11.0.30" 2026-01-20 +OpenJDK Runtime Environment (build 11.0.30+7-post-Ubuntu-1ubuntu122.04) +OpenJDK 64-Bit Server VM (build 11.0.30+7-post-Ubuntu-1ubuntu122.04, mixed mode, sharing) + +File count +src java files: 1727 + +Anonymous inner class counts +new Runnable(): 148 +new ActionListener(): 185 +new Callable(): 0 +new MouseListener(): 2 +new KeyListener(): 0 +new ChangeListener(): 60 +new PropertyChangeListener(): 44 +new WindowListener(): 0 + +instanceof pattern-match candidates +instanceof: 1303 + +Deprecated usage +@Deprecated: 131 +new Integer(: 0 +new Double(: 0 +new Float(: 0 +new Long(: 0 +new Boolean(: 0 diff --git a/nbproject/project.properties b/nbproject/project.properties index fab181db51..de8a7bdfc9 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -56,8 +56,8 @@ javac.modulepath= javac.processormodulepath= javac.processorpath=\ ${javac.classpath} -javac.source=11 -javac.target=11 +javac.source=21 +javac.target=21 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/release-build.properties b/release-build.properties index cde1c0e4de..689b787445 100644 --- a/release-build.properties +++ b/release-build.properties @@ -38,7 +38,7 @@ worldwind.classes.dir=${worldwind.build.dir}/classes worldwind.doc.dir=${worldwind.build.dir}/doc worldwind.jar.dir=${worldwind.build.dir}/jar worldwind.test.results.dir=${worldwind.build.dir}/test-results -worldwind.jdk=11 +worldwind.jdk=21 #worldwind.exclude.jackson=true # MIL-STD-2525 package build properties diff --git a/release-build.xml b/release-build.xml index 9810ad732d..7948d88789 100644 --- a/release-build.xml +++ b/release-build.xml @@ -126,7 +126,7 @@ - + From 84c5d2accd1cad57e666ba61e7312fc91a3434e5 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 15:46:31 +0000 Subject: [PATCH 2/4] chore: keep foundation diff to build config only --- BASELINE-METRICS.txt | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 BASELINE-METRICS.txt diff --git a/BASELINE-METRICS.txt b/BASELINE-METRICS.txt deleted file mode 100644 index 565ee9692c..0000000000 --- a/BASELINE-METRICS.txt +++ /dev/null @@ -1,33 +0,0 @@ -WorldWindJava Java 11 Pre-Migration Baseline -Captured: 2026-05-26T15:41:55Z -Branch: develop -Commit: 2543c234349c76f4a290e318b49f071ac156d2a0 - -JDK: -openjdk version "11.0.30" 2026-01-20 -OpenJDK Runtime Environment (build 11.0.30+7-post-Ubuntu-1ubuntu122.04) -OpenJDK 64-Bit Server VM (build 11.0.30+7-post-Ubuntu-1ubuntu122.04, mixed mode, sharing) - -File count -src java files: 1727 - -Anonymous inner class counts -new Runnable(): 148 -new ActionListener(): 185 -new Callable(): 0 -new MouseListener(): 2 -new KeyListener(): 0 -new ChangeListener(): 60 -new PropertyChangeListener(): 44 -new WindowListener(): 0 - -instanceof pattern-match candidates -instanceof: 1303 - -Deprecated usage -@Deprecated: 131 -new Integer(: 0 -new Double(: 0 -new Float(: 0 -new Long(: 0 -new Boolean(: 0 From de3bad0c647f63262531114ddf4d5eba71830fb7 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 16:22:38 +0000 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20Java=2021=20modernization=20?= =?UTF-8?q?=E2=80=94=20layers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BasicMercatorTiledImageLayer.java | 3 +-- .../layers/rpf/RPFTiledImageLayer.java | 23 +++++++++---------- .../layers/rpf/wizard/DataChooserPanel.java | 23 ++++++------------- .../layers/rpf/wizard/FileChooserPanel.java | 20 +++++++--------- .../wizard/FileChooserPanelDescriptor.java | 2 +- .../rpf/wizard/FileSearchPanelDescriptor.java | 15 ++++++------ .../worldwind/layers/rpf/wizard/FileSet.java | 2 +- .../layers/rpf/wizard/RPFWizardUtil.java | 10 ++++---- 8 files changed, 41 insertions(+), 57 deletions(-) diff --git a/src/gov/nasa/worldwind/layers/mercator/BasicMercatorTiledImageLayer.java b/src/gov/nasa/worldwind/layers/mercator/BasicMercatorTiledImageLayer.java index 9778b9cef4..51fb26113d 100644 --- a/src/gov/nasa/worldwind/layers/mercator/BasicMercatorTiledImageLayer.java +++ b/src/gov/nasa/worldwind/layers/mercator/BasicMercatorTiledImageLayer.java @@ -332,9 +332,8 @@ public ByteBuffer run(Retriever retriever) URLRetriever r = (URLRetriever) retriever; ByteBuffer buffer = r.getBuffer(); - if (retriever instanceof HTTPRetriever) + if (retriever instanceof HTTPRetriever htr) { - HTTPRetriever htr = (HTTPRetriever) retriever; if (htr.getResponseCode() == HttpURLConnection.HTTP_NO_CONTENT) { // Mark tile as missing to avoid excessive attempts diff --git a/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java b/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java index 9d391b408f..b7255d77e5 100644 --- a/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java +++ b/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java @@ -362,9 +362,8 @@ private static String makeTitle(AVList params) StringBuilder sb = new StringBuilder(); Object o = params.getValue(RPFGenerator.RPF_FILE_INDEX); - if (o != null && o instanceof RPFFileIndex) + if (o instanceof RPFFileIndex fileIndex) { - RPFFileIndex fileIndex = (RPFFileIndex) o; if (fileIndex.getIndexProperties() != null) { if (fileIndex.getIndexProperties().getDescription() != null) @@ -401,19 +400,19 @@ private RestorableSupport makeRestorableState(AVList params) for (Map.Entry p : params.getEntries()) { - if (p.getValue() instanceof LatLon) + if (p.getValue() instanceof LatLon latLon) { - rs.addStateValueAsDouble(p.getKey() + ".Latitude", ((LatLon) p.getValue()).getLatitude().degrees); - rs.addStateValueAsDouble(p.getKey() + ".Longitude", ((LatLon) p.getValue()).getLongitude().degrees); + rs.addStateValueAsDouble(p.getKey() + ".Latitude", latLon.getLatitude().degrees); + rs.addStateValueAsDouble(p.getKey() + ".Longitude", latLon.getLongitude().degrees); } - else if (p.getValue() instanceof Sector) + else if (p.getValue() instanceof Sector sector) { - rs.addStateValueAsDouble(p.getKey() + ".MinLatitude", ((Sector) p.getValue()).getMinLatitude().degrees); - rs.addStateValueAsDouble(p.getKey() + ".MaxLatitude", ((Sector) p.getValue()).getMaxLatitude().degrees); + rs.addStateValueAsDouble(p.getKey() + ".MinLatitude", sector.getMinLatitude().degrees); + rs.addStateValueAsDouble(p.getKey() + ".MaxLatitude", sector.getMaxLatitude().degrees); rs.addStateValueAsDouble(p.getKey() + ".MinLongitude", - ((Sector) p.getValue()).getMinLongitude().degrees); + sector.getMinLongitude().degrees); rs.addStateValueAsDouble(p.getKey() + ".MaxLongitude", - ((Sector) p.getValue()).getMaxLongitude().degrees); + sector.getMaxLongitude().degrees); } else if (p.getValue() instanceof URLBuilder) { @@ -793,8 +792,8 @@ protected ByteBuffer handleSuccessfulRetrieval() @Override protected boolean validateResponseCode() { - if (this.getRetriever() instanceof RPFRetriever) - return ((RPFRetriever) this.getRetriever()).getResponseCode() == RPFRetriever.RESPONSE_CODE_OK; + if (this.getRetriever() instanceof RPFRetriever rpfRetriever) + return rpfRetriever.getResponseCode() == RPFRetriever.RESPONSE_CODE_OK; else return super.validateResponseCode(); } diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/DataChooserPanel.java b/src/gov/nasa/worldwind/layers/rpf/wizard/DataChooserPanel.java index d9f2dc461e..bc180207b2 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/DataChooserPanel.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/DataChooserPanel.java @@ -166,11 +166,11 @@ private void fileSetClicked(ItemEvent e) if (e != null) { FileSet set = null; - if (e.getItem() != null && e.getItem() instanceof JComponent) + if (e.getItem() instanceof JComponent component) { - Object property = ((JComponent) e.getItem()).getClientProperty("fileSet"); - if (property != null && property instanceof FileSet) - set = (FileSet) property; + Object property = component.getClientProperty("fileSet"); + if (property instanceof FileSet fileSet) + set = fileSet; } if (set != null) @@ -207,9 +207,8 @@ private void deselectAllPressed() private void fileSetSelectionChanged(Object source) { // Make sure the CheckBox selection reflects the FileSet selection state. - if (source != null && source instanceof FileSet) + if (source instanceof FileSet set) { - FileSet set = (FileSet) source; JToggleButton button = this.selectButtons.get(set); if (button != null) button.setSelected(set.isSelected()); @@ -279,18 +278,10 @@ private void makeComponents() Dimension size = new Dimension(35, 20); this.selectAllButton.setFont(font); this.selectAllButton.setPreferredSize(size); - this.selectAllButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - selectAllPressed(); - } - }); + this.selectAllButton.addActionListener(e -> selectAllPressed()); this.deselectAllButton.setFont(font); this.deselectAllButton.setPreferredSize(size); - this.deselectAllButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - deselectAllPressed(); - } - }); + this.deselectAllButton.addActionListener(e -> deselectAllPressed()); this.dataScrollPane = new JScrollPane(); this.dataScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); size = this.dataScrollPane.getPreferredSize(); diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanel.java b/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanel.java index 9c4d0dc619..6a588697a4 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanel.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanel.java @@ -102,8 +102,8 @@ private File getValueAsFile(Object value) { if (value != null) { - if (value instanceof File) - return (File) value; + if (value instanceof File file) + return file; else return new File(value.toString()); } @@ -145,19 +145,15 @@ private void makeComponents() Dimension preferred = this.fileField.getPreferredSize(); Dimension max = this.fileField.getMaximumSize(); this.fileField.setMaximumSize(new Dimension(max.width, preferred.height)); - this.fileField.addPropertyChangeListener("value", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - if (event != null) { - onFileFieldChanged(event.getNewValue()); - } + this.fileField.addPropertyChangeListener("value", event -> + { + if (event != null) + { + onFileFieldChanged(event.getNewValue()); } }); this.chooseButton = new JButton("Choose..."); - this.chooseButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - onChooseClicked(); - } - }); + this.chooseButton.addActionListener(e -> onChooseClicked()); this.fileChooser = new JFileChooser(); this.fileChooser.setDialogTitle("Choose Folder to Search"); this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanelDescriptor.java b/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanelDescriptor.java index cceadabb8e..7be7d1fcc3 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanelDescriptor.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/FileChooserPanelDescriptor.java @@ -88,7 +88,7 @@ private void setNextButtonAccordingToSelectedFile() private void selectedFileChanged(Object newValue) { WizardModel model = getWizardModel(); - if (model != null && newValue != null && newValue instanceof File) + if (model != null && newValue instanceof File) { RPFWizardUtil.setSelectedFile(model, (File) newValue); } diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java b/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java index 831bba5a55..b6f91ab1db 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java @@ -112,16 +112,15 @@ public void displayingPanel() if (model != null && !RPFWizardUtil.isFileListCurrent(model)) { this.panelComponent.getProgressBar().setIndeterminate(true); - startWorkerThread(new Runnable() { - public void run() { - refreshFileList(); + startWorkerThread(() -> + { + refreshFileList(); - WizardModel model = getWizardModel(); - if (model != null) - RPFWizardUtil.setFileListCurrent(model, true); + WizardModel model = getWizardModel(); + if (model != null) + RPFWizardUtil.setFileListCurrent(model, true); - moveToNextPanel(); - } + moveToNextPanel(); }); } } diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/FileSet.java b/src/gov/nasa/worldwind/layers/rpf/wizard/FileSet.java index a87b80da35..427464601b 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/FileSet.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/FileSet.java @@ -61,7 +61,7 @@ public void setIdentifier(String identifier) public Collection getFiles() { Object value = getProperty(FILES); - return (value != null && value instanceof Collection) ? (Collection) value : null; + return value instanceof Collection ? (Collection) value : null; } public void setFiles(Collection files) diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/RPFWizardUtil.java b/src/gov/nasa/worldwind/layers/rpf/wizard/RPFWizardUtil.java index ad973859e6..3b5eed6d35 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/RPFWizardUtil.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/RPFWizardUtil.java @@ -57,8 +57,8 @@ public static File getSelectedFile(WizardProperties properties) File file = null; Object value = properties.getProperty(SELECTED_FILE); - if (value != null && value instanceof File) - file = (File) value; + if (value instanceof File selectedFile) + file = selectedFile; return file; } @@ -86,7 +86,7 @@ public static List getFileList(WizardProperties properties) List fileList = null; Object value = properties.getProperty(FILE_LIST); - if (value != null && value instanceof List) + if (value instanceof List) fileList = (List) value; return fileList; } @@ -143,7 +143,7 @@ public static List getFileSetList(WizardProperties properties) List fileSets = null; Object value = properties.getProperty(FILE_SET_LIST); - if (value != null && value instanceof List) + if (value instanceof List) fileSets = (List) value; return fileSets; } @@ -172,7 +172,7 @@ public static List getLayerList(WizardProperties properties) List fileSets = null; Object value = properties.getProperty(LAYER_LIST); - if (value != null && value instanceof List) + if (value instanceof List) fileSets = (List) value; return fileSets; } From d6f4094630a477e864e94404059ded6115f79129 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 16:22:55 +0000 Subject: [PATCH 4/4] fix: avoid lambda local variable shadowing --- .../layers/rpf/wizard/FileSearchPanelDescriptor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java b/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java index b6f91ab1db..a7f04b0898 100644 --- a/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java +++ b/src/gov/nasa/worldwind/layers/rpf/wizard/FileSearchPanelDescriptor.java @@ -116,9 +116,9 @@ public void displayingPanel() { refreshFileList(); - WizardModel model = getWizardModel(); - if (model != null) - RPFWizardUtil.setFileListCurrent(model, true); + WizardModel currentModel = getWizardModel(); + if (currentModel != null) + RPFWizardUtil.setFileListCurrent(currentModel, true); moveToNextPanel(); });