Fixed resolution problems in Code Generator
[yangtools.git] / code-generator / binding-generator-impl / src / main / java / org / opendaylight / yangtools / sal / binding / generator / impl / BindingGeneratorImpl.xtend
index 5b3bbb28e25fb971575aeddee9e52f593a291d20..0e9e944eec79041e96180caa4af8f3bd23649118 100644 (file)
@@ -62,7 +62,7 @@ import static extension org.opendaylight.yangtools.binding.generator.util.Types.
 import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.*;
 import static org.opendaylight.yangtools.binding.generator.util.BindingTypes.*;
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.*;
-
+import org.opendaylight.yangtools.yang.parser.util.ModuleDependencySort\r
 \r
 public class BindingGeneratorImpl implements BindingGenerator {\r
 \r
@@ -134,27 +134,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
         schemaContext = context;\r
         typeProvider = new TypeProviderImpl(context);\r
         val Set<Module> modules = context.modules;\r
-        genTypeBuilders = new HashMap();\r
-        for (module : modules) {\r
-\r
-            generatedTypes.addAll(allGroupingsToGenTypes(module));\r
-\r
-            if (false == module.childNodes.isEmpty()) {\r
-                generatedTypes.add(moduleToDataType(module));\r
-            }\r
-            generatedTypes.addAll(allTypeDefinitionsToGenTypes(module));\r
-            generatedTypes.addAll(allContainersToGenTypes(module));\r
-            generatedTypes.addAll(allListsToGenTypes(module));\r
-            generatedTypes.addAll(allChoicesToGenTypes(module));\r
-            generatedTypes.addAll(allRPCMethodsToGenType(module));\r
-            generatedTypes.addAll(allNotificationsToGenType(module));\r
-            generatedTypes.addAll(allIdentitiesToGenTypes(module, context));\r
-        }\r
-        for (module : modules) {\r
-            generatedTypes.addAll(allAugmentsToGenTypes(module));\r
-            \r
-        }\r
-        return generatedTypes;\r
+        return generateTypes(context,modules);
     }\r
 \r
     /**\r
@@ -190,20 +170,20 @@ public class BindingGeneratorImpl implements BindingGenerator {
         checkState(context.modules !== null,"Schema Context does not contain defined modules.");\r
         checkArgument(modules !== null,"Set of Modules cannot be NULL.");\r
 \r
-        val List<Type> filteredGenTypes = new ArrayList();\r
+        val List<Type> filteredGenTypes = new ArrayList();
+        \r
         schemaContext = context;\r
         typeProvider = new TypeProviderImpl(context);\r
-        val Set<Module> contextModules = context.modules;\r
+        val contextModules = ModuleDependencySort.sort(context.modules);\r
         genTypeBuilders = new HashMap();\r
         \r
         for (contextModule : contextModules) {\r
             val List<Type> generatedTypes = new ArrayList();\r
-\r
+            generatedTypes.addAll(allTypeDefinitionsToGenTypes(contextModule));\r
             generatedTypes.addAll(allGroupingsToGenTypes(contextModule));\r
             if (false == contextModule.childNodes.isEmpty()) {\r
                 generatedTypes.add(moduleToDataType(contextModule));\r
             }\r
-            generatedTypes.addAll(allTypeDefinitionsToGenTypes(contextModule));\r
             generatedTypes.addAll(allContainersToGenTypes(contextModule));\r
             generatedTypes.addAll(allListsToGenTypes(contextModule));\r
             generatedTypes.addAll(allChoicesToGenTypes(contextModule));\r
@@ -246,7 +226,6 @@ public class BindingGeneratorImpl implements BindingGenerator {
         checkArgument(module.name !== null,"Module name cannot be NULL.");\r
         val Set<TypeDefinition<?>> typeDefinitions = module.typeDefinitions;\r
         checkState(typeDefinitions !== null,'''Type Definitions for module «module.name» cannot be NULL.''');\r
-\r
         \r
         val List<Type> generatedTypes = new ArrayList();\r
         for ( TypeDefinition<?> typedef : typeDefinitions) {\r
@@ -881,18 +860,18 @@ public class BindingGeneratorImpl implements BindingGenerator {
         // and DataObject interface!!!\r
         val targetPath = augSchema.targetPath;\r
         val targetSchemaNode = findDataSchemaNode(schemaContext, targetPath);\r
-        var targetType = yangToJavaMapping.get(targetSchemaNode.path);\r
-        if(targetType == null) {\r
-            // FIXME: augmentation should be added as last, all types should already be generated\r
-            // and have assigned Java Types,\r
-            val targetModule = findParentModule(schemaContext, targetSchemaNode);\r
-            val targetBasePackage = moduleNamespaceToPackageName(targetModule);\r
-            val typePackage = packageNameForGeneratedType(targetBasePackage, targetSchemaNode.getPath());\r
-            val targetSchemaNodeName = targetSchemaNode.getQName().getLocalName();\r
-            val typeName = parseToClassName(targetSchemaNodeName);\r
-            targetType = new ReferencedTypeImpl(typePackage,typeName);\r
-        }\r
         if (targetSchemaNode !== null) {\r
+            var targetType = yangToJavaMapping.get(targetSchemaNode.path);
+            if(targetType == null) {
+                // FIXME: augmentation should be added as last, all types should already be generated
+                // and have assigned Java Types,
+                val targetModule = findParentModule(schemaContext, targetSchemaNode);
+                val targetBasePackage = moduleNamespaceToPackageName(targetModule);
+                val typePackage = packageNameForGeneratedType(targetBasePackage, targetSchemaNode.getPath());
+                val targetSchemaNodeName = targetSchemaNode.getQName().getLocalName();
+                val typeName = parseToClassName(targetSchemaNodeName);
+                targetType = new ReferencedTypeImpl(typePackage,typeName);
+            }
             val augChildNodes = augSchema.childNodes;\r
             if (!(targetSchemaNode instanceof ChoiceNode)) {\r
                 val augTypeBuilder = addRawAugmentGenTypeDefinition(augmentPackageName,\r