import com.google.common.base.MoreObjects.ToStringHelper;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
/**
* Link to the original definition of an {@link AbstractExplicitGenerator}.
*/
// FIXME: sealed when we have JDK17+
-abstract class OriginalLink {
- private static final class Complete extends OriginalLink {
- private final @NonNull AbstractExplicitGenerator<?> original;
+abstract class OriginalLink<T extends EffectiveStatement<?, ?>> {
+ private static final class Complete<T extends EffectiveStatement<?, ?>> extends OriginalLink<T> {
+ private final @NonNull AbstractExplicitGenerator<T> original;
- Complete(final AbstractExplicitGenerator<?> original) {
+ Complete(final AbstractExplicitGenerator<T> original) {
this.original = requireNonNull(original);
}
@Override
- AbstractExplicitGenerator<?> previous() {
+ AbstractExplicitGenerator<T> previous() {
return original;
}
@Override
- @NonNull AbstractExplicitGenerator<?> original() {
+ @NonNull AbstractExplicitGenerator<T> original() {
return original;
}
}
}
- private static final class Partial extends OriginalLink {
- private final @NonNull AbstractExplicitGenerator<?> previous;
- private AbstractExplicitGenerator<?> original;
+ private static final class Partial<T extends EffectiveStatement<?, ?>> extends OriginalLink<T> {
+ private final @NonNull AbstractExplicitGenerator<T> previous;
+ private AbstractExplicitGenerator<T> original;
- Partial(final AbstractExplicitGenerator<?> previous) {
+ Partial(final AbstractExplicitGenerator<T> previous) {
this.previous = requireNonNull(previous);
}
@Override
- AbstractExplicitGenerator<?> previous() {
+ AbstractExplicitGenerator<T> previous() {
return previous;
}
@Override
- AbstractExplicitGenerator<?> original() {
+ AbstractExplicitGenerator<T> original() {
if (original == null) {
final var link = previous.originalLink();
if (link instanceof Complete || link.previous() != previous) {
// Hidden on purpose
}
- static @NonNull OriginalLink complete(final AbstractExplicitGenerator<?> original) {
- return new Complete(original);
+ static <T extends EffectiveStatement<?, ?>> @NonNull OriginalLink<T> complete(
+ final AbstractExplicitGenerator<T> original) {
+ return new Complete<>(original);
}
- static @NonNull OriginalLink partial(final AbstractExplicitGenerator<?> previous) {
- return new Partial(previous);
+ static <T extends EffectiveStatement<?, ?>> @NonNull OriginalLink<T> partial(
+ final AbstractExplicitGenerator<T> previous) {
+ return new Partial<>(previous);
}
- abstract @NonNull AbstractExplicitGenerator<?> previous();
+ abstract @NonNull AbstractExplicitGenerator<T> previous();
- abstract @Nullable AbstractExplicitGenerator<?> original();
+ abstract @Nullable AbstractExplicitGenerator<T> original();
abstract ToStringHelper addToStringAttributes(ToStringHelper helper);