Fix space stripping
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / YangModuleInfoTemplate.xtend
index 714445ca560a60627b73ff898183acf040a10b9e..20dccf49311e4e0b0ff39675dc31ebffd541ffaf 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Set
 import java.util.TreeMap
 import java.util.function.Function
 import org.eclipse.xtend.lib.annotations.Accessors
+import org.gaul.modernizer_maven_annotations.SuppressModernizer
 import org.opendaylight.mdsal.binding.model.api.ParameterizedType
 import org.opendaylight.mdsal.binding.model.api.Type
 import org.opendaylight.mdsal.binding.model.api.WildcardType
@@ -42,6 +43,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext
  * this class provides a static {@code createQName(String)} method, which is used by co-generated code to initialize
  * QNAME constants.
  */
+@SuppressModernizer
 class YangModuleInfoTemplate {
     static val Comparator<Optional<Revision>> REVISION_COMPARATOR =
         [ Optional<Revision> first, Optional<Revision> second | Revision.compare(first, second) ]
@@ -67,6 +69,9 @@ class YangModuleInfoTemplate {
     }
 
     def String generate() {
+        val Set<Module> submodules = new HashSet
+        collectSubmodules(submodules, module)
+
         val body = '''
             public final class «MODULE_INFO_CLASS_NAME» extends «ResourceYangModuleInfo.importedName» {
                 «val rev = module.revision»
@@ -83,7 +88,7 @@ class YangModuleInfoTemplate {
                     return «QName.importedName».create(NAME, localName).intern();
                 }
 
-                «classBody(module, MODULE_INFO_CLASS_NAME)»
+                «classBody(module, MODULE_INFO_CLASS_NAME, submodules
             }
         '''
         return '''
@@ -109,9 +114,17 @@ class YangModuleInfoTemplate {
 
     }
 
-    private def CharSequence classBody(Module m, String className) '''
+    private static def void collectSubmodules(Set<Module> dest, Module module) {
+        for (Module submodule : module.submodules) {
+            if (dest.add(submodule)) {
+                collectSubmodules(dest, submodule)
+            }
+        }
+    }
+
+    private def CharSequence classBody(Module m, String className, Set<Module> submodules) '''
         private «className»() {
-            «IF !m.imports.empty || !m.submodules.empty»
+            «IF !m.imports.empty || !submodules.empty»
                 «Set.importedName»<«YangModuleInfo.importedName»> set = new «HashSet.importedName»<>();
             «ENDIF»
             «IF !m.imports.empty»
@@ -132,12 +145,10 @@ class YangModuleInfoTemplate {
                     «ENDIF»
                 «ENDFOR»
             «ENDIF»
-            «IF !m.submodules.empty»
-                «FOR submodule : m.submodules»
-                    set.add(«submodule.name.className»Info.getInstance());
-                «ENDFOR»
-            «ENDIF»
-            «IF m.imports.empty && m.submodules.empty»
+            «FOR submodule : submodules»
+                set.add(«submodule.name.className»Info.getInstance());
+            «ENDFOR»
+            «IF m.imports.empty && submodules.empty»
                 importedModules = «Collections.importedName».emptySet();
             «ELSE»
                 importedModules = «ImmutableSet.importedName».copyOf(set);
@@ -158,9 +169,7 @@ class YangModuleInfoTemplate {
         public «Set.importedName»<«YangModuleInfo.importedName»> getImportedModules() {
             return importedModules;
         }
-
-        «generateSubInfo(m)»
-
+        «generateSubInfo(submodules)»
     '''
 
     private def sourcePath(Module module) {
@@ -269,9 +278,10 @@ class YangModuleInfoTemplate {
         return builder.toString()
     }
 
-    private def generateSubInfo(Module module) '''
-        «FOR submodule : module.submodules»
+    private def generateSubInfo(Set<Module> submodules) '''
+        «FOR submodule : submodules»
             «val className = submodule.name.className»
+
             private static final class «className»Info extends «ResourceYangModuleInfo.importedName» {
                 «val rev = submodule.revision»
                 private final «QName.importedName» NAME = «QName.importedName».create("«
@@ -284,7 +294,7 @@ class YangModuleInfoTemplate {
                     return INSTANCE;
                 }
 
-                «classBody(submodule, className + "Info")»
+                «classBody(submodule, className + "Info", Collections.emptySet
             }
         «ENDFOR»
     '''