import org.opendaylight.mdsal.binding.model.api.Type;
import org.opendaylight.mdsal.binding.model.ri.Types;
-abstract class TypeReference {
+abstract sealed class TypeReference {
private static final class Identityref extends TypeReference {
private final List<IdentityGenerator> referencedGenerators;
}
// Note: this is exposed only for legacy naming handling
- abstract static class Leafref extends TypeReference {
+ abstract static sealed class Leafref extends TypeReference {
private Leafref() {
// Hidden on purpose
}
}
}
+ private static final class FailedLeafref extends Leafref {
+ private final IllegalArgumentException cause;
+
+ FailedLeafref(final IllegalArgumentException cause) {
+ this.cause = requireNonNull(cause);
+ }
+
+ @Override
+ Type methodReturnType(final TypeBuilderFactory builderFactory) {
+ throw new UnsupportedOperationException("Cannot ascertain type", cause);
+ }
+ }
+
static @NonNull TypeReference leafRef(final @Nullable AbstractTypeObjectGenerator<?, ?> referencedGenerator) {
return referencedGenerator == null ? UnresolvedLeafref.INSTANCE : new ResolvedLeafref(referencedGenerator);
}
+ static @NonNull TypeReference leafRef(final @NonNull IllegalArgumentException cause) {
+ return new FailedLeafref(cause);
+ }
+
static @NonNull TypeReference identityRef(final List<IdentityGenerator> referencedGenerators) {
return new Identityref(referencedGenerators);
}