From 1db01ed8cfdd093217566805cfb8ea1f38c50ff5 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 7 Jul 2026 08:22:35 +0000 Subject: [PATCH] (chores): fix SonarCloud S2975 clone without super.clone Fix 3 clone() methods that don't call super.clone(), addressing SonarCloud rule java:S2975. - MiloClientConfiguration: use super.clone() with deep copy of mutable allowedSecurityPolicies set - ThreadPoolProfile: use super.clone() (all fields are immutable primitives/wrappers/enums/String) - DefaultLineBuilderStrategy.LineBuilder: rename clone() to copy() since the private inner class doesn't implement Cloneable Co-Authored-By: Claude Opus 4.6 --- .../milo/client/MiloClientConfiguration.java | 8 +++++++- .../pdf/text/DefaultLineBuilderStrategy.java | 5 ++--- .../org/apache/camel/spi/ThreadPoolProfile.java | 17 ++++++----------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java index 56d1534f0e73b..16337f837c001 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java @@ -453,7 +453,13 @@ public Double getRequestedPublishingInterval() { @Override public MiloClientConfiguration clone() { - return new MiloClientConfiguration(this); + try { + MiloClientConfiguration copy = (MiloClientConfiguration) super.clone(); + copy.allowedSecurityPolicies = new HashSet<>(this.allowedSecurityPolicies); + return copy; + } catch (CloneNotSupportedException e) { + throw new RuntimeCamelException(e); + } } public String toCacheId() { diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultLineBuilderStrategy.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultLineBuilderStrategy.java index 5d39efe82da18..3bec47adc52f6 100644 --- a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultLineBuilderStrategy.java +++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultLineBuilderStrategy.java @@ -101,7 +101,7 @@ private boolean isSplitIndexFound(String word, float allowedLineWidth, int curre } private boolean isWordFitInCurrentLine(LineBuilder currentLine, String word, float allowedLineWidth) throws IOException { - LineBuilder lineBuilder = currentLine.clone().appendWord(word); + LineBuilder lineBuilder = currentLine.copy().appendWord(word); return isLineFitInLineWidth(lineBuilder.buildLine(), allowedLineWidth); } @@ -160,8 +160,7 @@ private void reset() { wordsCount = 0; } - @Override - public LineBuilder clone() { + public LineBuilder copy() { return new LineBuilder(this.line.toString(), this.wordsCount); } diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java b/core/camel-api/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java index a5038c0d5b2c2..7ccb224f17ce3 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java @@ -22,6 +22,7 @@ import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.TimeUnit; +import org.apache.camel.RuntimeCamelException; import org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy; import org.jspecify.annotations.Nullable; @@ -289,17 +290,11 @@ public boolean isEmpty() { @Override public ThreadPoolProfile clone() { - ThreadPoolProfile cloned = new ThreadPoolProfile(); - cloned.setDefaultProfile(defaultProfile); - cloned.setId(id); - cloned.setKeepAliveTime(keepAliveTime); - cloned.setMaxPoolSize(maxPoolSize); - cloned.setMaxQueueSize(maxQueueSize); - cloned.setPoolSize(poolSize); - cloned.setAllowCoreThreadTimeOut(allowCoreThreadTimeOut); - cloned.setRejectedPolicy(rejectedPolicy); - cloned.setTimeUnit(timeUnit); - return cloned; + try { + return (ThreadPoolProfile) super.clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeCamelException(e); + } } @Override