blob: de67a0a14e3c65539390578da4251a4f5f8f7c5a [file] [log] [blame]
/*
* Copyright (c) 2017 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Indicates to the user that she should not provide custom implementations of given type.
* Helps framework integrators and our users understand how to use Mockito API safely,
* without the risk of getting exposed to incompatible changes.
* Some types that are a part of Mockito public API are not intended to be extended.
* It's because Mockito team needs to be able to add new methods to some types without breaking compatibility contract.
* We would never break compatibility by changing the signature of an existing public method.
* However, we need flexibility to add new methods to some types to evolve the API if needed.
* Public types are all types that are *not* under "org.mockito.internal.*" package.
* <p>
* Absence of {@code NotExtensible} annotation on a type *does not* mean it is intended to be extended.
* The annotation has been introduced late and therefore it is not used frequently in the codebase.
* Many public types from Mockito API are not intended for extension, even though they do not have this annotation applied.
*
* @since 2.10.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NotExtensible {
}