Improve GroupingDefinitionDependencySort 79/95579/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 26 Mar 2021 14:07:22 +0000 (15:07 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 26 Mar 2021 14:08:36 +0000 (15:08 +0100)
The sort class does not actually have any state, hence we can convert it
to a utility class with a single public static method.

Change-Id: I7896e625bc47e54b3126c4d5f47c433a1ebebcb4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/GroupingDefinitionDependencySort.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal448Test.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/GroupingDefinitionDependencySortTest.java

index 4e79d33792769a6d189ba5593e6ee97faa7b7ccc..b37efac4127a0085ade665bebee74668f3400f18 100644 (file)
@@ -817,7 +817,7 @@ abstract class AbstractTypeGenerator {
      */
     private void groupingsToGenTypes(final ModuleContext context,
             final Collection<? extends GroupingDefinition> groupings) {
-        for (final GroupingDefinition grouping : new GroupingDefinitionDependencySort().sort(groupings)) {
+        for (final GroupingDefinition grouping : GroupingDefinitionDependencySort.sort(groupings)) {
             // Converts individual grouping to GeneratedType. Firstly generated type builder is created and every child
             // node of grouping is resolved to the method.
             final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(context, grouping);
index ec0db43275df8825ed0aeeed382d26cac7ea5f1f..0d98d1271f9dd8ebc5a415f68a3f6dbd1a29fbc3 100644 (file)
@@ -28,12 +28,15 @@ import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
 
-// FIXME: 8.0.0: this should be final
-public class GroupingDefinitionDependencySort {
+public final class GroupingDefinitionDependencySort {
+    private GroupingDefinitionDependencySort() {
+        // Hidden on purpose
+    }
+
     /**
-     * Sorts set {@code groupingDefinitions} according to the mutual dependencies.<br>
-     * Elements of {@code groupingDefinitions} are firstly transformed to {@link Node} interfaces and then are
-     * sorted by {@link TopologicalSort#sort(Set) sort()} method of {@code TopologicalSort}.<br>
+     * Sorts a set of {@code groupings} according to the mutual dependencies. Elements of {@code groupings} are first
+     * transformed to {@link Node} interfaces and then are sorted by {@link TopologicalSort#sort(Set) sort()} method of
+     * {@code TopologicalSort}.<br>
      *
      * <i>Definition of dependency relation:<br>
      * The first {@code GroupingDefinition} object (in this context) depends on second {@code GroupingDefinition} object
@@ -41,17 +44,17 @@ public class GroupingDefinitionDependencySort {
      * a reference to the second one.
      * </i>
      *
-     * @param groupingDefinitions set of grouping definition which should be sorted according to mutual dependencies
+     * @param groupings set of grouping definition which should be sorted according to mutual dependencies
      * @return list of grouping definitions which are sorted by mutual dependencies
      * @throws IllegalArgumentException if {@code groupingDefinitions}
      *
      */
-    public List<GroupingDefinition> sort(final Collection<? extends GroupingDefinition> groupingDefinitions) {
-        if (groupingDefinitions == null) {
+    public static List<GroupingDefinition> sort(final Collection<? extends GroupingDefinition> groupings) {
+        if (groupings == null) {
             throw new IllegalArgumentException("Set of Type Definitions cannot be NULL!");
         }
 
-        final List<Node> sortedNodes = TopologicalSort.sort(groupingDefinitionsToNodes(groupingDefinitions));
+        final List<Node> sortedNodes = TopologicalSort.sort(groupingDefinitionsToNodes(groupings));
         final List<GroupingDefinition> resultGroupingDefinitions = new ArrayList<>(sortedNodes.size());
         for (Node node : sortedNodes) {
             NodeWrappedType nodeWrappedType = (NodeWrappedType) node;
@@ -67,24 +70,24 @@ public class GroupingDefinitionDependencySort {
      * For every uses node is found its wrapping node (next as <i>nodeTo</i>). This dependency relationship between
      * nodeFrom and all found nodesTo is modeled with creating of one edge from nodeFrom to nodeTo.
      *
-     * @param groupingDefinitions set of grouping definition which will be wrapped to nodes
+     * @param groupings set of grouping definitions which will be wrapped to nodes
      * @return set of nodes where every one contains wrapped grouping definition
      */
-    private Set<Node> groupingDefinitionsToNodes(final Collection<? extends GroupingDefinition> groupingDefinitions) {
+    private static Set<Node> groupingDefinitionsToNodes(final Collection<? extends GroupingDefinition> groupings) {
         final Map<GroupingDefinition, Node> nodeMap = new HashMap<>();
         final Set<Node> resultNodes = new HashSet<>();
 
-        for (final GroupingDefinition groupingDefinition : groupingDefinitions) {
-            final Node node = new NodeWrappedType(groupingDefinition);
-            nodeMap.put(groupingDefinition, node);
+        for (final GroupingDefinition grouping : groupings) {
+            final Node node = new NodeWrappedType(grouping);
+            nodeMap.put(grouping, node);
             resultNodes.add(node);
         }
 
         for (final Node node : resultNodes) {
             final NodeWrappedType nodeWrappedType = (NodeWrappedType) node;
-            final GroupingDefinition groupingDefinition = (GroupingDefinition) nodeWrappedType.getWrappedType();
+            final GroupingDefinition grouping = (GroupingDefinition) nodeWrappedType.getWrappedType();
 
-            Set<UsesNode> usesNodes = getAllUsesNodes(groupingDefinition);
+            Set<UsesNode> usesNodes = getAllUsesNodes(grouping);
 
             for (UsesNode usesNode : usesNodes) {
                 Node nodeTo = nodeMap.get(usesNode.getSourceGrouping());
@@ -104,7 +107,7 @@ public class GroupingDefinitionDependencySort {
      * @param container data node container which can contain some uses of grouping
      * @return set of uses nodes which were find in <code>container</code>.
      */
-    private Set<UsesNode> getAllUsesNodes(final DataNodeContainer container) {
+    private static Set<UsesNode> getAllUsesNodes(final DataNodeContainer container) {
         Set<UsesNode> ret = new HashSet<>();
         Collection<? extends UsesNode> usesNodes = container.getUses();
         ret.addAll(usesNodes);
index ace16d11a90379f6cc80db3745f57f468ad770fa..056b350c87cd3c0b24c045559693ca1c6dc30c90 100644 (file)
@@ -46,6 +46,6 @@ public class Mdsal448Test {
     }
 
     private static List<GroupingDefinition> sortGroupings(final GroupingDefinition... groupings) {
-        return new GroupingDefinitionDependencySort().sort(Arrays.asList(groupings));
+        return GroupingDefinitionDependencySort.sort(Arrays.asList(groupings));
     }
 }
index 5f827849a9ea12afb63a844de3f74d73eb51f08c..b6b21933fcf88dcaeca29c0e22f32495a0fb5a6a 100644 (file)
@@ -22,9 +22,6 @@ import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class GroupingDefinitionDependencySortTest {
-    private final GroupingDefinitionDependencySort groupingDefinitionDependencySort =
-            new GroupingDefinitionDependencySort();
-
     @Test
     public void testSortMethod() {
 
@@ -83,14 +80,14 @@ public class GroupingDefinitionDependencySortTest {
         unsortedGroupingDefs.add(grp4);
         unsortedGroupingDefs.add(grp5);
 
-        List<GroupingDefinition> sortedGroupingDefs = groupingDefinitionDependencySort.sort(unsortedGroupingDefs);
+        List<GroupingDefinition> sortedGroupingDefs = GroupingDefinitionDependencySort.sort(unsortedGroupingDefs);
         assertNotNull(sortedGroupingDefs);
     }
 
     @Test
     public void testNullSort() {
         final IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
-            () -> groupingDefinitionDependencySort.sort(null));
+            () -> GroupingDefinitionDependencySort.sort(null));
         assertEquals("Set of Type Definitions cannot be NULL!", ex.getMessage());
     }
 }