Switch on method names 83/77883/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 16 Nov 2018 06:51:27 +0000 (07:51 +0100)
committerRobert Varga <nite@hq.sk>
Wed, 21 Nov 2018 11:10:19 +0000 (11:10 +0000)
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 d984d9fd66690e636a4b40a03580a8ec32dcd210..7c7d74c9ed6cb2ea2a9d0bbbddaa4a9749dbd454 100644 (file)
@@ -64,22 +64,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_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_AUGMENTATION_NAME:
+                        return getAugmentationImpl((Class<?>) args[0]);
+                    case EQUALS:
+                        return bindingEquals(args[0]);
+                    default:
+                        break;
                 }
                 break;
             default: