Binding generator v2 - augment statement #4
[mdsal.git] / binding2 / mdsal-binding2-generator-impl / src / main / java / org / opendaylight / mdsal / binding / javav2 / generator / impl / AugmentToGenType.java
index 740cd5ddebe00155487add9decd80f25cf4f45f1..641b71232c5cac92d30cff32516452df569cddd1 100644 (file)
@@ -121,7 +121,7 @@ final class AugmentToGenType {
         Preconditions.checkState(module.getAugmentations() != null, "Augmentations Set cannot be NULL.");
 
         final String basePackageName = BindingMapping.getRootPackageName(module);
-        final List<AugmentationSchema> augmentations = resolveAugmentations(module);
+        final List<AugmentationSchema> augmentations = resolveAugmentations(module, schemaContext);
         Map<Module, ModuleContext> resultCtx = genCtx;
 
         //let's group augments by target path
@@ -138,8 +138,7 @@ final class AugmentToGenType {
                     verboseClassComments, resultCtx, genTypeBuilders, typeProvider);
 
             for (AugmentationSchema augSchema : schemaPathAugmentListEntry.getValue()) {
-                GenHelperUtil.processUsesAugments(schemaContext, augSchema, module, genCtx,
-                        genTypeBuilders, verboseClassComments, typeProvider, BindingNamespaceType.Data);
+                GenHelperUtil.processUsesImplements(augSchema, module, schemaContext, genCtx, BindingNamespaceType.Data);
             }
 
         }
@@ -161,17 +160,25 @@ final class AugmentToGenType {
      * @throws IllegalStateException
      *             if set of module augmentations is null
      */
-    private static List<AugmentationSchema> resolveAugmentations(final Module module) {
+    private static List<AugmentationSchema> resolveAugmentations(final Module module, final SchemaContext schemaContext) {
         Preconditions.checkArgument(module != null, "Module reference cannot be NULL.");
         Preconditions.checkState(module.getAugmentations() != null, "Augmentations Set cannot be NULL.");
 
         final Set<AugmentationSchema> augmentations = module.getAugmentations();
-        final List<AugmentationSchema> sortedAugmentations = new ArrayList<>(augmentations);
+        final List<AugmentationSchema> sortedAugmentations = new ArrayList<>(augmentations).stream()
+                .filter(aug -> !module.equals(findAugmentTargetModule(schemaContext, aug)))
+                .collect(Collectors.toList());
         Collections.sort(sortedAugmentations, AUGMENT_COMP);
 
         return sortedAugmentations;
     }
 
+    public static Module findAugmentTargetModule(final SchemaContext schemaContext , final AugmentationSchema aug) {
+        Preconditions.checkNotNull(aug, "Augmentation schema can not be null.");
+        final QName first = aug.getTargetPath().getPathFromRoot().iterator().next();
+        return schemaContext.findModuleByNamespaceAndRevision(first.getNamespace(), first.getRevision());
+    }
+
     /**
      * Converts <code>augSchema</code> to list of <code>Type</code> which
      * contains generated type for augmentation. In addition there are also
@@ -235,12 +242,12 @@ final class AugmentToGenType {
             throw new NullPointerException("Target type not yet generated: " + targetSchemaNode);
         }
 
-        final String augmentNamespacePackageName =
-                BindingGeneratorUtil.packageNameForAugmentedGeneratedType(basePackageName, targetPath);
+        final String augmentPackageName =
+            BindingGeneratorUtil.packageNameWithNamespacePrefix(basePackageName, BindingNamespaceType.Data);
 
         if (!(targetSchemaNode instanceof ChoiceSchemaNode)) {
-            genCtx = GenHelperUtil.addRawAugmentGenTypeDefinition(module, augmentNamespacePackageName,
-                    targetTypeBuilder.toInstance(), schemaPathAugmentListEntry.getValue(), genTypeBuilders, genCtx,
+            genCtx = GenHelperUtil.addRawAugmentGenTypeDefinition(module, augmentPackageName,
+                    targetTypeBuilder.toInstance(), targetSchemaNode, schemaPathAugmentListEntry.getValue(), genTypeBuilders, genCtx,
                     schemaContext, verboseClassComments, typeProvider, BindingNamespaceType.Data);
         } else {
             genCtx = generateTypesFromAugmentedChoiceCases(schemaContext, module, basePackageName,
@@ -252,6 +259,7 @@ final class AugmentToGenType {
         return genCtx;
     }
 
+    @Deprecated
     static Map<Module, ModuleContext> usesAugmentationToGenTypes(final SchemaContext schemaContext,
            final String augmentPackageName, final List<AugmentationSchema> schemaPathAugmentListEntry, final Module module,
            final UsesNode usesNode, final DataNodeContainer usesNodeParent, Map<Module, ModuleContext> genCtx,
@@ -294,7 +302,7 @@ final class AugmentToGenType {
                         (AugmentationSchema)usesNodeParent);
             }
             genCtx = GenHelperUtil.addRawAugmentGenTypeDefinition(module, packageName,
-                    targetTypeBuilder.toInstance(), schemaPathAugmentListEntry, genTypeBuilders, genCtx,
+                    targetTypeBuilder.toInstance(), targetSchemaNode, schemaPathAugmentListEntry, genTypeBuilders, genCtx,
                     schemaContext, verboseClassComments, typeProvider, namespaceType);
             return genCtx;
         } else {