Author: davidb Date: Tue Oct 18 13:39:25 2016 New Revision: 1765440 URL: http://svn.apache.org/viewvc?rev=1765440&view=rev Log: Felix Converter - additional refactoring
Modified: felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converting.java Modified: felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java?rev=1765440&r1=1765439&r2=1765440&view=diff ============================================================================== --- felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java (original) +++ felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java Tue Oct 18 13:39:25 2016 @@ -62,8 +62,10 @@ public class ConvertingImpl implements C private volatile Class<?> treatAsClass; private volatile Object defaultValue; private volatile boolean hasDefault; + private volatile Class<?> sourceClass; private volatile Class<?> targetActualClass; private volatile Class<?> targetViewClass; + private volatile Type[] typeArguments; ConvertingImpl(Converter c, Object obj) { converter = c; @@ -106,7 +108,6 @@ public class ConvertingImpl implements C @Override public Object to(Type type) { Class<?> cls = null; - Type[] typeArguments = null; if (type instanceof Class) { cls = (Class<?>) type; } else if (type instanceof ParameterizedType) { @@ -122,14 +123,13 @@ public class ConvertingImpl implements C if (object == null) return handleNull(cls); - // TODO convert targetCls and sourceCls into members targetActualClass = Util.primitiveToBoxed(cls); if (targetViewClass == null) targetViewClass = targetActualClass; - // Class<?> targetCls = targetViewClass != null ? targetViewClass : targetActualClass; - Class<?> sourceCls = treatAsClass != null ? treatAsClass : object.getClass(); - if (!isCopyRequiredType(targetViewClass) && targetViewClass.isAssignableFrom(sourceCls)) { + sourceClass = treatAsClass != null ? treatAsClass : object.getClass(); + + if (!isCopyRequiredType(targetViewClass) && targetViewClass.isAssignableFrom(sourceClass)) { return object; } @@ -140,15 +140,15 @@ public class ConvertingImpl implements C if (targetViewClass.isArray()) { return convertToArray(); } else if (Collection.class.isAssignableFrom(targetViewClass)) { - return convertToCollection(typeArguments); // TODO typeArguments can be stored in member too + return convertToCollection(); } else if (isDTOType()) { - return convertToDTO(sourceCls); + return convertToDTO(); } else if (isMapType()) { - return convertToMapType(sourceCls, typeArguments); + return convertToMapType(); } // At this point we know that the target is a 'singular' type: not a map, collection or array - if (Collection.class.isAssignableFrom(sourceCls)) { + if (Collection.class.isAssignableFrom(sourceClass)) { return convertCollectionToSingleValue(cls); } else if ((object = asBoxedArray(object)) instanceof Object[]) { return convertArrayToSingleValue(cls); @@ -210,7 +210,7 @@ public class ConvertingImpl implements C } @SuppressWarnings({ "unchecked", "rawtypes" }) - private <T> T convertToCollection(Type[] typeArguments) { + private <T> T convertToCollection() { Collection<?> cv = collectionView(object); Class<?> targetElementType = null; if (typeArguments != null && typeArguments.length > 0 && typeArguments[0] instanceof Class) { @@ -239,8 +239,8 @@ public class ConvertingImpl implements C } @SuppressWarnings({ "rawtypes", "unchecked" }) - private <T> T convertToDTO(Class<?> sourceCls) { - Map m = mapView(object, sourceCls, converter); + private <T> T convertToDTO() { + Map m = mapView(object, sourceClass, converter); try { T dto = (T) targetActualClass.newInstance(); @@ -270,8 +270,8 @@ public class ConvertingImpl implements C } @SuppressWarnings({ "rawtypes", "unchecked" }) - private Map convertToMap(Class<?> sourceCls, Type[] typeArguments) { - Map m = mapView(object, sourceCls, converter); + private Map convertToMap() { + Map m = mapView(object, sourceClass, converter); if (m == null) return null; Type targetKeyType = null, targetValueType = null; @@ -310,14 +310,14 @@ public class ConvertingImpl implements C return instance; } - private Object convertToMapType(Class<?> sourceCls, Type[] typeArguments) { + private Object convertToMapType() { if (Map.class.isAssignableFrom(targetViewClass)) - return convertToMap(sourceCls, typeArguments); + return convertToMap(); else if (Dictionary.class.isAssignableFrom(targetViewClass)) return null; // TODO new Hashtable(convertToMap(sourceCls, Map.class, typeArguments)); else if (targetViewClass.isInterface()) - return createProxy(sourceCls, targetViewClass); - return createJavaBean(sourceCls, targetViewClass); + return createProxy(sourceClass, targetViewClass); + return createJavaBean(sourceClass, targetViewClass); } private Object createJavaBean(Class<?> sourceCls, Class<?> targetCls) { @@ -564,10 +564,6 @@ public class ConvertingImpl implements C return result; } - private Object createMapOrCollection(int initialSize) { - return createMapOrCollection(targetActualClass, initialSize); - } - private static Object createMapOrCollection(Class<?> cls, int initialSize) { try { Constructor<?> ctor = cls.getConstructor(int.class); @@ -731,7 +727,7 @@ public class ConvertingImpl implements C if (m.size() > 0) return m; } - return createMapFromInterface(obj);// TODO, sourceCls); + return createMapFromInterface(obj); } private static boolean isCopyRequiredType(Class<?> cls) { Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converting.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converting.java?rev=1765440&r1=1765439&r2=1765440&view=diff ============================================================================== --- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converting.java (original) +++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converting.java Tue Oct 18 13:39:25 2016 @@ -25,7 +25,7 @@ import org.osgi.annotation.versioning.Pr * {@link Converter} service by starting a conversion for a specific object. * * @author $Id$ - * @ThreadSafe + * @NotThreadSafe */ @ProviderType public interface Converting {