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;