Switch on method names 88/77888/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 16 Nov 2018 06:51:27 +0000 (07:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 16 Nov 2018 10:57:20 +0000 (11:57 +0100)
Method names are guarateed to be interned by the JVM, hence their
hashCode is O(1) -- making them a prime target for a switch statement,
which side-steps the need to run String.equals() slow path most of
the time.

JIRA: MDSAL-398
Change-Id: Ie57c2f9fd8c3757ec08e1be945b08d66ebbcff4e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit b4db803c07b50d2f3f7977e0509dbb60724c4b1d)

binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/LazyDataObject.java

index 4b394cd3732cf5277b7147fbcaf7116c42c060fd..0cbd8805393998357cbf2d559d46b6bdb0502d3c 100644 (file)
@@ -60,22 +60,26 @@ class LazyDataObject<D extends DataObject> implements InvocationHandler, Augment
     public Object invoke(final Object proxy, final Method method, final Object[] args) {
         switch (method.getParameterCount()) {
             case 0:
-                final String name = method.getName();
-                if (DATA_CONTAINER_GET_IMPLEMENTED_INTERFACE_NAME.equals(name)) {
-                    return context.getBindingClass();
-                } else if (TO_STRING.equals(name)) {
-                    return bindingToString();
-                } else if (HASHCODE.equals(name)) {
-                    return bindingHashCode();
-                } else if (AUGMENTATIONS.equals(name)) {
-                    return getAugmentationsImpl();
+                switch (method.getName()) {
+                    case DATA_CONTAINER_GET_IMPLEMENTED_INTERFACE_NAME:
+                        return context.getBindingClass();
+                    case TO_STRING:
+                        return bindingToString();
+                    case HASHCODE:
+                        return bindingHashCode();
+                    case AUGMENTATIONS:
+                        return getAugmentationsImpl();
+                    default:
+                        return getBindingData(method);
                 }
-                return getBindingData(method);
             case 1:
-                if (AUGMENTABLE_GET_AUGMENTATION_NAME.equals(method.getName())) {
-                    return getAugmentationImpl((Class<?>) args[0]);
-                } else if (EQUALS.equals(method.getName())) {
-                    return bindingEquals(args[0]);
+                switch (method.getName()) {
+                    case AUGMENTABLE_GET_AUGMENTATION_NAME:
+                        return getAugmentationImpl((Class<?>) args[0]);
+                    case EQUALS:
+                        return bindingEquals(args[0]);
+                    default:
+                        break;
                 }
                 break;
             default: