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;
// 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);
+ }
}