You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/04/27 13:20:37 UTC

[camel] 02/02: (chores) camel-base: break a few large methods

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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 559e970de7982bfca7503c445e5b35b98d437b72
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Apr 27 09:28:06 2023 +0200

    (chores) camel-base: break a few large methods
    
    This should help the profiler to provide useful information
---
 .../impl/converter/CoreTypeConverterRegistry.java  | 160 +++++++++++++--------
 1 file changed, 98 insertions(+), 62 deletions(-)

diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
index f7f2ed1cc7c..a297b4594f3 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
@@ -381,6 +381,35 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
         }
     }
 
+    private static Object primitiveTypes(final Class<?> type) {
+        if (boolean.class == type) {
+            return Boolean.FALSE;
+        }
+        if (int.class == type) {
+            return 0;
+        }
+        if (long.class == type) {
+            return 0L;
+        }
+        if (byte.class == type) {
+            return (byte) 0;
+        }
+        if (short.class == type) {
+            return (short) 0;
+        }
+        if (double.class == type) {
+            return 0.0;
+        }
+        if (float.class == type) {
+            return 0.0f;
+        }
+        if (char.class == type) {
+            return '\0';
+        }
+
+        return null;
+    }
+
     protected Object doConvertTo(
             final Class<?> type, final Exchange exchange, final Object value,
             final boolean tryConvert)
@@ -394,30 +423,7 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
             }
             // lets avoid NullPointerException when converting to primitives for null values
             if (type.isPrimitive()) {
-                if (boolean.class == type) {
-                    return Boolean.FALSE;
-                }
-                if (int.class == type) {
-                    return 0;
-                }
-                if (long.class == type) {
-                    return 0L;
-                }
-                if (byte.class == type) {
-                    return (byte) 0;
-                }
-                if (short.class == type) {
-                    return (short) 0;
-                }
-                if (double.class == type) {
-                    return 0.0;
-                }
-                if (float.class == type) {
-                    return 0.0f;
-                }
-                if (char.class == type) {
-                    return '\0';
-                }
+                return primitiveTypes(type);
             }
             return null;
         }
@@ -447,12 +453,7 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
         // try to find a suitable type converter
         TypeConverter converter = getOrFindTypeConverter(type, value.getClass());
         if (converter != null) {
-            Object rc;
-            if (tryConvert) {
-                rc = converter.tryConvertTo(type, exchange, value);
-            } else {
-                rc = converter.convertTo(type, exchange, value);
-            }
+            Object rc = doConvert(type, exchange, value, tryConvert, converter);
             if (rc != null) {
                 return rc;
             } else if (converter.allowNull()) {
@@ -469,12 +470,7 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
                 if (tc != null) {
                     // add the type as a known type converter as we can convert from primitive to object converter
                     addTypeConverter(type, fromType, tc);
-                    Object rc;
-                    if (tryConvert) {
-                        rc = tc.tryConvertTo(primitiveType, exchange, value);
-                    } else {
-                        rc = tc.convertTo(primitiveType, exchange, value);
-                    }
+                    Object rc = doConvert(exchange, value, tryConvert, primitiveType, tc);
                     if (rc == null && tc.allowNull()) {
                         return null;
                     } else if (rc != null) {
@@ -487,12 +483,7 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
         // fallback converters
         for (FallbackTypeConverter fallback : fallbackConverters) {
             TypeConverter tc = fallback.getFallbackTypeConverter();
-            Object rc;
-            if (tryConvert) {
-                rc = tc.tryConvertTo(type, exchange, value);
-            } else {
-                rc = tc.convertTo(type, exchange, value);
-            }
+            Object rc = doConvert(type, exchange, value, tryConvert, tc);
             if (rc == null && tc.allowNull()) {
                 return null;
             }
@@ -523,6 +514,24 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
         return TypeConverter.MISS_VALUE;
     }
 
+    private static Object doConvert(
+            Exchange exchange, Object value, boolean tryConvert, Class<?> primitiveType, TypeConverter tc) {
+        if (tryConvert) {
+            return tc.tryConvertTo(primitiveType, exchange, value);
+        } else {
+            return tc.convertTo(primitiveType, exchange, value);
+        }
+    }
+
+    private static Object doConvert(
+            Class<?> type, Exchange exchange, Object value, boolean tryConvert, TypeConverter converter) {
+        if (tryConvert) {
+            return converter.tryConvertTo(type, exchange, value);
+        } else {
+            return converter.convertTo(type, exchange, value);
+        }
+    }
+
     public TypeConverter getTypeConverter(Class<?> toType, Class<?> fromType) {
         return typeMappings.get(toType, fromType);
     }
@@ -618,35 +627,27 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
         if (fromType != null) {
 
             // try with base converters first
-            TypeConverter converter;
-            for (BulkTypeConverters base : bulkTypeConverters) {
-                converter = base.lookup(toType, fromType);
-                if (converter != null) {
-                    return converter;
-                }
+            final TypeConverter baseConverters = tryBaseConverters(toType, fromType);
+            if (baseConverters != null) {
+                return baseConverters;
             }
 
             // lets try if there is a direct match
-            converter = getTypeConverter(toType, fromType);
-            if (converter != null) {
-                return converter;
+            final TypeConverter directMatchConverter = tryDirectMatchConverters(toType, fromType);
+            if (directMatchConverter != null) {
+                return directMatchConverter;
             }
 
             // try the interfaces
-            for (Class<?> type : fromType.getInterfaces()) {
-                converter = getTypeConverter(toType, type);
-                if (converter != null) {
-                    return converter;
-                }
+            final TypeConverter interfaceConverter = tryInterfaceConverters(toType, fromType);
+            if (interfaceConverter != null) {
+                return interfaceConverter;
             }
 
             // try super then
-            Class<?> fromSuperClass = fromType.getSuperclass();
-            if (fromSuperClass != null && !fromSuperClass.equals(Object.class)) {
-                converter = doLookup(toType, fromSuperClass, true);
-                if (converter != null) {
-                    return converter;
-                }
+            final TypeConverter superConverter = trySuperConverters(toType, fromType);
+            if (superConverter != null) {
+                return superConverter;
             }
         }
 
@@ -675,6 +676,41 @@ public class CoreTypeConverterRegistry extends ServiceSupport implements TypeCon
         return null;
     }
 
+    private TypeConverter trySuperConverters(Class<?> toType, Class<?> fromType) {
+        Class<?> fromSuperClass = fromType.getSuperclass();
+        if (fromSuperClass != null && !fromSuperClass.equals(Object.class)) {
+            final TypeConverter converter = doLookup(toType, fromSuperClass, true);
+            if (converter != null) {
+                return converter;
+            }
+        }
+        return null;
+    }
+
+    private TypeConverter tryInterfaceConverters(Class<?> toType, Class<?> fromType) {
+        for (Class<?> type : fromType.getInterfaces()) {
+            TypeConverter converter = getTypeConverter(toType, type);
+            if (converter != null) {
+                return converter;
+            }
+        }
+        return null;
+    }
+
+    private TypeConverter tryDirectMatchConverters(Class<?> toType, Class<?> fromType) {
+        return getTypeConverter(toType, fromType);
+    }
+
+    private TypeConverter tryBaseConverters(Class<?> toType, Class<?> fromType) {
+        for (BulkTypeConverters base : bulkTypeConverters) {
+            TypeConverter converter = base.lookup(toType, fromType);
+            if (converter != null) {
+                return converter;
+            }
+        }
+        return null;
+    }
+
     protected TypeConversionException createTypeConversionException(
             Exchange exchange, Class<?> type, Object value, Throwable cause) {
         if (cause instanceof TypeConversionException) {