(String name, Type genericType)
| 180 | } |
| 181 | |
| 182 | private static void checkMapKeys(String name, Type genericType) { |
| 183 | Class<?> keyClass = null; |
| 184 | |
| 185 | // assume our type parameterized |
| 186 | if (ParameterizedType.class.isAssignableFrom(genericType.getClass())) { |
| 187 | final Type[] parameterTypes = ((ParameterizedType) genericType).getActualTypeArguments(); |
| 188 | keyClass = (Class<?>) parameterTypes[0]; |
| 189 | } else if (genericType instanceof Class<?>) { |
| 190 | // raw class, type parameters cannot be inferred directly, but we can scan any extended |
| 191 | // interfaces looking for any explict types |
| 192 | final Type[] interfaces = ((Class<?>) genericType).getGenericInterfaces(); |
| 193 | for (final Type extended : interfaces) { |
| 194 | if (ParameterizedType.class.isAssignableFrom(extended.getClass())) { |
| 195 | // use the first extended interface we find. |
| 196 | final Type[] parameterTypes = ((ParameterizedType) extended).getActualTypeArguments(); |
| 197 | keyClass = (Class<?>) parameterTypes[0]; |
| 198 | break; |
| 199 | } |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | if (keyClass != null) { |
| 204 | checkState( |
| 205 | String.class.equals(keyClass), |
| 206 | "%s key must be a String: %s", |
| 207 | name, |
| 208 | keyClass.getSimpleName()); |
| 209 | } |
| 210 | } |
| 211 | |
| 212 | /** |
| 213 | * Called by parseAndValidateMetadata twice, first on the declaring class, then on the target |
no test coverage detected