Fix findbugs violations in extensions 88/68388/3
authorTom Pantelis <tompantelis@gmail.com>
Sun, 18 Feb 2018 18:37:10 +0000 (13:37 -0500)
committerTom Pantelis <tompantelis@gmail.com>
Wed, 28 Feb 2018 18:45:18 +0000 (13:45 -0500)
- Dead store to local variable
- Unchecked/unconfirmed cast
- Field not initialized in constructor but dereferenced without null check
- Method ignores return value
- Private method is never called

Change-Id: I7a3fe1700439b456cb7dce6d84f63a9840fd68a7
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/PopNshCodec.java
extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/PushNshCodec.java
extension/openflowplugin-extension-api/src/main/java/org/opendaylight/openflowplugin/extension/api/GroupingLooseResolver.java
extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/action/PopNshConvertor.java
extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/action/PushNshConvertor.java
extension/openflowplugin-extension-onf/src/main/java/org/opendaylight/openflowplugin/extension/onf/deserializer/BundleControlFactory.java
extension/test-extension/pom.xml
extension/test-extension/src/main/java/org/opendaylight/openflowplugin/extension/test/Test.java

index 799d3372125e150b4ca6e6812590253175148025..a016a5cf7c599de870c4821a0c5752437bfb33c8 100644 (file)
@@ -32,7 +32,6 @@ public class PopNshCodec extends AbstractActionCodec {
 
     @Override
     public void serialize(Action input, ByteBuf outBuffer) {
-        ActionPopNsh action = (ActionPopNsh) input.getActionChoice();
         serializeHeader(LENGTH, NXAST_POP_NSH_SUBTYPE, outBuffer);
         outBuffer.writeZero(PADDING);
     }
index 69c9fbfd622829394088262d30f7c780dba3319a..39bf391dbcd81ed6cbfe2b285796e9b71abccf16 100644 (file)
@@ -32,7 +32,6 @@ public class PushNshCodec extends AbstractActionCodec {
 
     @Override
     public void serialize(Action input, ByteBuf outBuffer) {
-        ActionPushNsh action = (ActionPushNsh) input.getActionChoice();
         serializeHeader(LENGTH, NXAST_PUSH_NSH_SUBTYPE, outBuffer);
         outBuffer.writeZero(PADDING);
     }
index afa239257d1809d91bf17bb59e9c95bb5fcbb040..627fd5f613143461782cdc9625bb43ee72ac6e54 100644 (file)
@@ -14,6 +14,8 @@ import java.util.Set;
 import org.opendaylight.yangtools.yang.binding.Augmentable;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Provides augmentation resolving upon given {@link Augmentable}.
@@ -26,6 +28,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
  * @param <G> grouping
  */
 public class GroupingLooseResolver<G> {
+    private static final Logger LOG = LoggerFactory.getLogger(GroupingLooseResolver.class);
 
     private final Class<G> commonInterface;
     private final Set<Class<? extends Augmentation<?>>> classes;
@@ -70,7 +73,17 @@ public class GroupingLooseResolver<G> {
      */
     @SuppressWarnings("unchecked")
     public <T extends Augmentable<T>> Optional<G> getExtension(DataObject data) {
-        T guessData = (T) data;
+        // The type of 'data' should really be T for compile-time checking. Several call sites do not pass an
+        // Augmentable DataObject type which would result in a ClassCastException at runtime. This is clearly
+        // broken - those call sites need to be analyzed to determine the correct behavior in order for this method
+        // signature to be changed but for now catch ClassCastException.
+        T guessData;
+        try {
+            guessData = (T) data;
+        } catch (ClassCastException e) {
+            LOG.warn("Cannot cast to Augmentable", e);
+            return Optional.empty();
+        }
 
         for (Class<? extends Augmentation<?>> cls : classes) {
             Augmentation<T> potential = guessData
index e3eddf291f2172da114c333ed6a8b8cfa8fda862..38faa3d12d50ca1a85cec831acfe0c979401d065 100644 (file)
@@ -14,9 +14,7 @@ import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
 import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPopNsh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPopNshBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.pop.nsh.grouping.NxActionPopNsh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.pop.nsh.grouping.NxActionPopNshBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.NxActionPopNshGrouping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionPopNshNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
@@ -60,7 +58,6 @@ public class PopNshConvertor implements
     @Override
     public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(
             Action input, ActionPath path) {
-        NxActionPopNsh action = ((ActionPopNsh) input.getActionChoice()).getNxActionPopNsh();
         NxPopNshBuilder builder = new NxPopNshBuilder();
         return resolveAction(builder.build(), path);
     }
@@ -69,7 +66,6 @@ public class PopNshConvertor implements
     public Action convert(
             org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) {
         Preconditions.checkArgument(nxActionArg instanceof NxActionPopNshGrouping);
-        NxActionPopNshGrouping nxAction = (NxActionPopNshGrouping) nxActionArg;
         ActionPopNshBuilder builder = new ActionPopNshBuilder();
         NxActionPopNshBuilder nxActionPopNshBuilder = new NxActionPopNshBuilder();
         builder.setNxActionPopNsh(nxActionPopNshBuilder.build());
index 63dc6f230b764bfa8fcf47336dcee6ecfe499d25..3df940ee6bc3d66f9254096c462927c8879006d7 100644 (file)
@@ -14,9 +14,7 @@ import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
 import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPushNsh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPushNshBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.push.nsh.grouping.NxActionPushNsh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.push.nsh.grouping.NxActionPushNshBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.NxActionPushNshGrouping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionPushNshNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
@@ -62,7 +60,6 @@ public class PushNshConvertor implements
     @Override
     public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(
             Action input, ActionPath path) {
-        NxActionPushNsh action = ((ActionPushNsh) input.getActionChoice()).getNxActionPushNsh();
         NxPushNshBuilder builder = new NxPushNshBuilder();
         return resolveAction(builder.build(), path);
     }
@@ -71,7 +68,6 @@ public class PushNshConvertor implements
     public Action convert(
             org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) {
         Preconditions.checkArgument(nxActionArg instanceof NxActionPushNshGrouping);
-        NxActionPushNshGrouping nxAction = (NxActionPushNshGrouping) nxActionArg;
         ActionPushNshBuilder builder = new ActionPushNshBuilder();
         NxActionPushNshBuilder nxActionPushNshBuilder = new NxActionPushNshBuilder();
         builder.setNxActionPushNsh(nxActionPushNshBuilder.build());
index 8521be64a2935821c26a1bb25b0c522147b428c5..ddcf313bc4d3ef6a744e929b488d4c0cc292c914 100644 (file)
@@ -8,9 +8,11 @@
 
 package org.opendaylight.openflowplugin.extension.onf.deserializer;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -70,7 +72,10 @@ public class BundleControlFactory implements OFDeserializer<BundleControlOnf>, D
         return properties;
     }
 
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     private BundleProperty createExperimenterBundleProperty(final int length, final ByteBuf message) {
+        Objects.requireNonNull(deserializerRegistry);
+
         BundlePropertyExperimenterBuilder experimenterProperty = new BundlePropertyExperimenterBuilder();
         long experimenterId = message.readUnsignedInt();
         long expType = message.readUnsignedInt();
index 85f9e9bbbd5f1e678bf92c50e62cff688c641412..a653847c141854e8aeec3dc1aa0495719f415d03 100644 (file)
             <groupId>org.opendaylight.controller.model</groupId>
             <artifactId>model-inventory</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.infrautils</groupId>
+            <artifactId>infrautils-util</artifactId>
+            <version>${infrautils.version}</version>
+        </dependency>
 
         <!-- OpenFlowJava-API models -->
         <dependency>
index 645a804beef73f7b6582695bde3fbb843f088553..14b06f08a305e4265bc18204503b0e3ea5cbcc63 100644 (file)
@@ -12,7 +12,7 @@ import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Future;
-import org.opendaylight.openflowplugin.extension.api.AugmentTuple;
+import org.opendaylight.infrautils.utils.concurrent.JdkFutures;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;
@@ -26,7 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalF
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
@@ -53,6 +52,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of TestService.
@@ -60,6 +61,7 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
  * @author msunal
  */
 public class Test implements TestService {
+    private static final Logger LOG = LoggerFactory.getLogger(Test.class);
 
     private SalFlowService flowService;
 
@@ -97,7 +99,9 @@ public class Test implements TestService {
     }
 
     private void pushFlowViaRpc(AddFlowInput addFlowInput) {
-        flowService.addFlow(addFlowInput);
+        if (flowService != null) {
+            JdkFutures.addErrorLogging(flowService.addFlow(addFlowInput), LOG, "addFlow");
+        }
     }
 
     public void setFlowService(SalFlowService flowService) {
@@ -124,11 +128,6 @@ public class Test implements TestService {
         return match;
     }
 
-    private static AugmentTuple<Match> createNxMatchAugment() {
-        // TODO add example
-        return null;
-    }
-
     private static InstructionsBuilder createDecNwTtlInstructionsBld() {
         // Add our drop action to a list
         List<Action> actionList = new ArrayList<>();