2 * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.generator.impl.reactor;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.base.MoreObjects;
13 import com.google.common.base.MoreObjects.ToStringHelper;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.eclipse.jdt.annotation.Nullable;
18 * Link to the original definition of an {@link AbstractExplicitGenerator}.
20 // FIXME: sealed when we have JDK17+
21 abstract class OriginalLink {
22 static final class Complete extends OriginalLink {
23 private final @NonNull AbstractExplicitGenerator<?> original;
25 Complete(final AbstractExplicitGenerator<?> original) {
26 this.original = requireNonNull(original);
30 AbstractExplicitGenerator<?> previous() {
35 @NonNull AbstractExplicitGenerator<?> original() {
40 ToStringHelper addToStringAttributes(final ToStringHelper helper) {
41 return helper.add("original", original);
45 static final class Partial extends OriginalLink {
46 private final @NonNull AbstractExplicitGenerator<?> previous;
47 private AbstractExplicitGenerator<?> original;
49 Partial(final AbstractExplicitGenerator<?> previous) {
50 this.previous = requireNonNull(previous);
54 AbstractExplicitGenerator<?> previous() {
59 AbstractExplicitGenerator<?> original() {
60 if (original == null) {
61 final var link = previous.originalLink();
62 if (link instanceof Complete || link.previous() != previous) {
63 original = link.original();
70 ToStringHelper addToStringAttributes(final ToStringHelper helper) {
71 return helper.add("previous", previous).add("original", original);
75 private OriginalLink() {
79 abstract @NonNull AbstractExplicitGenerator<?> previous();
81 abstract @Nullable AbstractExplicitGenerator<?> original();
83 abstract ToStringHelper addToStringAttributes(ToStringHelper helper);
86 public final String toString() {
87 return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();