You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2025/09/22 12:56:49 UTC
(commons-rng) 04/04: pmd fix: avoid assignment in operand
This is an automated email from the ASF dual-hosted git repository.
aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git
commit 47225b50c565b5ed7b99a7c16b43b2c2e4d210a6
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Mon Sep 22 13:23:19 2025 +0100
pmd fix: avoid assignment in operand
---
.../commons/rng/core/source32/JenkinsSmallFast32.java | 4 +++-
.../rng/core/source32/MiddleSquareWeylSequence.java | 9 ++++++---
.../rng/core/source32/MultiplyWithCarry256.java | 3 ++-
.../commons/rng/core/source64/JenkinsSmallFast64.java | 4 +++-
.../apache/commons/rng/core/source64/SplitMix64.java | 3 ++-
.../MarsagliaTsangWangDiscreteSampler.java | 18 +++++++++++++++---
.../commons/rng/simple/internal/SeedFactory.java | 3 ++-
src/conf/pmd/pmd-ruleset.xml | 6 ++++++
8 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/JenkinsSmallFast32.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/JenkinsSmallFast32.java
index 4b533317..eb3cac12 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/JenkinsSmallFast32.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/JenkinsSmallFast32.java
@@ -53,7 +53,9 @@ public class JenkinsSmallFast32 extends IntProvider {
*/
private void setSeedInternal(int seed) {
a = 0xf1ea5eed;
- b = c = d = seed;
+ b = seed;
+ c = seed;
+ d = seed;
for (int i = 0; i < 20; i++) {
next();
}
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MiddleSquareWeylSequence.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MiddleSquareWeylSequence.java
index ce071081..3761b475 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MiddleSquareWeylSequence.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MiddleSquareWeylSequence.java
@@ -125,7 +125,8 @@ public class MiddleSquareWeylSequence extends IntProvider {
@Override
public int next() {
x *= x;
- x += w += s;
+ w += s;
+ x += w;
x = (x >>> 32) | (x << 32);
return (int) x;
}
@@ -135,11 +136,13 @@ public class MiddleSquareWeylSequence extends IntProvider {
public long nextLong() {
// Avoid round trip from long to int to long by performing two iterations inline
x *= x;
- x += w += s;
+ w += s;
+ x += w;
final long i1 = x & 0xffffffff00000000L;
x = (x >>> 32) | (x << 32);
x *= x;
- x += w += s;
+ w += s;
+ x += w;
final long i2 = x >>> 32;
x = i2 | x << 32;
return i1 | i2;
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MultiplyWithCarry256.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MultiplyWithCarry256.java
index 32cb0178..8cd619a6 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MultiplyWithCarry256.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MultiplyWithCarry256.java
@@ -113,6 +113,7 @@ public class MultiplyWithCarry256 extends IntProvider {
index &= 0xff;
final long t = A * (state[index] & 0xffffffffL) + carry;
carry = (int) (t >> 32);
- return state[index++] = (int) t;
+ state[index++] = (int) t;
+ return (int) t;
}
}
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/JenkinsSmallFast64.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/JenkinsSmallFast64.java
index 53c56af5..3e354ce4 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/JenkinsSmallFast64.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/JenkinsSmallFast64.java
@@ -52,7 +52,9 @@ public class JenkinsSmallFast64 extends LongProvider {
*/
private void setSeedInternal(long seed) {
a = 0xf1ea5eedL;
- b = c = d = seed;
+ b = seed;
+ c = seed;
+ d = seed;
for (int i = 0; i < 20; i++) {
next();
}
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/SplitMix64.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/SplitMix64.java
index ffea0a15..a39d3e1a 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/SplitMix64.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/SplitMix64.java
@@ -56,7 +56,8 @@ public class SplitMix64 extends LongProvider {
/** {@inheritDoc} */
@Override
public long next() {
- long z = state += 0x9e3779b97f4a7c15L;
+ long z = state + 0x9e3779b97f4a7c15L;
+ state = z;
z = (z ^ (z >>> 30)) * 0xbf58476d1ce4e5b9L;
z = (z ^ (z >>> 27)) * 0x94d049bb133111ebL;
return z ^ (z >>> 31);
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java
index 15d282b3..6ca89252 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java
@@ -189,7 +189,11 @@ public final class MarsagliaTsangWangDiscreteSampler {
t2 = t1 + (n2 << 18);
t3 = t2 + (n3 << 12);
t4 = t3 + (n4 << 6);
- n1 = n2 = n3 = n4 = n5 = 0;
+ n1 = 0;
+ n2 = 0;
+ n3 = 0;
+ n4 = 0;
+ n5 = 0;
// Fill tables
for (int i = 0; i < prob.length; i++) {
@@ -331,7 +335,11 @@ public final class MarsagliaTsangWangDiscreteSampler {
t2 = t1 + (n2 << 18);
t3 = t2 + (n3 << 12);
t4 = t3 + (n4 << 6);
- n1 = n2 = n3 = n4 = n5 = 0;
+ n1 = 0;
+ n2 = 0;
+ n3 = 0;
+ n4 = 0;
+ n5 = 0;
// Fill tables
for (int i = 0; i < prob.length; i++) {
@@ -470,7 +478,11 @@ public final class MarsagliaTsangWangDiscreteSampler {
t2 = t1 + (n2 << 18);
t3 = t2 + (n3 << 12);
t4 = t3 + (n4 << 6);
- n1 = n2 = n3 = n4 = n5 = 0;
+ n1 = 0;
+ n2 = 0;
+ n3 = 0;
+ n4 = 0;
+ n5 = 0;
// Fill tables
for (int i = 0; i < prob.length; i++) {
diff --git a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/SeedFactory.java b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/SeedFactory.java
index 62627da1..740e42bf 100644
--- a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/SeedFactory.java
+++ b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/SeedFactory.java
@@ -374,7 +374,8 @@ public final class SeedFactory {
final int end = from + len;
int i = from;
while (i < end) {
- long v = MixFunctions.stafford13(x += MixFunctions.GOLDEN_RATIO_64);
+ x += MixFunctions.GOLDEN_RATIO_64;
+ long v = MixFunctions.stafford13(x);
for (int j = 0; j < 8; j++) {
seed[i++] = (byte) v;
v >>>= 8;
diff --git a/src/conf/pmd/pmd-ruleset.xml b/src/conf/pmd/pmd-ruleset.xml
index 4f35486c..770b34e0 100644
--- a/src/conf/pmd/pmd-ruleset.xml
+++ b/src/conf/pmd/pmd-ruleset.xml
@@ -290,6 +290,12 @@
<rule ref="category/java/errorprone.xml/AssignmentInOperand">
<properties>
<property name="allowIncrementDecrement" value="true" />
+ <!-- Reassignment of the constructor seed is allowed to extend the seed length. -->
+ <property name="violationSuppressXPath"
+ value="./ancestor-or-self::ClassDeclaration[@SimpleName='AbstractL64X128' or
+ @SimpleName='L128X1024Mix' or @SimpleName='L128X128Mix' or
+ @SimpleName='L128X256Mix' or @SimpleName='L64X1024Mix' or
+ @SimpleName='L64X256Mix']"/>
</properties>
</rule>