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 + ")"; } }