package org.checkerframework.checker.interning.qual;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Class declaration to indicate the class does not override {@code equals(Object)}, and therefore
 * {@code a.equals(b)} and {@code a == b} behave identically.
 *
 * <p>A class may be annotated @UsesObjectEquals if neither it, nor any of its supertypes or
 * subtypes, overrides {@code equals}. Therefore, it cannot be written on {@code Object} itself. It
 * is most commonly written on a direct subclass of {@code Object}.
 *
 * @see org.checkerframework.checker.interning.InterningChecker
 * @checker_framework.manual #interning-checker Interning Checker
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface UsesObjectEquals {}
