package org.checkerframework.checker.mustcall.qual;

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;

/**
 * This annotation is an alias for {@link MustCall} that applies to the type on which it is written
 * <b>and</b> all of its subtypes. It prevents the need to annotate each subtype with an {@link
 * MustCall} annotation. This annotation may only be written on a class declaration.
 *
 * @checker_framework.manual #must-call-checker Must Call Checker
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface InheritableMustCall {
  /**
   * Methods that might need to be called on the expression whose type is annotated.
   *
   * @return methods that might need to be called
   */
  public String[] value() default {};
}
