blob: 80742faa25275cbc6b96764b14d31302e97938ce [file] [log] [blame]
package org.checkerframework.checker.lock.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;
import org.checkerframework.framework.qual.InheritedAnnotation;
/**
* The method, or one of the methods it calls, might release locks that were held prior to the
* method being called. You can write this when you are certain the method releases locks, or when
* you don't know whether the method releases locks.
*
* @see ReleasesNoLocks
* @see LockingFree
* @see org.checkerframework.dataflow.qual.SideEffectFree
* @see org.checkerframework.dataflow.qual.Pure
* @checker_framework.manual #lock-checker Lock Checker
* @checker_framework.manual #lock-lockingfree-example Example use of @MayReleaseLocks
* @checker_framework.manual #annotating-libraries Annotating libraries
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
@InheritedAnnotation
public @interface MayReleaseLocks {}