BUG-614: Remove xtendisms 61/7561/2
authorRobert Varga <rovarga@cisco.com>
Sun, 1 Jun 2014 06:09:06 +0000 (08:09 +0200)
committerRobert Varga <rovarga@cisco.com>
Sun, 1 Jun 2014 17:38:35 +0000 (19:38 +0200)
Generated xtend code is quite verbose and sometimes the logic gets quite
obfuscated. This patch brings the code more in-line to what a programmer
might write.

Change-Id: I9a04012a2ba106082e9b1eef25bd9cb6958736cd
Signed-off-by: Robert Varga <rovarga@cisco.com>
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/GeneratedListenerRegistration.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/GenericNotificationRegistration.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/NotifyTask.java

index cc8471f..5325ed3 100644 (file)
@@ -12,26 +12,28 @@ import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.NotificationListener;
 
-public class GeneratedListenerRegistration extends AbstractObjectRegistration<NotificationListener> implements ListenerRegistration<NotificationListener> {
-    private final NotificationInvoker _invoker;
-
-    public NotificationInvoker getInvoker() {
-        return this._invoker;
-    }
+import com.google.common.base.Preconditions;
 
+class GeneratedListenerRegistration extends AbstractObjectRegistration<NotificationListener> implements ListenerRegistration<NotificationListener> {
     private NotificationBrokerImpl notificationBroker;
+    private final NotificationInvoker invoker;
 
     public GeneratedListenerRegistration(final NotificationListener instance, final NotificationInvoker invoker, final NotificationBrokerImpl broker) {
         super(instance);
-        this._invoker = invoker;
-        this.notificationBroker = broker;
+        this.invoker = Preconditions.checkNotNull(invoker);
+        this.notificationBroker = Preconditions.checkNotNull(broker);
+    }
+
+    public NotificationInvoker getInvoker() {
+        // There is a race with NotificationBrokerImpl:
+        // the invoker can be closed here
+        return invoker;
     }
 
     @Override
     protected void removeRegistration() {
-        this.notificationBroker.unregisterListener(this);
-        this.notificationBroker = null;
-        NotificationInvoker _invoker = this.getInvoker();
-        _invoker.close();
+        notificationBroker.unregisterListener(this);
+        notificationBroker = null;
+        invoker.close();
     }
 }
index 9567831..448adfa 100644 (file)
@@ -12,24 +12,25 @@ import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.Notification;
 
-public class GenericNotificationRegistration<T extends Notification> extends AbstractObjectRegistration<NotificationListener<T>> implements ListenerRegistration<NotificationListener<T>> {
-    private final Class<T> _type;
-
-    public Class<T> getType() {
-        return this._type;
-    }
+import com.google.common.base.Preconditions;
 
+class GenericNotificationRegistration<T extends Notification> extends AbstractObjectRegistration<NotificationListener<T>> implements ListenerRegistration<NotificationListener<T>> {
+    private final Class<T> type;
     private NotificationBrokerImpl notificationBroker;
 
     public GenericNotificationRegistration(final Class<T> type, final NotificationListener<T> instance, final NotificationBrokerImpl broker) {
         super(instance);
-        this._type = type;
-        this.notificationBroker = broker;
+        this.type = Preconditions.checkNotNull(type);
+        this.notificationBroker = Preconditions.checkNotNull(broker);
+    }
+
+    public Class<T> getType() {
+        return type;
     }
 
     @Override
     protected void removeRegistration() {
-        this.notificationBroker.unregisterListener(this);
-        this.notificationBroker = null;
+        notificationBroker.unregisterListener(this);
+        notificationBroker = null;
     }
 }
index 9efd48e..5c7d924 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.controller.sal.binding.impl;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
@@ -27,7 +26,6 @@ import org.opendaylight.yangtools.yang.binding.Notification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableSet;
@@ -35,7 +33,6 @@ import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
 
 public class NotificationBrokerImpl implements NotificationProviderService, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(NotificationBrokerImpl.class);
@@ -43,20 +40,12 @@ public class NotificationBrokerImpl implements NotificationProviderService, Auto
     private final ListenerRegistry<NotificationInterestListener> interestListeners =
             ListenerRegistry.create();
 
-    private final Multimap<Class<? extends Notification>,NotificationListener<? extends Object>> listeners;
+    private final Multimap<Class<? extends Notification>, NotificationListener<?>> listeners =
+            Multimaps.synchronizedSetMultimap(HashMultimap.<Class<? extends Notification>, NotificationListener<?>>create());
     private ExecutorService executor;
 
-    public NotificationBrokerImpl() {
-        HashMultimap<Class<? extends Notification>,NotificationListener<? extends Object>> _create = HashMultimap.<Class<? extends Notification>, NotificationListener<? extends Object>>create();
-        SetMultimap<Class<? extends Notification>,NotificationListener<? extends Object>> _synchronizedSetMultimap = Multimaps.<Class<? extends Notification>, NotificationListener<? extends Object>>synchronizedSetMultimap(_create);
-        this.listeners = _synchronizedSetMultimap;
-    }
-
     @Deprecated
     public NotificationBrokerImpl(final ExecutorService executor) {
-        HashMultimap<Class<? extends Notification>,NotificationListener<? extends Object>> _create = HashMultimap.<Class<? extends Notification>, NotificationListener<? extends Object>>create();
-        SetMultimap<Class<? extends Notification>,NotificationListener<? extends Object>> _synchronizedSetMultimap = Multimaps.<Class<? extends Notification>, NotificationListener<? extends Object>>synchronizedSetMultimap(_create);
-        this.listeners = _synchronizedSetMultimap;
         this.setExecutor(executor);
     }
 
@@ -64,25 +53,18 @@ public class NotificationBrokerImpl implements NotificationProviderService, Auto
         this.executor = Preconditions.checkNotNull(executor);
     }
 
-    public Iterable<Class<? extends Object>> getNotificationTypes(final Notification notification) {
-        Class<? extends Notification> _class = notification.getClass();
-        Class<? extends Object>[] _interfaces = _class.getInterfaces();
-        final Function1<Class<? extends Object>,Boolean> _function = new Function1<Class<? extends Object>,Boolean>() {
+    public Iterable<Class<?>> getNotificationTypes(final Notification notification) {
+        Class<?>[] _interfaces = notification.getClass().getInterfaces();
+        final Function1<Class<?>, Boolean> _function = new Function1<Class<?>, Boolean>() {
             @Override
-            public Boolean apply(final Class<? extends Object> it) {
-                boolean _and = false;
-                boolean _notEquals = (!Objects.equal(it, Notification.class));
-                if (!_notEquals) {
-                    _and = false;
-                } else {
-                    boolean _isAssignableFrom = Notification.class.isAssignableFrom(it);
-                    _and = (_notEquals && _isAssignableFrom);
+            public Boolean apply(final Class<?> it) {
+                if (Notification.class.equals(it)) {
+                    return false;
                 }
-                return Boolean.valueOf(_and);
+                return Notification.class.isAssignableFrom(it);
             }
         };
-        Iterable<Class<? extends Object>> _filter = IterableExtensions.<Class<? extends Object>>filter(((Iterable<Class<? extends Object>>)Conversions.doWrapArray(_interfaces)), _function);
-        return _filter;
+        return IterableExtensions.filter(((Iterable<Class<?>>)Conversions.doWrapArray(_interfaces)), _function);
     }
 
     @Override
@@ -92,38 +74,32 @@ public class NotificationBrokerImpl implements NotificationProviderService, Auto
 
     @Override
     public void publish(final Notification notification, final ExecutorService service) {
-        final Iterable<Class<? extends Object>> allTypes = this.getNotificationTypes(notification);
-        Iterable<NotificationListener<? extends Object>> listenerToNotify = Collections.<NotificationListener<? extends Object>>emptySet();
-        for (final Class<? extends Object> type : allTypes) {
-            Collection<NotificationListener<? extends Object>> _get = this.listeners.get(((Class<? extends Notification>) type));
-            Iterable<NotificationListener<? extends Object>> _plus = Iterables.<NotificationListener<? extends Object>>concat(listenerToNotify, _get);
-            listenerToNotify = _plus;
+        Iterable<NotificationListener<?>> listenerToNotify = Collections.emptySet();
+        for (final Class<?> type : getNotificationTypes(notification)) {
+            listenerToNotify = Iterables.concat(listenerToNotify, listeners.get(((Class<? extends Notification>) type)));
         }
-        final Function1<NotificationListener<? extends Object>,NotifyTask> _function = new Function1<NotificationListener<? extends Object>,NotifyTask>() {
+        final Function1<NotificationListener<?>,NotifyTask> _function = new Function1<NotificationListener<?>, NotifyTask>() {
             @Override
-            public NotifyTask apply(final NotificationListener<? extends Object> it) {
-                NotifyTask _notifyTask = new NotifyTask(it, notification);
-                return _notifyTask;
+            public NotifyTask apply(final NotificationListener<?> it) {
+                return new NotifyTask(it, notification);
             }
         };
-        Iterable<NotifyTask> _map = IterableExtensions.<NotificationListener<? extends Object>, NotifyTask>map(listenerToNotify, _function);
-        final Set<NotifyTask> tasks = IterableExtensions.<NotifyTask>toSet(_map);
+        final Set<NotifyTask> tasks = IterableExtensions.<NotifyTask>toSet(
+                IterableExtensions.<NotificationListener<?>, NotifyTask>map(listenerToNotify, _function));
         this.submitAll(executor, tasks);
     }
 
-    public ImmutableSet<Future<Object>> submitAll(final ExecutorService service, final Set<NotifyTask> tasks) {
+    private ImmutableSet<Future<Object>> submitAll(final ExecutorService service, final Set<NotifyTask> tasks) {
         final Builder<Future<Object>> ret = ImmutableSet.<Future<Object>>builder();
         for (final NotifyTask task : tasks) {
-            Future<Object> _submit = service.<Object>submit(task);
-            ret.add(_submit);
+            ret.add(service.submit(task));
         }
         return ret.build();
     }
 
     @Override
     public <T extends Notification> Registration<NotificationListener<T>> registerNotificationListener(final Class<T> notificationType, final NotificationListener<T> listener) {
-        GenericNotificationRegistration<T> _genericNotificationRegistration = new GenericNotificationRegistration<T>(notificationType, listener, this);
-        final GenericNotificationRegistration<T> reg = _genericNotificationRegistration;
+        final GenericNotificationRegistration<T> reg = new GenericNotificationRegistration<T>(notificationType, listener, this);
         this.listeners.put(notificationType, listener);
         this.announceNotificationSubscription(notificationType);
         return reg;
@@ -143,33 +119,22 @@ public class NotificationBrokerImpl implements NotificationProviderService, Auto
     @Override
     public Registration<org.opendaylight.yangtools.yang.binding.NotificationListener> registerNotificationListener(final org.opendaylight.yangtools.yang.binding.NotificationListener listener) {
         final NotificationInvoker invoker = SingletonHolder.INVOKER_FACTORY.invokerFor(listener);
-        Set<Class<? extends Notification>> _supportedNotifications = invoker.getSupportedNotifications();
-        for (final Class<? extends Notification> notifyType : _supportedNotifications) {
-            {
-                NotificationListener<Notification> _invocationProxy = invoker.getInvocationProxy();
-                this.listeners.put(notifyType, _invocationProxy);
-                this.announceNotificationSubscription(notifyType);
-            }
+        for (final Class<? extends Notification> notifyType : invoker.getSupportedNotifications()) {
+            listeners.put(notifyType, invoker.getInvocationProxy());
+            announceNotificationSubscription(notifyType);
         }
-        GeneratedListenerRegistration _generatedListenerRegistration = new GeneratedListenerRegistration(listener, invoker, this);
-        final GeneratedListenerRegistration registration = _generatedListenerRegistration;
-        return (registration);
+
+        return new GeneratedListenerRegistration(listener, invoker, this);
     }
 
-    protected boolean unregisterListener(final GenericNotificationRegistration<? extends Object> reg) {
-        Class<? extends Notification> _type = reg.getType();
-        NotificationListener<? extends Notification> _instance = reg.getInstance();
-        boolean _remove = this.listeners.remove(_type, _instance);
-        return _remove;
+    protected boolean unregisterListener(final GenericNotificationRegistration<?> reg) {
+        return listeners.remove(reg.getType(), reg.getInstance());
     }
 
     protected void unregisterListener(final GeneratedListenerRegistration reg) {
-        NotificationInvoker _invoker = reg.getInvoker();
-        Set<Class<? extends Notification>> _supportedNotifications = _invoker.getSupportedNotifications();
-        for (final Class<? extends Notification> notifyType : _supportedNotifications) {
-            NotificationInvoker _invoker_1 = reg.getInvoker();
-            NotificationListener<Notification> _invocationProxy = _invoker_1.getInvocationProxy();
-            this.listeners.remove(notifyType, _invocationProxy);
+        final NotificationInvoker invoker = reg.getInvoker();
+        for (final Class<? extends Notification> notifyType : invoker.getSupportedNotifications()) {
+            this.listeners.remove(notifyType, invoker.getInvocationProxy());
         }
     }
 
@@ -180,8 +145,7 @@ public class NotificationBrokerImpl implements NotificationProviderService, Auto
     @Override
     public ListenerRegistration<NotificationInterestListener> registerInterestListener(final NotificationInterestListener interestListener) {
         final ListenerRegistration<NotificationInterestListener> registration = this.interestListeners.register(interestListener);
-        Set<Class<? extends Notification>> _keySet = this.listeners.keySet();
-        for (final Class<? extends Notification> notification : _keySet) {
+        for (final Class<? extends Notification> notification : listeners.keySet()) {
             interestListener.onNotificationSubscribtion(notification);
         }
         return registration;
index 9471616..b0dd2a9 100644 (file)
@@ -9,90 +9,59 @@ package org.opendaylight.controller.sal.binding.impl;
 
 import java.util.concurrent.Callable;
 
-import org.eclipse.xtext.xbase.lib.Exceptions;
-import org.eclipse.xtext.xbase.lib.Functions.Function0;
-import org.eclipse.xtext.xbase.lib.util.ToStringHelper;
 import org.opendaylight.controller.sal.binding.api.NotificationListener;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NotifyTask implements Callable<Object> {
-    private static Logger log = new Function0<Logger>() {
-        @Override
-        public Logger apply() {
-            Logger _logger = LoggerFactory.getLogger(NotifyTask.class);
-            return _logger;
-        }
-    }.apply();
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
 
-    @SuppressWarnings("rawtypes")
-    private final NotificationListener _listener;
+class NotifyTask implements Callable<Object> {
+    private static final Logger LOG = LoggerFactory.getLogger(NotifyTask.class);
 
-    public NotificationListener getListener() {
-        return this._listener;
-    }
+    private final NotificationListener<?> listener;
+    private final Notification notification;
 
-    private final Notification _notification;
+    public NotifyTask(final NotificationListener<?> listener, final Notification notification) {
+        this.listener = Preconditions.checkNotNull(listener);
+        this.notification = Preconditions.checkNotNull(notification);
+    }
 
-    public Notification getNotification() {
-        return this._notification;
+    @SuppressWarnings("unchecked")
+    private <T extends Notification> NotificationListener<T> getListener() {
+        return (NotificationListener<T>)listener;
     }
 
     @Override
     public Object call() {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Delivering notification {} to {}", notification, listener);
+        } else {
+            LOG.trace("Delivering notification {} to {}", notification.getClass().getName(), listener);
+        }
+
         try {
-            boolean _isDebugEnabled = NotifyTask.log.isDebugEnabled();
-            if (_isDebugEnabled) {
-                Notification _notification = this.getNotification();
-                NotificationListener _listener = this.getListener();
-                NotifyTask.log.debug("Delivering notification {} to {}", _notification, _listener);
-            } else {
-                Notification _notification_1 = this.getNotification();
-                Class<? extends Notification> _class = _notification_1.getClass();
-                String _name = _class.getName();
-                NotificationListener _listener_1 = this.getListener();
-                NotifyTask.log.trace("Delivering notification {} to {}", _name, _listener_1);
-            }
-            NotificationListener _listener_2 = this.getListener();
-            Notification _notification_2 = this.getNotification();
-            _listener_2.onNotification(_notification_2);
-            boolean _isDebugEnabled_1 = NotifyTask.log.isDebugEnabled();
-            if (_isDebugEnabled_1) {
-                Notification _notification_3 = this.getNotification();
-                NotificationListener _listener_3 = this.getListener();
-                NotifyTask.log.debug("Notification delivered {} to {}", _notification_3, _listener_3);
-            } else {
-                Notification _notification_4 = this.getNotification();
-                Class<? extends Notification> _class_1 = _notification_4.getClass();
-                String _name_1 = _class_1.getName();
-                NotificationListener _listener_4 = this.getListener();
-                NotifyTask.log.trace("Notification delivered {} to {}", _name_1, _listener_4);
-            }
-        } catch (final Throwable _t) {
-            if (_t instanceof Exception) {
-                final Exception e = (Exception)_t;
-                NotificationListener _listener_5 = this.getListener();
-                NotifyTask.log.error("Unhandled exception thrown by listener: {}", _listener_5, e);
-            } else {
-                throw Exceptions.sneakyThrow(_t);
-            }
+            getListener().onNotification(notification);
+        } catch (final Exception e) {
+            LOG.error("Unhandled exception thrown by listener: {}", listener, e);
+        }
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Notification delivered {} to {}", notification, listener);
+        } else {
+            LOG.trace("Notification delivered {} to {}", notification.getClass().getName(), listener);
         }
-        return null;
-    }
 
-    public NotifyTask(final NotificationListener listener, final Notification notification) {
-        super();
-        this._listener = listener;
-        this._notification = notification;
+        return null;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ((_listener== null) ? 0 : _listener.hashCode());
-        result = prime * result + ((_notification== null) ? 0 : _notification.hashCode());
+        result = prime * result + ((listener== null) ? 0 : listener.hashCode());
+        result = prime * result + ((notification== null) ? 0 : notification.hashCode());
         return result;
     }
 
@@ -105,22 +74,24 @@ public class NotifyTask implements Callable<Object> {
         if (getClass() != obj.getClass())
             return false;
         NotifyTask other = (NotifyTask) obj;
-        if (_listener == null) {
-            if (other._listener != null)
+        if (listener == null) {
+            if (other.listener != null)
                 return false;
-        } else if (!_listener.equals(other._listener))
+        } else if (!listener.equals(other.listener))
             return false;
-        if (_notification == null) {
-            if (other._notification != null)
+        if (notification == null) {
+            if (other.notification != null)
                 return false;
-        } else if (!_notification.equals(other._notification))
+        } else if (!notification.equals(other.notification))
             return false;
         return true;
     }
 
     @Override
     public String toString() {
-        String result = new ToStringHelper().toString(this);
-        return result;
+        return Objects.toStringHelper(this)
+                .add("listener", listener)
+                .add("notification", notification.getClass())
+                .toString();
     }
 }

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.