This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 67a7bbd1b6 Replace Mutaters with BasicConverter
67a7bbd1b6 is described below
commit 67a7bbd1b647d49b3846fc5ccfc9be9a600a045c
Author: James Bognar <[email protected]>
AuthorDate: Thu Apr 2 17:24:08 2026 -0700
Replace Mutaters with BasicConverter
---
.github/workflows/sonarcloud.yml | 7 ++++---
.../juneau/commons/conversion/BasicConverter.java | 10 ++++++++++
.../src/main/java/org/apache/juneau/BeanSession.java | 18 +-----------------
.../juneau/commons/conversion/BasicConverter_Test.java | 11 ++++++-----
4 files changed, 21 insertions(+), 25 deletions(-)
diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml
index 22a40779b9..307360e083 100644
--- a/.github/workflows/sonarcloud.yml
+++ b/.github/workflows/sonarcloud.yml
@@ -25,8 +25,10 @@ jobs:
build:
name: Build and analyze
runs-on: ubuntu-latest
+ env:
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better
relevancy of analysis
- name: Set up JDK 17
@@ -54,9 +56,8 @@ jobs:
run: mvn -B clean verify
- name: SonarCloud analysis
- if: ${{ secrets.SONAR_TOKEN != '' }}
+ if: ${{ env.SONAR_TOKEN != '' }}
env:
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mvn -B org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/conversion/BasicConverter.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/conversion/BasicConverter.java
index dc7f4f55f2..5c02525e82 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/conversion/BasicConverter.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/conversion/BasicConverter.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.StringUtils.*;
import static org.apache.juneau.commons.utils.ThrowableUtils.*;
import java.lang.reflect.*;
+import java.math.*;
import java.util.*;
import java.util.concurrent.atomic.*;
@@ -235,6 +236,13 @@ public class BasicConverter extends CachingConverter {
if (outType == Byte.class) return (in, memberOf, session, args)
-> (O) Byte.valueOf(((Number) in).byteValue());
if (outType == AtomicInteger.class) return (in, memberOf,
session, args) -> (O) new AtomicInteger(((Number) in).intValue());
if (outType == AtomicLong.class) return (in, memberOf, session,
args) -> (O) new AtomicLong(((Number) in).longValue());
+ if (outType == BigDecimal.class) return (in, memberOf, session,
args) -> (O) new BigDecimal(((Number) in).toString());
+ if (outType == BigInteger.class) return (in, memberOf, session,
args) -> {
+ var n = (Number) in;
+ if (n instanceof BigDecimal bd) return (O)
bd.toBigInteger();
+ if (n instanceof BigInteger bi) return (O) bi;
+ return (O) BigInteger.valueOf(n.longValue());
+ };
return null;
}
@@ -247,6 +255,8 @@ public class BasicConverter extends CachingConverter {
if (outType == Byte.class) return (in, memberOf, session, args)
-> (O) Byte.valueOf(in.booleanValue() ? (byte) 1 : (byte) 0);
if (outType == AtomicInteger.class) return (in, memberOf,
session, args) -> (O) new AtomicInteger(in.booleanValue() ? 1 : 0);
if (outType == AtomicLong.class) return (in, memberOf, session,
args) -> (O) new AtomicLong(in.booleanValue() ? 1L : 0L);
+ if (outType == BigDecimal.class) return (in, memberOf, session,
args) -> (O) BigDecimal.valueOf(in.booleanValue() ? 1L : 0L);
+ if (outType == BigInteger.class) return (in, memberOf, session,
args) -> (O) BigInteger.valueOf(in.booleanValue() ? 1L : 0L);
return null;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 6474edac54..bb2d721f0c 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -1252,23 +1252,7 @@ public class BeanSession extends ContextSession
implements ConverterSession {
if (to.isNumber()) {
if (from.isNumber()) {
- var n = (Number)value;
- if (tc == Integer.class)
- return
(T)Integer.valueOf(n.intValue());
- if (tc == Short.class)
- return
(T)Short.valueOf(n.shortValue());
- if (tc == Long.class)
- return
(T)Long.valueOf(n.longValue());
- if (tc == Float.class)
- return
(T)Float.valueOf(n.floatValue());
- if (tc == Double.class)
- return
(T)Double.valueOf(n.doubleValue());
- if (tc == Byte.class)
- return
(T)Byte.valueOf(n.byteValue());
- if (tc == AtomicInteger.class)
- return (T)new
AtomicInteger(n.intValue());
- if (tc == AtomicLong.class)
- return (T)new
AtomicLong(n.intValue());
+ return ctxConverter.to(value, outer,
this, to.innerType(), to.getParameters());
} else if (from.isBoolean()) {
var b = (Boolean)value;
boolean b2 = isTrue(b);
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/commons/conversion/BasicConverter_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/commons/conversion/BasicConverter_Test.java
index 742dc647ad..858efe9c4a 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/commons/conversion/BasicConverter_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/commons/conversion/BasicConverter_Test.java
@@ -86,11 +86,12 @@ class BasicConverter_Test extends TestBase {
assertEquals((byte) 42, C.to("42", byte.class));
}
- @Test void a05_numberAndBooleanToUnsupportedNumericType() {
- // Number → BigDecimal: hits findNumberFromNumber line 234
false branch (not AtomicLong), returns null
- assertThrows(InvalidConversionException.class, () -> C.to(42,
java.math.BigDecimal.class));
- // Boolean → BigDecimal: hits findNumberFromBoolean line 246
false branch (not AtomicLong), returns null
- assertThrows(InvalidConversionException.class, () -> C.to(true,
java.math.BigDecimal.class));
+ @Test void a05_numberToBigDecimalAndBigInteger() {
+ assertEquals(new java.math.BigDecimal("42"), C.to(42,
java.math.BigDecimal.class));
+ assertEquals(new java.math.BigDecimal("9.0"), C.to(9.0,
java.math.BigDecimal.class));
+ assertEquals(java.math.BigInteger.valueOf(42), C.to(42,
java.math.BigInteger.class));
+ assertEquals(java.math.BigInteger.valueOf(1), C.to(true,
java.math.BigDecimal.class).toBigInteger());
+ assertEquals(java.math.BigInteger.valueOf(0), C.to(false,
java.math.BigDecimal.class).toBigInteger());
}
//====================================================================================================