You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2015/01/22 11:49:09 UTC

svn commit: r1653807 - /felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FieldUtil.java

Author: pderop
Date: Thu Jan 22 10:49:08 2015
New Revision: 1653807

URL: http://svn.apache.org/r1653807
Log:
Fixed NPE when checking auto configurable fields having a "Iterable<Class>" type or a Map<Class, Dictionary>" type.

Modified:
    felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FieldUtil.java

Modified: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FieldUtil.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FieldUtil.java?rev=1653807&r1=1653806&r2=1653807&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FieldUtil.java (original)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FieldUtil.java Thu Jan 22 10:49:08 2015
@@ -21,6 +21,7 @@ package org.apache.felix.dm.impl;
 import java.lang.reflect.Field;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
 import java.util.Collection;
 import java.util.Dictionary;
 import java.util.Map;
@@ -291,9 +292,15 @@ public class FieldUtil {
             if (parameterType == null) {
                 return false;
             }
-            Class<?> parameterizedTypeClass = (Class<?>) parameterType.getActualTypeArguments()[0];
-            return strictClassEquality ? parameterizedTypeClass.equals(clazz)
-                : parameterizedTypeClass.isAssignableFrom(clazz);
+            Type[] types = parameterType.getActualTypeArguments();
+            if (types == null || types.length == 0) {
+            	return false;
+            }
+            if (types[0] instanceof Class<?>) {
+            	Class<?> parameterizedTypeClass = (Class<?>) types[0];
+            	return strictClassEquality ? parameterizedTypeClass.equals(clazz)
+            			: parameterizedTypeClass.isAssignableFrom(clazz);
+            }	
         }
         return false;
     }
@@ -309,28 +316,33 @@ public class FieldUtil {
             if (parameterType == null) {
                 return false;
             }
+            
+            Type[] types = parameterType.getActualTypeArguments();
+            if (types == null || types.length < 2) {
+            	return false;
+            }
                    
             // The map field generic key parameter must be "Class".
-            if (! (parameterType.getActualTypeArguments()[0] instanceof Class<?>)) {
+            if (! (types[0] instanceof Class<?>)) {
                 return false;
             }
             
             // The map generic value parameter must be Dictionary, or Dictionary<String, ...>
-            if (parameterType.getActualTypeArguments()[1] instanceof Class<?>) {
+            if (types[1] instanceof Class<?>) {
                 // The map field is in the form "Map m_field<Class, Dictionary>"
-                Class<?> mapValueGenericType = (Class<?>) parameterType.getActualTypeArguments()[1];
+                Class<?> mapValueGenericType = (Class<?>) types[1];
                 if (! mapValueGenericType.equals(Dictionary.class)) {
                     return false;
                 }
-            } else if (parameterType.getActualTypeArguments()[1] instanceof ParameterizedType) {
+            } else if (types[1] instanceof ParameterizedType) {
                 // The map field is in the form "Map m_field<Class, Dictionary<String, ...>"
-                ParameterizedType mapValueGenericType = (ParameterizedType) parameterType.getActualTypeArguments()[1];
+                ParameterizedType mapValueGenericType = (ParameterizedType) types[1];
                 if (! mapValueGenericType.getRawType().equals(Dictionary.class)) {
                     return false;
                 }
             }
             
-            Class<?> K = (Class<?>) parameterType.getActualTypeArguments()[0];
+            Class<?> K = (Class<?>) types[0];
             return strictClassEquality ? K.equals(clazz) : K.isAssignableFrom(clazz);
         }
         return false;