package org.checkerframework.dataflow.qual; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * {@code Pure} is a method annotation that means both {@link SideEffectFree} and {@link * Deterministic}. The more important of these, when performing pluggable type-checking, is usually * {@link SideEffectFree}. * * @checker_framework.manual #type-refinement-purity Side effects, determinism, purity, and * flow-sensitive analysis * @author Stefan Heule */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) public @interface Pure { /** The type of purity. */ public static enum Kind { /** The method has no visible side-effects. */ SIDE_EFFECT_FREE, /** The method returns exactly the same value when called in the same environment. */ DETERMINISTIC } }