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;
