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)
public Object invoke(final Object proxy, final Method method, final Object[] args) {
switch (method.getParameterCount()) {
case 0:
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);
- 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;