Java程序  |  75行  |  2.13 KB

package annotations.el;

import annotations.util.Hasher;

/*>>>
import org.checkerframework.checker.nullness.qual.*;
*/

/**
 * A {@link BoundLocation} holds location information for a bound of a type
 * parameter of a class or method: parameter index and bound index.
 * It also handles type parameters themselves (not just the bound part).
 * It would be better named "TypeParameterLocation", or the two uses could
 * be separated out.
 */
public final class BoundLocation {
    /**
     * The index of the parameter to which the bound applies among all
     * type parameters of the class or method.
     */
    public final int paramIndex;

    /**
     * The index of the bound among all bounds on the type parameter.
     * -1 if for the type parameter itself.
     */
    public final int boundIndex;

    /**
     * Constructs a new {@link BoundLocation}; the arguments are assigned to
     * the fields of the same names.
     */
    public BoundLocation(int paramIndex, int boundIndex) {
        this.paramIndex = paramIndex;
        this.boundIndex = boundIndex;
    }

    /**
     * Returns whether this {@link BoundLocation} equals <code>o</code>; a
     * slightly faster variant of {@link #equals(Object)} for when the argument
     * is statically known to be another nonnull {@link BoundLocation}.
     */
    public boolean equals(BoundLocation l) {
        return paramIndex == l.paramIndex && boundIndex == l.boundIndex;
    }

    /**
     * This {@link BoundLocation} equals <code>o</code> if and only if
     * <code>o</code> is another nonnull {@link BoundLocation} and
     * <code>this</code> and <code>o</code> have equal {@link #paramIndex}
     * and {@link #boundIndex}.
     */
    @Override
    public boolean equals(Object o) {
        return o instanceof BoundLocation
                && equals((BoundLocation) o);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int hashCode() {
        Hasher h = new Hasher();
        h.mash(paramIndex);
        h.mash(boundIndex);
        return h.hash;
    }

    @Override
    public String toString() {
        return "BoundLocation(" + paramIndex + "," + boundIndex + ")";
    }
}