Improve InstanceIdentifier.keyOf() 54/12954/1
authorRobert Varga <rovarga@cisco.com>
Wed, 19 Nov 2014 17:04:10 +0000 (18:04 +0100)
committerRobert Varga <rovarga@cisco.com>
Wed, 19 Nov 2014 17:06:28 +0000 (18:06 +0100)
Rather than throwing a ClassCastException, this documents that the
keyOf() method can throw an IllegalArgumentException.

Change-Id: I5d5b9e10c7329c6bc909b28b07c7bc6500cfcd5a
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java

index 9840338bb9442bd82db429ef1a2379db6a45d2ee..934c90d9ae77aea68079ad3b0a91eb6489dda1bc 100644 (file)
@@ -479,8 +479,13 @@ public class InstanceIdentifier<T extends DataObject> implements Path<InstanceId
      *
      * @param id instance identifier
      * @return key associated with the last component
+     * @throws IllegalArgumentException if the supplied identifier type cannot have a key.
+     * @throws NullPointerException if id is null.
      */
     public static <N extends Identifiable<K> & DataObject, K extends Identifier<N>> K keyOf(final InstanceIdentifier<N> id) {
+        Preconditions.checkNotNull(id);
+        Preconditions.checkArgument(id instanceof KeyedInstanceIdentifier, "%s does not have a key", id);
+
         @SuppressWarnings("unchecked")
         final K ret = ((KeyedInstanceIdentifier<N, K>)id).getKey();
         return ret;