Fix uses/augment linkage
[mdsal.git] / binding / mdsal-binding-generator / src / main / java / org / opendaylight / mdsal / binding / generator / impl / reactor / AbstractAugmentGenerator.java
index 4875bd00c4f601ece3bbd07e83fc611eea09fd7a..807a253907f80ad1a07b526b19077dba6b096fc2 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.generator.impl.reactor;
 
 import static com.google.common.base.Verify.verify;
 import static com.google.common.base.Verify.verifyNotNull;
+import static java.util.Objects.requireNonNull;
 
 import java.util.Comparator;
 import java.util.Iterator;
@@ -143,21 +144,17 @@ abstract class AbstractAugmentGenerator extends AbstractCompositeGenerator<Augme
         // Augments are never added as getters, as they are handled via Augmentable mechanics
     }
 
-    final void setTargetGenerator(final AbstractExplicitGenerator<?> target) {
-        verify(target instanceof AbstractCompositeGenerator, "Unexpected target %s", target);
-        targetGen = (AbstractCompositeGenerator<?>) target;
-        targetGen.addAugment(this);
+    final void startLinkage(final AbstractCompositeGenerator<?> base) {
+        verify(targetGen == null, "Attempted to start linkage of %s, already have target %s", this, targetGen);
+        base.resolveAugmentTarget(this);
     }
 
-    final @NonNull AbstractCompositeGenerator<?> targetGenerator() {
-        final AbstractCompositeGenerator<?> existing = targetGen;
-        if (existing != null) {
-            return existing.getOriginal();
-        }
-
-        loadTargetGenerator();
-        return verifyNotNull(targetGen, "No target for %s", this).getOriginal();
+    final void setTargetGenerator(final AbstractCompositeGenerator<?> targetGenerator) {
+        verify(targetGen == null, "Attempted to relink %s, already have target %s", this, targetGen);
+        targetGen = requireNonNull(targetGenerator);
     }
 
-    abstract void loadTargetGenerator();
+    final @NonNull AbstractCompositeGenerator<?> targetGenerator() {
+        return verifyNotNull(targetGen, "No target for %s", this);
+    }
 }