Remove duplicate documentation
[mdsal.git] / binding / mdsal-binding-generator / src / main / java / org / opendaylight / mdsal / binding / generator / impl / reactor / UsesAugmentGenerator.java
index e933dbaaed7a20b35acaa0524700e18ff9f09841..59bc06b301a445f5825a4d3070a91e951f169ef7 100644 (file)
@@ -13,6 +13,8 @@ import static java.util.Objects.requireNonNull;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement;
 
@@ -28,17 +30,6 @@ final class UsesAugmentGenerator extends AbstractAugmentGenerator {
             final AbstractCompositeGenerator<?, ?> parent) {
         super(statement, parent);
         this.uses = requireNonNull(uses);
-
-        // FIXME: use SchemaTreeAwareEffectiveStatement
-        var stmt = parent.statement();
-        for (var qname : statement.argument().getNodeIdentifiers()) {
-            final var tmp = stmt;
-            stmt = stmt.streamEffectiveSubstatements(SchemaTreeEffectiveStatement.class)
-                .filter(child -> qname.equals(child.argument()))
-                .findFirst()
-                .orElseThrow(() -> new IllegalStateException("Failed to find " + qname + " in " + tmp));
-        }
-        setTargetStatement(stmt);
     }
 
     void resolveGrouping(final UsesEffectiveStatement resolvedUses, final GroupingGenerator resolvedGrouping) {
@@ -58,4 +49,23 @@ final class UsesAugmentGenerator extends AbstractAugmentGenerator {
         // Our parent here is *not* the 'uses' statement, but rather the statement which contains it.
         return new AugmentRequirement(this, verifyNotNull(grouping, "Unresolved grouping in %s", this));
     }
+
+    @Override
+    boolean matchesInstantiated(final AugmentEffectiveStatement statement) {
+        return super.matchesInstantiated(statement) || declared(statement()).equals(declared(statement));
+    }
+
+    private static AugmentStatement declared(final AugmentEffectiveStatement statement) {
+        // We are generating Augmentation interfaces on declared model, hence this is accurate
+        return verifyNotNull(statement.getDeclared(), " %s does not have a declared view", statement);
+    }
+
+    @Override
+    TargetAugmentEffectiveStatement effectiveIn(final SchemaTreeAwareEffectiveStatement<?, ?> target) {
+        verify(target instanceof SchemaTreeEffectiveStatement, "Unexpected statement %s", target);
+        // 'uses'/'augment': our children are binding to target's namespace
+
+        final var targetNamespace = ((SchemaTreeEffectiveStatement<?>) target).argument().getModule();
+        return effectiveIn(target, qname -> qname.bindTo(targetNamespace));
+    }
 }