diff --git a/core/api/src/main/java/org/onosproject/codec/CodecContext.java b/core/api/src/main/java/org/onosproject/codec/CodecContext.java
index 3189e10..1898e93 100644
--- a/core/api/src/main/java/org/onosproject/codec/CodecContext.java
+++ b/core/api/src/main/java/org/onosproject/codec/CodecContext.java
@@ -56,6 +56,7 @@
      *
      * @param json    JSON to decode
      * @param entityClass entity class
+     * @param <T> entity type
      * @return decoded entity
      */
     default <T> T decode(JsonNode json, Class<T> entityClass) {
@@ -69,6 +70,7 @@
      *
      * @param entity  entity to encode
      * @param entityClass entity class
+     * @param <T> entity type
      * @return JSON node
      */
     default <T> ObjectNode encode(T entity, Class<T> entityClass) {
diff --git a/core/api/src/main/java/org/onosproject/net/FilteredConnectPoint.java b/core/api/src/main/java/org/onosproject/net/FilteredConnectPoint.java
index 09d87fc..da210f4 100644
--- a/core/api/src/main/java/org/onosproject/net/FilteredConnectPoint.java
+++ b/core/api/src/main/java/org/onosproject/net/FilteredConnectPoint.java
@@ -32,7 +32,7 @@
     /**
      * Creates filtered connect point with default traffic selector.
      *
-     * @param connectPoint
+     * @param connectPoint connect point
      */
     public FilteredConnectPoint(ConnectPoint connectPoint) {
         this.connectPoint = connectPoint;
@@ -61,7 +61,8 @@
 
     /**
      * Returns the connection point.
-     * @return
+     *
+     * @return connect point
      */
     public ConnectPoint connectPoint() {
         return connectPoint;
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
index 1ccceea..f527a83 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
@@ -293,6 +293,7 @@
         /**
          * Pushes a new VLAN tag using the supplied Ethernet type.
          *
+         * @param ethType ethernet type
          * @return a treatment builder
          */
         Builder pushVlan(EthType ethType);
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
index e5bc0c4..3076008 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
@@ -32,6 +32,7 @@
     /**
      * Creates a new unresolved extension selector with given data in byte form.
      *
+     * @param arraybyte byte data for the extension selector
      * @param type unresolved extension data type
      */
     public UnresolvedExtensionSelector(byte[] arraybyte, ExtensionSelectorType type) {
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
index bf8c18b..df018f2 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
@@ -32,6 +32,7 @@
     /**
      * Creates a new unresolved extension treatment with given data in byte form.
      *
+     * @param arraybyte byte data for treatment
      * @param type unresolved extension data type
      */
     public UnresolvedExtensionTreatment(byte[] arraybyte, ExtensionTreatmentType type) {
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java b/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
index 54ef862..a1d4868 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
@@ -79,10 +79,11 @@
     long bytes();
 
     /**
-     * Returns whether the given GroupBucket has the same parameters (weight,
+     * Returns whether the given group bucket has the same parameters (weight,
      * watchPort and watchGroup) as this.
      *
-     * @param other GroupBucket to compare
+     * @param other group bucket to compare
+     * @return true if this bucket has the same parameters as other, false otherwise
      */
     boolean hasSameParameters(GroupBucket other);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
index 2cf4aa5..776cc60 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
@@ -187,6 +187,8 @@
 
     /**
      * Indicates failover within a failover group.
+     *
+     * @param failoverGroups groups to notify
      */
     void notifyOfFailovers(Collection<Group> failoverGroups);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java b/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java
index 4bf196d..8badb91 100644
--- a/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java
+++ b/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java
@@ -164,6 +164,8 @@
     /**
      * Compute the IP broadcast address.
      *
+     * @param ipAddress base IP address
+     * @param subnetAddress subnet specification
      * @return the IP broadcast address
      */
     public static IpAddress computeBroadcastAddress(IpAddress ipAddress, IpPrefix subnetAddress) {
diff --git a/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java b/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java
index 921c279..0bffaaa 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java
@@ -54,6 +54,7 @@
      * @param appId application id
      * @param flowRules flow rules to be set
      * @param resources network resource to be set
+     * @param type protection type
      */
     public FlowRuleIntent(ApplicationId appId, List<FlowRule> flowRules, Collection<NetworkResource> resources,
                           PathIntent.ProtectionType type) {
@@ -82,6 +83,7 @@
      * @param key       key
      * @param flowRules flow rules
      * @param resources network resources
+     * @param primary   primary protection type
      */
     public FlowRuleIntent(ApplicationId appId, Key key, Collection<FlowRule> flowRules,
                           Collection<NetworkResource> resources, PathIntent.ProtectionType primary) {
@@ -93,6 +95,9 @@
     /**
      * Creates a flow rule intent with all the same characteristics as the given
      * one except for the flow rule type.
+     *
+     * @param intent original flow rule intent
+     * @param type   new protection type
      */
     public FlowRuleIntent(FlowRuleIntent intent, PathIntent.ProtectionType type) {
         this(intent.appId(), intent.key(), intent.flowRules(),
diff --git a/core/api/src/main/java/org/onosproject/net/intent/WorkPartitionService.java b/core/api/src/main/java/org/onosproject/net/intent/WorkPartitionService.java
index 354bca4..3bcd94b 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/WorkPartitionService.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/WorkPartitionService.java
@@ -30,20 +30,23 @@
     extends ListenerService<WorkPartitionEvent, WorkPartitionEventListener> {
 
     /**
-     * Returns whether a given id maps to a partition owned by this
+     * Returns whether a given identifier maps to a partition owned by this
      * instance.
      *
-     * @param id id
-     * @param hasher function that maps id to a long value
-     * @return {@code true} if the id maps to a partition owned by this instance, otherwise {@code false}
+     * @param id identifier
+     * @param hasher function that maps identifier to a long value
+     * @param <K> entity type
+     * @return true if the identifier maps to a partition owned
+     *         by this instance, otherwise false
      */
     <K> boolean isMine(K id, Function<K, Long> hasher);
 
     /**
-     * Returns the owner for a given id.
+     * Returns the owner for a given identifier.
      *
-     * @param id id to query
+     * @param id identifier to query
      * @param hasher function that maps id to a long value
+     * @param <K> entity type
      * @return the leader node identifier
      */
     <K> NodeId getLeader(K id, Function<K, Long> hasher);
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/ProtectionConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/ProtectionConstraint.java
index a337040..e4dce01 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/ProtectionConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/ProtectionConstraint.java
@@ -61,7 +61,7 @@
     /**
      * Returns protection constraint.
      *
-     * @return
+     * @return protection constraint
      */
     public static ProtectionConstraint protection() {
         return PROTECTION_CONSTRAINT;
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java
index fd8bd74..525033c 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java
@@ -68,6 +68,7 @@
      * Creates a decode instruction codec object.
      *
      * @param json JSON object to decode
+     * @param context codec context
      */
     public DecodeInstructionCodecHelper(ObjectNode json, CodecContext context) {
         this.json = json;
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java
index 3b018c3..ee5f4e2 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java
@@ -336,6 +336,9 @@
 
     /**
      * Creates group key unique to each intent.
+     *
+     * @param intentId identifier of intent to get a key for
+     * @return unique group key for the intent identifier
      */
     public static GroupKey makeGroupKey(IntentId intentId) {
         ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
diff --git a/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java b/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java
index 7056f50..047a1f7 100644
--- a/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java
+++ b/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java
@@ -22,6 +22,8 @@
 public class PersistenceException extends RuntimeException {
     /**
      * Throws an exception with the specified message.
+     *
+     * @param s message for exception
      */
     public PersistenceException(String s) {
         super(s);
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatInfo.java b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatInfo.java
index 6d99c0c..dbecdb9 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatInfo.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatInfo.java
@@ -136,6 +136,8 @@
 
     /**
      * Sets the traffic statistic information.
+     *
+     * @param trafficStatistics traffic statistics
      */
     public void setTrafficStatistics(TrafficStatInfo trafficStatistics) {
         this.trafficStatistics = trafficStatistics;
@@ -143,6 +145,8 @@
 
     /**
      * Sets the detected protocols statistic information.
+     *
+     * @param detectedProtos detected protocols statistics
      */
     public void setDetectedProtos(List<ProtocolStatInfo> detectedProtos) {
         this.detectedProtos = detectedProtos;
@@ -150,6 +154,8 @@
 
     /**
      * Sets the known flows information.
+     *
+     * @param knownFlows known flows
      */
     public void setKnownFlows(List<FlowStatInfo> knownFlows) {
         this.knownFlows = knownFlows;
@@ -157,6 +163,8 @@
 
     /**
      * Sets the unknown flows information.
+     *
+     * @param unknownFlows unknown flows
      */
     public void setUnknownFlows(List<FlowStatInfo> unknownFlows) {
         this.unknownFlows = unknownFlows;
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatisticsManagerService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatisticsManagerService.java
index 792c293..90ea3fc 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatisticsManagerService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/DpiStatisticsManagerService.java
@@ -42,6 +42,7 @@
     /**
      * Gets the last N(Max = 100) DpiStatistics in the Store list.
      *
+     * @param lastN maximum number to fetch
      * @return the List of DpiStatistics object class
      */
     List<DpiStatistics> getDpiStatistics(int lastN);
@@ -77,6 +78,7 @@
     /**
      * Adds DpiStatistics at the end of the Store list.
      *
+     * @param ds statistics to add
      * @return the added DpiStatistics object class
      */
     DpiStatistics addDpiStatistics(DpiStatistics ds);
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/FlowStatInfo.java b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/FlowStatInfo.java
index 591df78..9dceab0 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/FlowStatInfo.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/FlowStatInfo.java
@@ -52,6 +52,16 @@
 
     /**
      * Constructor for FlowStatInfo class specified with flow statistic parameters.
+     *
+     * @param protocol protocol
+     * @param hostAName host A name
+     * @param hostAPort host A port
+     * @param hostBName host B name
+     * @param hostBPort host B port
+     * @param detectedProtocol detected protocol
+     * @param detectedProtocolName detected protocol name
+     * @param packets packet count
+     * @param bytes byte count
      */
     public FlowStatInfo(String protocol, String hostAName, int hostAPort, String hostBName, int hostBPort,
                         int detectedProtocol, String detectedProtocolName, long packets, long bytes) {
@@ -70,6 +80,17 @@
 
     /**
      * Constructor for FlowStatInfo class specified with flow statistic parameters and hostServerName.
+     *
+     * @param protocol protocol
+     * @param hostAName host A name
+     * @param hostAPort host A port
+     * @param hostBName host B name
+     * @param hostBPort host B port
+     * @param detectedProtocol detected protocol
+     * @param detectedProtocolName detected protocol name
+     * @param packets packet count
+     * @param bytes byte count
+     * @param hostServerName host server name
      */
     public FlowStatInfo(String protocol, String hostAName, int hostAPort, String hostBName, int hostBPort,
                         int detectedProtocol, String detectedProtocolName, long packets, long bytes,
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/TrafficStatInfo.java b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/TrafficStatInfo.java
index e7e4ece..757d3ed 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/TrafficStatInfo.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/dpi/TrafficStatInfo.java
@@ -66,6 +66,22 @@
 
     /**
      * Constructor for TrafficStatInfo class specified with traffic statistic parameters.
+     *
+     * @param ethernetBytes ethernet byte count
+     * @param discardedBytes discarded byte count
+     * @param ipPackets IP packet count
+     * @param totalPackets total packet count
+     * @param ipBytes total IP byte count
+     * @param avgPktSize average packet size
+     * @param uniqueFlows unique flows count
+     * @param tcpPackets TCP packet count
+     * @param udpPackets UDP packet count
+     * @param trafficThroughputPps traffic throughput PPS
+     * @param trafficThroughputBps traffic throughput BPS
+     * @param dpiThroughputPps DPI throughput PPS
+     * @param dpiThroughputBps DPI throughput BPS
+     * @param trafficDurationSec traffic duration in seconds
+     * @param guessedFlowProtos guess flow protocols
      */
     public TrafficStatInfo(long ethernetBytes, long discardedBytes, long ipPackets, long totalPackets,
                            long ipBytes, int avgPktSize, int uniqueFlows, long tcpPackets, long udpPackets,
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java b/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java
index 2c28bfd..cfbe202 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java
@@ -157,6 +157,7 @@
      *
      * @param eth input Ethernet frame
      * @param inPort in port
+     * @param actions actions to take
      * @return MessageContext if the packet was ARP or NDP, otherwise null
      */
     public static NeighbourMessageContext createContext(Ethernet eth,
@@ -176,6 +177,7 @@
      *
      * @param eth input Ethernet frame that is thought to be ARP
      * @param inPort in port
+     * @param actions actions to take
      * @return MessageContext object if the packet was a valid ARP packet,
      * otherwise null
      */
@@ -209,6 +211,7 @@
      *
      * @param eth input Ethernet frame that is thought to be NDP
      * @param inPort in port
+     * @param actions actions to take
      * @return MessageContext object if the packet was a valid NDP packet,
      * otherwise null
      */
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java
index a5ba5a3..8c4397a 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java
@@ -72,7 +72,7 @@
     /**
      * Drops the configuration for mirror.
      *
-     * @param mirroringName
+     * @param mirroringName name of mirror to drop
      */
     void dropMirror(MirroringName mirroringName);
 
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
index 5b10081..efaae8a 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
@@ -734,7 +734,7 @@
     /**
      * Drops the configuration for mirror.
      *
-     * @param mirroringName
+     * @param mirroringName name of mirror to drop
      */
     @Override
     public void dropMirror(MirroringName mirroringName) {
diff --git a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java
index 7b29a72..9f02b8b 100644
--- a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java
+++ b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java
@@ -130,7 +130,7 @@
     /**
      * Creates label stack for ERO object from network resource.
      *
-     * @param labelStack
+     * @param labelStack label stack
      * @param path (hop list)
      * @return list of ERO sub-objects
      */
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/BasicPceccHandler.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/BasicPceccHandler.java
index 192b909..90b8ea0 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/BasicPceccHandler.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/BasicPceccHandler.java
@@ -124,7 +124,9 @@
      * Initialization of label manager and pce store.
      *
      * @param labelRsrcService label resource service
+     * @param deviceService device service
      * @param pceStore pce label store
+     * @param clientController client controller
      */
     public void initialize(LabelResourceService labelRsrcService,
                            DeviceService deviceService,
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PceccSrTeBeHandler.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PceccSrTeBeHandler.java
index f6fe132..1b6e50b 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PceccSrTeBeHandler.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PceccSrTeBeHandler.java
@@ -108,6 +108,7 @@
      *
      * @param labelRsrcAdminService label resource admin service
      * @param labelRsrcService label resource service
+     * @param clientController client controller
      * @param pceStore PCE label store
      * @param deviceService device service
      */
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
index 3a1c74c..999dd40 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
@@ -791,7 +791,7 @@
     /**
      * Creates label stack for ERO object from network resource.
      *
-     * @param labelStack
+     * @param labelStack label stack
      * @param path (hop list)
      * @return list of ERO subobjects
      */
diff --git a/utils/misc/src/main/java/org/onlab/util/PredictableExecutor.java b/utils/misc/src/main/java/org/onlab/util/PredictableExecutor.java
index eb1502d..b88a67b 100644
--- a/utils/misc/src/main/java/org/onlab/util/PredictableExecutor.java
+++ b/utils/misc/src/main/java/org/onlab/util/PredictableExecutor.java
@@ -246,6 +246,7 @@
      *
      * @param callable {@link Callable}
      * @param hint hint value
+     * @param <T> entity type
      * @return {@link PickyCallable}
      */
     public static <T> PickyCallable<T> picky(Callable<T> callable, int hint) {
@@ -257,6 +258,7 @@
      *
      * @param callable {@link Callable}
      * @param hint hint function
+     * @param <T> entity type
      * @return {@link PickyCallable}
      */
     public static <T> PickyCallable<T> picky(Callable<T> callable, Function<Callable<T>, Integer> hint) {
@@ -307,6 +309,9 @@
 
         /**
          * Same as {@link FutureTask#FutureTask(Runnable, Object)}.
+         *
+         * @param runnable work to do
+         * @param value result
          */
         public PickyFutureTask(Runnable runnable, T value) {
             super(runnable, value);
@@ -315,6 +320,8 @@
 
         /**
          * Same as {@link FutureTask#FutureTask(Callable)}.
+         *
+         * @param callable work to be done
          */
         public PickyFutureTask(Callable<T> callable) {
             super(callable);
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java
index 6b01b13..d480a8f 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java
@@ -76,6 +76,7 @@
     /**
      * Gets the latest dpi statistics.
      *
+     * @param topn max size
      * @return 200 OK with a dpi statistics
      * @onos.rsModel DpiStatistics
      */
@@ -156,6 +157,7 @@
     /**
      * Gets the latest detected protocol statistics only.
      *
+     * @param topn max size
      * @return 200 OK with a protocol statistics
      * @onos.rsModel ProtocolStatistics
      */
@@ -196,6 +198,7 @@
     /**
      * Gets the latest known flows statistics only.
      *
+     * @param topn max size
      * @return 200 OK with a known flow statistics
      * @onos.rsModel KnownFlowStatistics
      */
@@ -236,6 +239,7 @@
     /**
      * Gets the latest unknown flows statistics only.
      *
+     * @param topn max size
      * @return 200 OK with an unknown flow statistics
      * @onos.rsModel UnknownFlowStatistics
      */
