/* * Copyright (c) 2015 Pantheon Technologies s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.model.api.stmt; import static com.google.common.base.Preconditions.checkArgument; import com.google.common.annotations.Beta; import com.google.common.collect.Range; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; @Beta public abstract class UnresolvedNumber extends Number implements Immutable { private static final @NonNull UnresolvedNumber MAX = new UnresolvedNumber() { private static final long serialVersionUID = 1L; @Override public > T resolveLength(final Range span) { return resolve(span.upperEndpoint()); } @Override public > T resolveRange(final Range span) { return resolve(span.upperEndpoint()); } @Override public String toString() { return "max"; } private Object readResolve() { return MAX; } }; private static final @NonNull UnresolvedNumber MIN = new UnresolvedNumber() { private static final long serialVersionUID = 1L; @Override public > T resolveLength(final Range span) { return resolve(span.lowerEndpoint()); } @Override public > T resolveRange(final Range span) { return resolve(span.lowerEndpoint()); } @Override public String toString() { return "min"; } private Object readResolve() { return MIN; } }; private static final long serialVersionUID = 1L; UnresolvedNumber() { // Hidden on purpose } public static @NonNull UnresolvedNumber min() { return MIN; } public static @NonNull UnresolvedNumber max() { return MAX; } @Override public final int intValue() { throw new UnsupportedOperationException(); } @Override public final long longValue() { throw new UnsupportedOperationException(); } @Override public final float floatValue() { throw new UnsupportedOperationException(); } @Override public final double doubleValue() { throw new UnsupportedOperationException(); } private static T resolve(final T number) { checkArgument(!(number instanceof UnresolvedNumber)); return number; } public abstract > @NonNull T resolveLength(Range span); public abstract > @NonNull T resolveRange(Range span); @Override public abstract String toString(); }