You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by fs...@apache.org on 2020/06/14 14:57:31 UTC

[jmeter] branch master updated: Updated commons-collections to 4.4 (from 3.2.2)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 28fce60  Updated commons-collections to 4.4 (from 3.2.2)
28fce60 is described below

commit 28fce6057c72d32aa71f7437d18abb7c28ffc62f
Author: Felix Schumacher <fe...@internetallee.de>
AuthorDate: Sun Feb 16 15:30:39 2020 +0100

    Updated commons-collections to 4.4 (from 3.2.2)
    
    Keep old commons-collections 3.x for compatibility
    
    Bugzilla Id: 63809
    Closes #557 on github
---
 checksum.xml                                       |  2 ++
 gradle.properties                                  |  1 +
 src/bom/build.gradle.kts                           |  1 +
 src/components/build.gradle.kts                    |  2 +-
 .../visualizers/ViewResultsFullVisualizer.java     | 22 ++++++++++------------
 src/core/build.gradle.kts                          |  5 ++++-
 .../java/org/apache/jmeter/gui/LoggerPanel.java    | 19 +++++++++----------
 .../org/apache/jmeter/save/CSVSaveService.java     |  6 +++---
 .../org/apache/jmeter/services/FileServer.java     |  8 ++++----
 .../apache/jmeter/testbeans/gui/TestBeanGUI.java   | 18 ++++++++----------
 .../org/apache/jmeter/util/JSR223TestElement.java  |  7 +++----
 src/dist/build.gradle.kts                          |  2 +-
 src/jorphan/build.gradle.kts                       |  2 +-
 .../java/org/apache/jorphan/util/XMLBuffer.java    |  8 ++++----
 src/protocol/build.gradle.kts                      |  2 +-
 .../jmeter/protocol/http/control/CacheManager.java |  7 +++----
 .../jmeter/protocol/http/parser/TestCssParser.java | 14 +++++++-------
 xdocs/changes.xml                                  |  1 +
 18 files changed, 64 insertions(+), 63 deletions(-)

diff --git a/checksum.xml b/checksum.xml
index e2b2a15..84a7a45 100644
--- a/checksum.xml
+++ b/checksum.xml
@@ -44,6 +44,8 @@
     <trusted-key id='86fdc7e2a11262cb' group='commons-codec' />
     <trusted-key id='1861c322c56014b2' group='commons-collections' />
     <trusted-key id='a41f13c999945293' group='commons-collections' />
+    <trusted-key id='1861c322c56014b2' group='commons-collections4' />
+    <trusted-key id='a41f13c999945293' group='commons-collections4' />
     <trusted-key id='86fdc7e2a11262cb' group='commons-io' />
     <trusted-key id='9daadc1c9fcc82d0' group='commons-io' />
     <trusted-key id='1241bc872c5e4ec0' group='commons-lang' />
diff --git a/gradle.properties b/gradle.properties
index 7ce1683..19068da 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -56,6 +56,7 @@ caffeine.version=2.8.0
 cglib-nodep.version=3.2.12
 commons-codec.version=1.14
 commons-collections.version=3.2.2
+commons-collections4.version=4.4
 commons-dbcp2.version=2.7.0
 commons-io.version=2.6
 commons-jexl.version=2.1.1
diff --git a/src/bom/build.gradle.kts b/src/bom/build.gradle.kts
index 8b5695b..4c4fc13 100644
--- a/src/bom/build.gradle.kts
+++ b/src/bom/build.gradle.kts
@@ -103,6 +103,7 @@ dependencies {
         apiv("net.sf.saxon:Saxon-HE")
         apiv("nl.jqno.equalsverifier:equalsverifier")
         apiv("org.apache-extras.beanshell:bsh")
+        apiv("org.apache.commons:commons-collections4")
         apiv("org.apache.commons:commons-dbcp2")
         apiv("org.apache.commons:commons-jexl3")
         apiv("org.apache.commons:commons-jexl")
diff --git a/src/components/build.gradle.kts b/src/components/build.gradle.kts
index be2ed36..51a8b12 100644
--- a/src/components/build.gradle.kts
+++ b/src/components/build.gradle.kts
@@ -53,7 +53,7 @@ dependencies {
     implementation("org.jsoup:jsoup")
     implementation("org.apache.commons:commons-lang3")
     implementation("net.sf.jtidy:jtidy")
-    implementation("commons-collections:commons-collections")
+    implementation("org.apache.commons:commons-collections4")
     implementation("org.apache.commons:commons-math3")
     implementation("commons-io:commons-io") {
         because("IOUtils")
diff --git a/src/components/src/main/java/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java b/src/components/src/main/java/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
index 8df5e1c..48cf1de 100644
--- a/src/components/src/main/java/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
+++ b/src/components/src/main/java/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
@@ -26,6 +26,7 @@ import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.io.IOException;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -34,6 +35,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -59,10 +61,8 @@ import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 import javax.swing.tree.TreeSelectionModel;
 
-import org.apache.commons.collections.Buffer;
-import org.apache.commons.collections.EnumerationUtils;
-import org.apache.commons.collections.buffer.CircularFifoBuffer;
-import org.apache.commons.collections.buffer.UnboundedFifoBuffer;
+import org.apache.commons.collections4.EnumerationUtils;
+import org.apache.commons.collections4.queue.CircularFifoQueue;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.jmeter.JMeter;
 import org.apache.jmeter.assertions.AssertionResult;
@@ -85,7 +85,7 @@ import org.slf4j.LoggerFactory;
 public class ViewResultsFullVisualizer extends AbstractVisualizer
 implements ActionListener, TreeSelectionListener, Clearable, ItemListener {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 2L;
 
     private static final Logger log = LoggerFactory.getLogger(ViewResultsFullVisualizer.class);
 
@@ -129,7 +129,7 @@ implements ActionListener, TreeSelectionListener, Clearable, ItemListener {
     private Object resultsObject = null;
     private TreeSelectionEvent lastSelectionEvent;
     private JCheckBox autoScrollCB;
-    private Buffer buffer;
+    private Queue<SampleResult> buffer;
     private boolean dataChanged;
 
     /**
@@ -139,16 +139,15 @@ implements ActionListener, TreeSelectionListener, Clearable, ItemListener {
         super();
         final int maxResults = JMeterUtils.getPropDefault("view.results.tree.max_results", 500);
         if (maxResults > 0) {
-            buffer = new CircularFifoBuffer(maxResults);
+            buffer = new CircularFifoQueue<>(maxResults);
         } else {
-            buffer = new UnboundedFifoBuffer();
+            buffer = new ArrayDeque<>();
         }
         init();
         new Timer(REFRESH_PERIOD, e -> updateGui()).start();
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override
     public void add(final SampleResult sample) {
         synchronized (buffer) {
@@ -174,8 +173,8 @@ implements ActionListener, TreeSelectionListener, Clearable, ItemListener {
             oldExpandedElements = extractExpandedObjects(expandedElements);
             oldSelectedElement = getSelectedObject();
             root.removeAllChildren();
-            for (Object sampler: buffer) {
-                SampleResult res = (SampleResult) sampler;
+            for (SampleResult sampler: buffer) {
+                SampleResult res = sampler;
                 // Add sample
                 DefaultMutableTreeNode currNode = new SearchableTreeNode(res, treeModel);
                 treeModel.insertNodeInto(currNode, root, root.getChildCount());
@@ -255,7 +254,6 @@ implements ActionListener, TreeSelectionListener, Clearable, ItemListener {
 
     private Set<Object> extractExpandedObjects(final Enumeration<TreePath> expandedElements) {
         if (expandedElements != null) {
-            @SuppressWarnings("unchecked")
             final List<TreePath> list = EnumerationUtils.toList(expandedElements);
             log.debug("Expanded: {}", list);
             Set<Object> result = list.stream()
diff --git a/src/core/build.gradle.kts b/src/core/build.gradle.kts
index 0ea301f..f253785 100644
--- a/src/core/build.gradle.kts
+++ b/src/core/build.gradle.kts
@@ -78,7 +78,10 @@ dependencies {
     implementation("commons-codec:commons-codec") {
         because("DigestUtils")
     }
-    implementation("commons-collections:commons-collections")
+    implementation("commons-collections:commons-collections") {
+        because("Compatibility for old plugins")
+    }
+    implementation("org.apache.commons:commons-collections4")
     implementation("org.apache.commons:commons-math3") {
         because("Mean, DescriptiveStatistics")
     }
diff --git a/src/core/src/main/java/org/apache/jmeter/gui/LoggerPanel.java b/src/core/src/main/java/org/apache/jmeter/gui/LoggerPanel.java
index 824ecc2..6e380a7 100644
--- a/src/core/src/main/java/org/apache/jmeter/gui/LoggerPanel.java
+++ b/src/core/src/main/java/org/apache/jmeter/gui/LoggerPanel.java
@@ -19,6 +19,8 @@ package org.apache.jmeter.gui;
 
 import java.awt.BorderLayout;
 import java.awt.Insets;
+import java.util.ArrayDeque;
+import java.util.Queue;
 
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
@@ -26,9 +28,7 @@ import javax.swing.JTextArea;
 import javax.swing.ScrollPaneConstants;
 import javax.swing.Timer;
 
-import org.apache.commons.collections.Buffer;
-import org.apache.commons.collections.buffer.CircularFifoBuffer;
-import org.apache.commons.collections.buffer.UnboundedFifoBuffer;
+import org.apache.commons.collections4.queue.CircularFifoQueue;
 import org.apache.jmeter.gui.logging.GuiLogEventListener;
 import org.apache.jmeter.gui.logging.LogEventObject;
 import org.apache.jmeter.gui.util.JSyntaxTextArea;
@@ -41,7 +41,7 @@ import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
  */
 public class LoggerPanel extends JPanel implements GuiLogEventListener {
 
-    private static final long serialVersionUID = 6911128494402594429L;
+    private static final long serialVersionUID = 4935188629475943229L;
 
     private final JTextArea textArea;
 
@@ -57,7 +57,7 @@ public class LoggerPanel extends JPanel implements GuiLogEventListener {
     private static final int LOGGER_PANEL_REFRESH_PERIOD =
             JMeterUtils.getPropDefault("jmeter.gui.refresh_period", 500); // $NON-NLS-1$
 
-    private final Buffer events;
+    private final Queue<String> events;
 
     private volatile boolean logChanged = false;
 
@@ -66,9 +66,9 @@ public class LoggerPanel extends JPanel implements GuiLogEventListener {
      */
     public LoggerPanel() {
         if (LOGGER_PANEL_MAX_LINES > 0) {
-            events = new CircularFifoBuffer(LOGGER_PANEL_MAX_LINES);
+            events = new CircularFifoQueue<>(LOGGER_PANEL_MAX_LINES);
         } else {
-            events = new UnboundedFifoBuffer();
+            events = new ArrayDeque<>();
         }
         textArea = init();
     }
@@ -108,7 +108,6 @@ public class LoggerPanel extends JPanel implements GuiLogEventListener {
     /* (non-Javadoc)
      * @see org.apache.jmeter.gui.logging.GuiLogEventListener#processLogEvent(org.apache.jmeter.gui.logging.LogEventObject)
      */
-    @SuppressWarnings("unchecked")
     @Override
     public void processLogEvent(final LogEventObject logEventObject) {
         if(!LOGGER_PANEL_RECEIVE_WHEN_CLOSED && !GuiPackage.getInstance().getMenuItemLoggerPanel().getModel().isSelected()) {
@@ -137,8 +136,8 @@ public class LoggerPanel extends JPanel implements GuiLogEventListener {
         logChanged = false;
         StringBuilder builder = new StringBuilder();
         synchronized (events) {
-            for (Object line: events) {
-                builder.append((String) line);
+            for (String line: events) {
+                builder.append(line);
             }
         }
         String logText = builder.toString();
diff --git a/src/core/src/main/java/org/apache/jmeter/save/CSVSaveService.java b/src/core/src/main/java/org/apache/jmeter/save/CSVSaveService.java
index f8667dd..e34d773 100644
--- a/src/core/src/main/java/org/apache/jmeter/save/CSVSaveService.java
+++ b/src/core/src/main/java/org/apache/jmeter/save/CSVSaveService.java
@@ -38,7 +38,7 @@ import java.util.List;
 
 import javax.swing.table.DefaultTableModel;
 
-import org.apache.commons.collections.map.LinkedMap;
+import org.apache.commons.collections4.map.LinkedMap;
 import org.apache.commons.lang3.CharUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.jmeter.reporters.ResultCollector;
@@ -452,7 +452,7 @@ public final class CSVSaveService {
     }
 
     // Map header names to set() methods
-    private static final LinkedMap headerLabelMethods = new LinkedMap();
+    private static final LinkedMap<String, Functor> headerLabelMethods = new LinkedMap<>();
 
     // These entries must be in the same order as columns are saved/restored.
 
@@ -536,7 +536,7 @@ public final class CSVSaveService {
             if (isVariableName(label)) {
                 varCount++;
             } else {
-                Functor set = (Functor) headerLabelMethods.get(label);
+                Functor set = headerLabelMethods.get(label);
                 set.invoke(saveConfig, new Boolean[]{Boolean.TRUE});
             }
         }
diff --git a/src/core/src/main/java/org/apache/jmeter/services/FileServer.java b/src/core/src/main/java/org/apache/jmeter/services/FileServer.java
index 3509166..534cdac 100644
--- a/src/core/src/main/java/org/apache/jmeter/services/FileServer.java
+++ b/src/core/src/main/java/org/apache/jmeter/services/FileServer.java
@@ -29,11 +29,11 @@ import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.Writer;
+import java.util.ArrayDeque;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ThreadLocalRandom;
 
-import org.apache.commons.collections.ArrayStack;
 import org.apache.commons.io.input.BOMInputStream;
 import org.apache.jmeter.gui.JMeterFileFilter;
 import org.apache.jmeter.save.CSVSaveService;
@@ -189,15 +189,15 @@ public class FileServer {
         // Must first convert to absolute path names to ensure parents are available
         File parent = new File(DEFAULT_BASE).getAbsoluteFile();
         File f = base.getAbsoluteFile();
-        ArrayStack l = new ArrayStack();
+        ArrayDeque<String> l = new ArrayDeque<>();
         while (f != null) {
             if (f.equals(parent)){
                 if (l.isEmpty()){
                     break;
                 }
-                File rel = new File((String) l.pop());
+                File rel = new File(l.pop());
                 while(!l.isEmpty()) {
-                    rel = new File(rel, (String) l.pop());
+                    rel = new File(rel, l.pop());
                 }
                 return rel;
             }
diff --git a/src/core/src/main/java/org/apache/jmeter/testbeans/gui/TestBeanGUI.java b/src/core/src/main/java/org/apache/jmeter/testbeans/gui/TestBeanGUI.java
index 7016849..6e0d895 100644
--- a/src/core/src/main/java/org/apache/jmeter/testbeans/gui/TestBeanGUI.java
+++ b/src/core/src/main/java/org/apache/jmeter/testbeans/gui/TestBeanGUI.java
@@ -38,7 +38,7 @@ import java.util.ResourceBundle;
 
 import javax.swing.JPopupMenu;
 
-import org.apache.commons.collections.map.LRUMap;
+import org.apache.commons.collections4.map.LRUMap;
 import org.apache.jmeter.assertions.Assertion;
 import org.apache.jmeter.assertions.gui.AbstractAssertionGui;
 import org.apache.jmeter.config.ConfigElement;
@@ -90,7 +90,7 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class TestBeanGUI extends AbstractJMeterGuiComponent implements JMeterGUIComponent, LocaleChangeListener{
-    private static final long serialVersionUID = 241L;
+    private static final long serialVersionUID = 242L;
 
     private static final Logger log = LoggerFactory.getLogger(TestBeanGUI.class);
 
@@ -110,8 +110,7 @@ public class TestBeanGUI extends AbstractJMeterGuiComponent implements JMeterGUI
      * needs to be limited, though, to avoid memory issues when editing very
      * large test plans.
      */
-    @SuppressWarnings("unchecked")
-    private final Map<TestElement, Customizer> customizers = new LRUMap(20);
+    private final Map<TestElement, Customizer> customizers = new LRUMap<>(20);
 
     /** Index of the customizer in the JPanel's child component list: */
     private int customizerIndexInPanel;
@@ -327,12 +326,11 @@ public class TestBeanGUI extends AbstractJMeterGuiComponent implements JMeterGUI
             if (initialized){
                 remove(customizerIndexInPanel);
             }
-            Customizer c = customizers.get(element);
-            if (c == null) {
-                c = createCustomizer();
-                c.setObject(propertyMap);
-                customizers.put(element, c);
-            }
+            Customizer c = customizers.computeIfAbsent(element, e -> {
+                Customizer result = createCustomizer();
+                result.setObject(propertyMap);
+                return result;
+            });
             add((Component) c, BorderLayout.CENTER);
         }
     }
diff --git a/src/core/src/main/java/org/apache/jmeter/util/JSR223TestElement.java b/src/core/src/main/java/org/apache/jmeter/util/JSR223TestElement.java
index b485987..9a56824 100644
--- a/src/core/src/main/java/org/apache/jmeter/util/JSR223TestElement.java
+++ b/src/core/src/main/java/org/apache/jmeter/util/JSR223TestElement.java
@@ -34,7 +34,7 @@ import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
 
 import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.collections.map.LRUMap;
+import org.apache.commons.collections4.map.LRUMap;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.samplers.Sampler;
@@ -52,16 +52,15 @@ import org.slf4j.LoggerFactory;
 public abstract class JSR223TestElement extends ScriptingTestElement
     implements Serializable, TestStateListener
 {
-    private static final long serialVersionUID = 232L;
+    private static final long serialVersionUID = 233L;
 
     private static final Logger logger = LoggerFactory.getLogger(JSR223TestElement.class);
     /**
      * Cache of compiled scripts
      */
-    @SuppressWarnings("unchecked") // LRUMap does not support generics (yet)
     private static final Map<String, CompiledScript> compiledScriptsCache =
             Collections.synchronizedMap(
-                    new LRUMap(JMeterUtils.getPropDefault("jsr223.compiled_scripts_cache_size", 100)));
+                    new LRUMap<>(JMeterUtils.getPropDefault("jsr223.compiled_scripts_cache_size", 100)));
 
     /** If not empty then script in ScriptText will be compiled and cached */
     private String cacheKey = "";
diff --git a/src/dist/build.gradle.kts b/src/dist/build.gradle.kts
index ee77f9d..0966ad3 100644
--- a/src/dist/build.gradle.kts
+++ b/src/dist/build.gradle.kts
@@ -80,7 +80,7 @@ dependencies {
     buildDocs(platform(project(":src:bom")))
     buildDocs("org.apache.velocity:velocity")
     buildDocs("commons-lang:commons-lang")
-    buildDocs("commons-collections:commons-collections")
+    buildDocs("org.apache.commons:commons-collections4")
     buildDocs("org.jdom:jdom")
 }
 
diff --git a/src/jorphan/build.gradle.kts b/src/jorphan/build.gradle.kts
index 1c95246..39a99a4 100644
--- a/src/jorphan/build.gradle.kts
+++ b/src/jorphan/build.gradle.kts
@@ -22,7 +22,7 @@ dependencies {
     api("org.slf4j:slf4j-api")
 
     implementation("commons-io:commons-io")
-    implementation("commons-collections:commons-collections")
+    implementation("org.apache.commons:commons-collections4")
     implementation("org.apache.commons:commons-lang3")
     implementation("org.apache.commons:commons-math3")
     implementation("org.apache.commons:commons-text")
diff --git a/src/jorphan/src/main/java/org/apache/jorphan/util/XMLBuffer.java b/src/jorphan/src/main/java/org/apache/jorphan/util/XMLBuffer.java
index 3bef5e6..e3e5156 100644
--- a/src/jorphan/src/main/java/org/apache/jorphan/util/XMLBuffer.java
+++ b/src/jorphan/src/main/java/org/apache/jorphan/util/XMLBuffer.java
@@ -17,7 +17,7 @@
 
 package org.apache.jorphan.util;
 
-import org.apache.commons.collections.ArrayStack;
+import java.util.ArrayDeque;
 
 // @see org.apache.jorphan.util.TestXMLBuffer for unit tests
 
@@ -29,7 +29,7 @@ import org.apache.commons.collections.ArrayStack;
 public class XMLBuffer{
     private final StringBuilder sb = new StringBuilder(); // the string so far
 
-    private final ArrayStack tags = new ArrayStack(); // opened tags
+    private final ArrayDeque<String> tags = new ArrayDeque<>(); // opened tags
 
     public XMLBuffer() {
 
@@ -77,7 +77,7 @@ public class XMLBuffer{
      * @throws IllegalArgumentException if the tag names do not match
      */
     public XMLBuffer closeTag(String tagName) {
-        String tag = (String) tags.pop();
+        String tag = tags.pop();
         if (!tag.equals(tagName)) {
             throw new IllegalArgumentException(
                     "Trying to close tag: " + tagName + " ; should be " + tag);
@@ -110,7 +110,7 @@ public class XMLBuffer{
     @Override
     public String toString() {
         while (!tags.isEmpty()) {
-            endTag((String) tags.pop());
+            endTag(tags.pop());
         }
         return sb.toString();
     }
diff --git a/src/protocol/build.gradle.kts b/src/protocol/build.gradle.kts
index 2a1e2ab..8167828 100644
--- a/src/protocol/build.gradle.kts
+++ b/src/protocol/build.gradle.kts
@@ -70,7 +70,7 @@ project("http") {
         implementation("org.jodd:jodd-lagarto")
         implementation("org.jsoup:jsoup")
         implementation("oro:oro")
-        implementation("commons-collections:commons-collections")
+        implementation("org.apache.commons:commons-collections4")
         implementation("commons-net:commons-net")
         implementation("com.helger:ph-commons") {
             // We don't really need to use/distribute jsr305
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/CacheManager.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/CacheManager.java
index 79d2765..6a01fd6 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/CacheManager.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/CacheManager.java
@@ -31,7 +31,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.collections.map.LRUMap;
+import org.apache.commons.collections4.map.LRUMap;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
@@ -59,7 +59,7 @@ import org.slf4j.LoggerFactory;
  */
 public class CacheManager extends ConfigTestElement implements TestStateListener, TestIterationListener, Serializable {
 
-    private static final long serialVersionUID = 235L;
+    private static final long serialVersionUID = 236L;
 
     private static final Logger log = LoggerFactory.getLogger(CacheManager.class);
 
@@ -596,8 +596,7 @@ public class CacheManager extends ConfigTestElement implements TestStateListener
             @Override
             protected Map<String, CacheEntry> initialValue(){
                 // Bug 51942 - this map may be used from multiple threads
-                @SuppressWarnings("unchecked") // LRUMap is not generic currently
-                Map<String, CacheEntry> map = new LRUMap(getMaxSize());
+                Map<String, CacheEntry> map = new LRUMap<>(getMaxSize());
                 return Collections.synchronizedMap(map);
             }
         };
diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestCssParser.java b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestCssParser.java
index 194f36a..5429c89 100644
--- a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestCssParser.java
+++ b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestCssParser.java
@@ -27,7 +27,7 @@ import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
-import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.jmeter.junit.JMeterTestCase;
 import org.hamcrest.CoreMatchers;
 import org.junit.jupiter.api.Test;
@@ -46,19 +46,19 @@ public class TestCssParser extends JMeterTestCase {
     @Test
     public void testGetEmbeddedResourceURLsNoUrls() throws Exception {
         CssParser nonIgnoreParser = new CssParser();
-        List<?> result = extractUrls(nonIgnoreParser, "..");
+        List<URL> result = extractUrls(nonIgnoreParser, "..");
         assertThat(result, is(empty()));
     }
 
     @Test
     public void testGetEmbeddedResourceURLsnOneUrl() throws Exception {
-        List<?> result = extractUrls("@import url(http://example.com/abc.css);");
+        List<URL> result = extractUrls("@import url(http://example.com/abc.css);");
         assertThat(result, is(not(empty())));
     }
 
     @Test
     public void testExtractUrlsFromBrokenData() throws Exception {
-        List<?> result = extractUrls(CSS_IN_ERROR);
+        List<URL> result = extractUrls(CSS_IN_ERROR);
         assertThat(result, is(empty()));
     }
 
@@ -67,14 +67,14 @@ public class TestCssParser extends JMeterTestCase {
         assertThat(parser.isReusable(), CoreMatchers.is(true));
     }
 
-    private List<?> extractUrls(String css) throws LinkExtractorParseException,
+    private List<URL> extractUrls(String css) throws LinkExtractorParseException,
             MalformedURLException {
         return extractUrls(parser, css);
     }
 
-    private List<?> extractUrls(CssParser parser, String css)
+    private List<URL> extractUrls(CssParser parser, String css)
             throws LinkExtractorParseException, MalformedURLException {
-        List<?> result = IteratorUtils.toList(parser.getEmbeddedResourceURLs(
+        List<URL> result = IteratorUtils.toList(parser.getEmbeddedResourceURLs(
                 "Mozilla", css.getBytes(StandardCharsets.UTF_8), new URL(
                         "http://example.org/"), StandardCharsets.UTF_8
                         .displayName()));
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
index 2ca583e..cb221a6 100644
--- a/xdocs/changes.xml
+++ b/xdocs/changes.xml
@@ -120,6 +120,7 @@ Summary
     <li><pr>591</pr>Remove deprecated sudo flag from travis file. .Deng Liming (liming.d.pro at gmail.com)</li>
     <li>Updated Darklaf to 2.2.1 (from 2.1.1)</li>
     <li><pr>596</pr>Use neutral words in documentation</li>
+    <li><bug>63809</bug><pr>557</pr>Updated commons-collections to 4.4 (from 3.2.2) while keeping the jars for the old commons-collections 3.x for compatibility</li>
 </ul>
 
  <!-- =================== Bug fixes =================== -->