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());
        }
 
        
//====================================================================================================

Reply via email to