All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.checkerframework.framework.qual.MonotonicQualifier Maven / Gradle / Ivy

There is a newer version: 2.0.7.Final
Show newest version
package org.checkerframework.framework.qual;

import java.lang.annotation.Annotation;
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;

/**
 * A meta-annotation that indicates that a qualifier indicates that an expression goes monotonically
 * from a type qualifier {@code T} to another qualifier {@code S}. The annotation {@code S} is
 * called the target of the monotonic qualifier, and has to be indicated by {@link
 * MonotonicQualifier#value()}.
 *
 * 

This meta-annotation can be used on the declaration of the monotonic qualifier used for the * type-system at hand, and is often called {@code MonoT} if the target is {@code T}. The subtyping * hierarchy has to be defined as follows: * *

{@code
 * T <: MonoT <: S
 * }
* * where {@code <:} indicates the subtyping relation. * *

An expression of a monotonic type can only be assigned expressions of the target type {@code * T}. This means that an expression of the monotonic type {@code MonoT} cannot be assigned to a * variable of the same type. * *

Reading an expression of a monotonic type {@code MonoT} might always yield an expression of * type {@code S}. However, once it has been observed that a variable has the target type {@code T}, * the monotonic property ensures that it will stay of type {@code T} for the rest of the program * execution. This is even true if arbitrary other code is executed. * *

Note that variables of a monotonic type can be re-assigned arbitrarily often, but only with * expressions of the target type. */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interface MonotonicQualifier { Class value(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy