diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d161ba007..b30f313e27 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: # Definition of the build matrix strategy: matrix: - java: [8, 11, 15] + java: [8, 11, 17] mock-maker: ['mock-maker-default', 'mock-maker-inline'] # All build steps @@ -41,7 +41,7 @@ jobs: - name: 2. Set up Java ${{ matrix.java }} uses: actions/setup-java@v2 with: - distribution: 'adopt' + distribution: 'zulu' java-version: ${{ matrix.java }} - name: 3. Validate Gradle wrapper @@ -63,8 +63,8 @@ jobs: - name: 7. Upload coverage report run: | - ./gradlew coverageReport -s --scan && cp build/reports/jacoco/mockitoCoverage/mockitoCoverage.xml jacoco.xml || echo "Code coverage failed" - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports" + ./gradlew coverageReport -s --scan && cp build/reports/jacoco/mockitoCoverage/mockitoCoverage.xml jacoco.xml + bash <(curl -s https://codecov.io/bash) # # Release job, only for pushes to the main development branch diff --git a/build.gradle b/build.gradle index d932bb87dc..e672ad9d6e 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'gradle.plugin.nl.javadude.gradle.plugins:license-gradle-plugin:0.14.0' + classpath 'gradle.plugin.com.hierynomus.gradle.plugins:license-gradle-plugin:0.16.1' classpath 'net.ltgt.gradle:gradle-errorprone-plugin:2.0.2' classpath "io.github.gradle-nexus:publish-plugin:1.1.0" @@ -14,8 +14,8 @@ buildscript { classpath 'org.shipkit:shipkit-auto-version:1.1.19' classpath 'com.google.googlejavaformat:google-java-format:1.11.0' - classpath 'com.android.tools.build:gradle:4.0.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" + classpath 'com.android.tools.build:gradle:4.2.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31" } } @@ -23,7 +23,7 @@ plugins { id 'com.diffplug.gradle.spotless' version '4.5.1' id 'eclipse' id 'com.github.ben-manes.versions' version '0.39.0' - id 'biz.aQute.bnd.builder' version '5.3.0' + id 'biz.aQute.bnd.builder' version '6.0.0' id 'ru.vyarus.animalsniffer' version '1.5.2' } @@ -83,16 +83,16 @@ configurations { } dependencies { - compile libraries.bytebuddy, libraries.bytebuddyagent + api libraries.bytebuddy, libraries.bytebuddyagent compileOnly libraries.junit4, libraries.hamcrest, libraries.opentest4j - compile libraries.objenesis + implementation libraries.objenesis - testCompile libraries.assertj + testImplementation libraries.assertj //putting 'provided' dependencies on test compile and runtime classpath testCompileOnly configurations.compileOnly - testRuntime configurations.compileOnly + testRuntimeOnly configurations.compileOnly testUtil sourceSets.test.output diff --git a/doc/release-notes/official.md b/doc/release-notes/official.md index 0e680ff95d..edae708fe3 100644 --- a/doc/release-notes/official.md +++ b/doc/release-notes/official.md @@ -1936,7 +1936,7 @@ Last version published to Maven Central after the team adopted [Continuous Deliv * Commits: 5 * 2: Brice Dutheil * 2: Christian Schwarz - * 1: Felix Dekker + * 1: F.W. Dekker * Improvements: 4 * Replaced ObjectBox with AtomicReference [(#777)](https://github.com/mockito/mockito/pull/777) * InvocationMatcher internal improvements [(#776)](https://github.com/mockito/mockito/pull/776) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 7580df4735..c3926ba2be 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -4,16 +4,16 @@ ext { def versions = [:] -versions.bytebuddy = '1.11.13' -versions.junitJupiter = '5.7.2' +versions.bytebuddy = '1.11.19' +versions.junitJupiter = '5.8.1' versions.errorprone = '2.9.0' libraries.junit4 = 'junit:junit:4.13.2' libraries.junitJupiterApi = "org.junit.jupiter:junit-jupiter-api:${versions.junitJupiter}" -libraries.junitPlatformLauncher = 'org.junit.platform:junit-platform-launcher:1.7.2' +libraries.junitPlatformLauncher = 'org.junit.platform:junit-platform-launcher:1.8.1' libraries.junitJupiterEngine = "org.junit.jupiter:junit-jupiter-engine:${versions.junitJupiter}" libraries.junitVintageEngine = "org.junit.vintage:junit-vintage-engine:${versions.junitJupiter}" -libraries.assertj = 'org.assertj:assertj-core:3.20.2' +libraries.assertj = 'org.assertj:assertj-core:3.21.0' libraries.hamcrest = 'org.hamcrest:hamcrest-core:2.2' libraries.opentest4j = 'org.opentest4j:opentest4j:1.2.0' @@ -29,17 +29,17 @@ libraries.autoservice = "com.google.auto.service:auto-service:1.0" libraries.objenesis = 'org.objenesis:objenesis:3.2' libraries.osgi = 'org.osgi:osgi.core:8.0.0' -libraries.equinox = 'org.eclipse.platform:org.eclipse.osgi:3.16.300' -libraries.bndGradle = 'biz.aQute.bnd:biz.aQute.bnd.gradle:5.3.0' +libraries.equinox = 'org.eclipse.platform:org.eclipse.osgi:3.17.0' +libraries.bndGradle = 'biz.aQute.bnd:biz.aQute.bnd.gradle:6.0.0' -libraries.groovy = 'org.codehaus.groovy:groovy:3.0.8' +libraries.groovy = 'org.codehaus.groovy:groovy:3.0.9' -def kotlinVersion = '1.5.21' +def kotlinVersion = '1.5.31' libraries.kotlin = [ version: kotlinVersion, stdlib: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", - coroutines: 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1-native-mt', + coroutines: 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt', gradlePlugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}", ] libraries.android = [ diff --git a/gradle/java-library.gradle b/gradle/java-library.gradle index 7402eaeed9..fd29ed862c 100644 --- a/gradle/java-library.gradle +++ b/gradle/java-library.gradle @@ -1,4 +1,5 @@ apply plugin: "java" +apply plugin: "java-library" group = 'org.mockito' diff --git a/gradle/mockito-core/inline-mock.gradle b/gradle/mockito-core/inline-mock.gradle index ae39ffeec1..d555ad6f09 100644 --- a/gradle/mockito-core/inline-mock.gradle +++ b/gradle/mockito-core/inline-mock.gradle @@ -1,10 +1,20 @@ -task copyMockMethodDispatcher(type: Copy) { +task copyMockMethodDispatcher { dependsOn compileJava - from "${sourceSets.main.java.outputDir}/org/mockito/internal/creation/bytebuddy/inject" - into "${sourceSets.main.java.outputDir}/org/mockito/internal/creation/bytebuddy/inject" - include "MockMethodDispatcher.class" - rename { String fileName -> - fileName.replace('.class', '.raw') + outputs.files files("${sourceSets.main.java.outputDir}/org/mockito/internal/creation/bytebuddy/inject") + .asFileTree + .matching { include "*.raw" } + .files + .collect { "${buildDir}/${it.name}" } + + doLast { + copy { + from "${sourceSets.main.java.outputDir}/org/mockito/internal/creation/bytebuddy/inject" + into "${sourceSets.main.java.outputDir}/org/mockito/internal/creation/bytebuddy/inject" + include 'MockMethodDispatcher.class' + rename { String fileName -> + fileName.replace('.class', '.raw') + } + } } } classes.dependsOn(copyMockMethodDispatcher) diff --git a/gradle/mockito-core/osgi.gradle b/gradle/mockito-core/osgi.gradle index 0c6f395e8b..8dbf3e9063 100644 --- a/gradle/mockito-core/osgi.gradle +++ b/gradle/mockito-core/osgi.gradle @@ -1,24 +1,26 @@ apply plugin: 'biz.aQute.bnd.builder' jar { - classpath = project.configurations.runtime - bnd( - 'Bundle-Name': 'Mockito Mock Library for Java. Core bundle requires Byte Buddy and Objenesis.', - 'Bundle-SymbolicName': 'org.mockito.mockito-core', - 'Bundle-Version': "\${version_cleanup;${project.version}}", - '-versionpolicy': '[${version;==;${@}},${version;+;${@}})', - 'Export-Package': "org.mockito.internal.*;status=INTERNAL;mandatory:=status;version=${version},org.mockito.*;version=${version}", - 'Import-Package': [ - 'net.bytebuddy.*;version="[1.6.0,2.0)"', - 'junit.*;resolution:=optional', - 'org.junit.*;resolution:=optional', - 'org.hamcrest;resolution:=optional', - 'org.objenesis;version="[3.1,4.0)"', - 'org.opentest4j.*;resolution:=optional', - 'org.mockito.*' - ].join(','), - '-removeheaders': 'Private-Package', - 'Automatic-Module-Name': 'org.mockito', - '-noextraheaders': 'true' - ) + classpath = project.configurations.compileClasspath + bundle { + bnd( + 'Bundle-Name': 'Mockito Mock Library for Java. Core bundle requires Byte Buddy and Objenesis.', + 'Bundle-SymbolicName': 'org.mockito.mockito-core', + 'Bundle-Version': "\${version_cleanup;${project.version}}", + '-versionpolicy': '[${version;==;${@}},${version;+;${@}})', + 'Export-Package': "org.mockito.internal.*;status=INTERNAL;mandatory:=status;version=${version},org.mockito.*;version=${version}", + 'Import-Package': [ + 'net.bytebuddy.*;version="[1.6.0,2.0)"', + 'junit.*;resolution:=optional', + 'org.junit.*;resolution:=optional', + 'org.hamcrest;resolution:=optional', + 'org.objenesis;version="[3.1,4.0)"', + 'org.opentest4j.*;resolution:=optional', + 'org.mockito.*' + ].join(','), + '-removeheaders': 'Private-Package', + 'Automatic-Module-Name': 'org.mockito', + '-noextraheaders': 'true' + ) + } } diff --git a/gradle/root/coverage.gradle b/gradle/root/coverage.gradle index 772de84b1b..87d0d7da01 100644 --- a/gradle/root/coverage.gradle +++ b/gradle/root/coverage.gradle @@ -19,7 +19,7 @@ task mockitoCoverage(type: JacocoReport) { apply plugin: "jacoco" jacoco { - toolVersion = '0.8.6' + toolVersion = '0.8.7' if (currentProject != rootProject) { //already automatically enhanced in mockito main project as "java" plugin was applied before applyTo test @@ -28,6 +28,17 @@ task mockitoCoverage(type: JacocoReport) { } mockitoCoverage.executionData(files(test.jacoco.destinationFile).builtBy(test)) + + afterEvaluate { + classDirectories.setFrom( + classDirectories.files.collect { + fileTree( + dir: it, + exclude: ["**/internal/util/concurrent/**"] + ) + } + ) + } } } @@ -37,16 +48,6 @@ task mockitoCoverage(type: JacocoReport) { html.destination file("${buildDir}/jacocoHtml") } - doFirst { - classDirectories.from = classDirectories.files.collect { - fileTree( - dir: it, - exclude: ['**/org/mockito/internal/util/concurrent/**'] - ) - } - executionData.from = executionData.files.findAll { it.exists() } - } - doLast { logger.lifecycle "Jacoco HTML created: file://${new File(reports.html.destination, "index.html").toURI().path}" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c05355..e708b1c023 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8174453a1a..a2e01c0dff 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionSha256Sum=f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index fbd7c51583..4f906e0c81 100755 --- a/gradlew +++ b/gradlew @@ -130,7 +130,7 @@ fi if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath diff --git a/gradlew.bat b/gradlew.bat index 5093609d51..107acd32c4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle.kts b/settings.gradle.kts index cdaa0e66e3..e13d9aa03c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,8 +2,8 @@ plugins { id("com.gradle.enterprise").version("3.3.4") } -include("deprecatedPluginsTest", - "inline", +include("inline", + "proxy", "extTest", "groovyTest", "kotlinTest", @@ -18,7 +18,7 @@ include("deprecatedPluginsTest", "junitJupiterParallelTest", "osgi-test") -if (System.getenv("ANDROID_SDK_ROOT") != null || File(".local.properties").exists()) { +if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17) && (System.getenv("ANDROID_SDK_ROOT") != null || File(".local.properties").exists())) { include("androidTest") } else { logger.info("Not including android test project due to missing SDK configuration") diff --git a/src/javadoc/stylesheet.css b/src/javadoc/stylesheet.css index f4b3dd7fd5..636840de44 100644 --- a/src/javadoc/stylesheet.css +++ b/src/javadoc/stylesheet.css @@ -8,8 +8,8 @@ Overall document style * { margin:0; padding:0; } body { background-color: #FFFFFF; color:#333; font-size: 100%; } body { font-size: 0.875em; line-height: 1.286em; font-family: "Helvetica", "Arial", sans-serif; } -code { color: #777; line-height: 1.286em; font-family: "Consolas", "Lucida Console", "Droid Sans Mono", "Andale Mono", "Monaco", "Lucida Sans Typewriter"; } -pre { color: #555; line-height: 1.0em; font-family: "Consolas", "Lucida Console", "Droid Sans Mono", "Andale Mono", "Monaco", "Lucida Sans Typewriter"; } +code { color: #777; line-height: 1.286em; font-family: "Consolas", "Lucida Console", "Droid Sans Mono", "Andale Mono", "Monaco", "Lucida Sans Typewriter", monospace; } +pre { color: #555; line-height: 1.0em; font-family: "Consolas", "Lucida Console", "Droid Sans Mono", "Andale Mono", "Monaco", "Lucida Sans Typewriter", monospace; } a { text-decoration: none; color: #16569A; /* also try #2E85ED, #0033FF, #6C93C6, #1D7BBE, #1D8DD2 */ } a:hover, a:hover code { color: #EEEEEE; background-color: #16569A; } diff --git a/src/main/java/org/mockito/AdditionalAnswers.java b/src/main/java/org/mockito/AdditionalAnswers.java index c7d2683f63..7825289bde 100644 --- a/src/main/java/org/mockito/AdditionalAnswers.java +++ b/src/main/java/org/mockito/AdditionalAnswers.java @@ -330,7 +330,6 @@ public static Answer returnsElementsOf(Collection elements) { * * @since 2.8.44 */ - @Incubating public static Answer answersWithDelay(long sleepyTime, Answer answer) { return (Answer) new AnswersWithDelay(sleepyTime, (Answer) answer); } @@ -344,7 +343,6 @@ public static Answer answersWithDelay(long sleepyTime, Answer answer) * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answer(Answer1 answer) { return toAnswer(answer); } @@ -357,7 +355,6 @@ public static Answer answer(Answer1 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answerVoid(VoidAnswer1 answer) { return toAnswer(answer); } @@ -372,7 +369,6 @@ public static Answer answerVoid(VoidAnswer1 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answer(Answer2 answer) { return toAnswer(answer); } @@ -386,7 +382,6 @@ public static Answer answer(Answer2 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answerVoid(VoidAnswer2 answer) { return toAnswer(answer); } @@ -402,7 +397,6 @@ public static Answer answerVoid(VoidAnswer2 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answer(Answer3 answer) { return toAnswer(answer); } @@ -417,7 +411,6 @@ public static Answer answer(Answer3 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answerVoid(VoidAnswer3 answer) { return toAnswer(answer); } @@ -434,7 +427,6 @@ public static Answer answerVoid(VoidAnswer3 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answer(Answer4 answer) { return toAnswer(answer); } @@ -450,7 +442,6 @@ public static Answer answer(Answer4 answer) { * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answerVoid(VoidAnswer4 answer) { return toAnswer(answer); } @@ -468,7 +459,6 @@ public static Answer answerVoid(VoidAnswer4 answe * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answer(Answer5 answer) { return toAnswer(answer); } @@ -486,7 +476,6 @@ public static Answer answer(Answer5 answ * @return the answer object to use * @since 2.1.0 */ - @Incubating public static Answer answerVoid(VoidAnswer5 answer) { return toAnswer(answer); } @@ -506,7 +495,6 @@ public static Answer answerVoid(VoidAnswer5 * @return the answer object to use * @since 2.26.0 */ - @Incubating public static Answer answer(Answer6 answer) { return toAnswer(answer); } @@ -525,7 +513,6 @@ public static Answer answer(Answer6 Answer answerVoid(VoidAnswer6 answer) { return toAnswer(answer); } diff --git a/src/main/java/org/mockito/AdditionalMatchers.java b/src/main/java/org/mockito/AdditionalMatchers.java index 16f5ed8a95..2cb71c6a10 100644 --- a/src/main/java/org/mockito/AdditionalMatchers.java +++ b/src/main/java/org/mockito/AdditionalMatchers.java @@ -16,11 +16,11 @@ import org.mockito.internal.matchers.LessThan; /** - * See {@link Matchers} for general info about matchers. + * See {@link ArgumentMatchers} for general info about matchers. *

* AdditionalMatchers provides rarely used matchers, kept only for somewhat compatibility with EasyMock. * Use additional matchers very judiciously because they may impact readability of a test. - * It is recommended to use matchers from {@link Matchers} and keep stubbing and verification simple. + * It is recommended to use matchers from {@link ArgumentMatchers} and keep stubbing and verification simple. *

* Example of using logical and(), not(), or() matchers: * diff --git a/src/main/java/org/mockito/Answers.java b/src/main/java/org/mockito/Answers.java index 2c844f53d4..30dc307437 100644 --- a/src/main/java/org/mockito/Answers.java +++ b/src/main/java/org/mockito/Answers.java @@ -85,15 +85,6 @@ public enum Answers implements Answer { this.implementation = implementation; } - /** - * @deprecated as of 2.1.0 Use the enum-constant directly, instead of this getter. This method will be removed in a future release
- * E.g. instead of Answers.CALLS_REAL_METHODS.get() use Answers.CALLS_REAL_METHODS . - */ - @Deprecated - public Answer get() { - return this; - } - @Override public Object answer(InvocationOnMock invocation) throws Throwable { return implementation.answer(invocation); diff --git a/src/main/java/org/mockito/ArgumentMatcher.java b/src/main/java/org/mockito/ArgumentMatcher.java index f51d7e5f79..f997d2e83f 100644 --- a/src/main/java/org/mockito/ArgumentMatcher.java +++ b/src/main/java/org/mockito/ArgumentMatcher.java @@ -44,7 +44,7 @@ * * *

- * Implementations of this interface can be used with {@link Matchers#argThat} method. + * Implementations of this interface can be used with {@link ArgumentMatchers#argThat} method. * Use toString() method for description of the matcher * - it is printed in verification errors. * @@ -84,7 +84,7 @@ * * *

- * Read more about other matchers in javadoc for {@link Matchers} class. + * Read more about other matchers in javadoc for {@link ArgumentMatchers} class. *

2.1.0 migration guide

* * All existing custom implementations of ArgumentMatcher will no longer compile. diff --git a/src/main/java/org/mockito/ArgumentMatchers.java b/src/main/java/org/mockito/ArgumentMatchers.java index 7e90362815..e1346db07e 100644 --- a/src/main/java/org/mockito/ArgumentMatchers.java +++ b/src/main/java/org/mockito/ArgumentMatchers.java @@ -90,10 +90,10 @@ * * *

- * Matcher methods like anyObject(), eq() do not return matchers. + * Matcher methods like any(), eq() do not return matchers. * Internally, they record a matcher on a stack and return a dummy value (usually null). * This implementation is due to static type safety imposed by java compiler. - * The consequence is that you cannot use anyObject(), eq() methods outside of verified/stubbed method. + * The consequence is that you cannot use any(), eq() methods outside of verified/stubbed method. *

* *

Additional matchers

@@ -121,8 +121,6 @@ public class ArgumentMatchers { * *

* See examples in javadoc for {@link ArgumentMatchers} class - * - * This is an alias of: {@link #anyObject()} *

* *

@@ -136,35 +134,11 @@ public class ArgumentMatchers { * @return null. * * @see #any(Class) - * @see #anyObject() - * @see #anyVararg() * @see #anyChar() * @see #anyInt() * @see #anyBoolean() - * @see #anyCollectionOf(Class) */ public static T any() { - return anyObject(); - } - - /** - * Matches anything, including null. - * - *

- * This is an alias of: {@link #any()}. - * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @return null. - * @see #any() - * @see #any(Class) - * @see #notNull() - * @see #notNull(Class) - * @deprecated This will be removed in Mockito 4.0 This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static T anyObject() { reportMatcher(Any.ANY); return null; } @@ -190,7 +164,7 @@ public static T anyObject() { *
    *
  • For primitive types use {@link #anyChar()} family.
  • *
  • Since Mockito 2.1.0 this method will perform a type check thus null values are not authorized.
  • - *
  • Since mockito 2.1.0 {@link #any()} and {@link #anyObject()} are not anymore aliases of this method.
  • + *
  • Since mockito 2.1.0 {@link #any()} is no longer an alias of this method.
  • *
*

* @@ -198,13 +172,9 @@ public static T anyObject() { * @param type the class of the accepted type. * @return null. * @see #any() - * @see #anyObject() - * @see #anyVararg() * @see #isA(Class) * @see #notNull() - * @see #notNull(Class) * @see #isNull() - * @see #isNull(Class) */ public static T any(Class type) { reportMatcher(new InstanceOf.VarArgAware(type, "")); @@ -226,43 +196,6 @@ public static T isA(Class type) { return defaultValue(type); } - /** - * Any vararg, meaning any number and values of arguments. - * - *

- * Example: - *


-     * //verification:
-     * mock.foo(1, 2);
-     * mock.foo(1, 2, 3, 4);
-     *
-     * verify(mock, times(2)).foo(anyVararg());
-     *
-     * //stubbing:
-     * when(mock.foo(anyVararg()).thenReturn(100);
-     *
-     * //prints 100
-     * System.out.println(mock.foo(1, 2));
-     * //also prints 100
-     * System.out.println(mock.foo(1, 2, 3, 4));
-     * 
- *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @return null. - * @see #any() - * @see #any(Class) - * @deprecated as of 2.1.0 use {@link #any()} - */ - @Deprecated - public static T anyVararg() { - Object ignored = any(); - return null; - } - /** * Any boolean or non-null Boolean * @@ -279,7 +212,6 @@ public static T anyVararg() { * * @return false. * @see #isNull() - * @see #isNull(Class) */ public static boolean anyBoolean() { reportMatcher(new InstanceOf(Boolean.class, "")); @@ -302,7 +234,6 @@ public static boolean anyBoolean() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static byte anyByte() { reportMatcher(new InstanceOf(Byte.class, "")); @@ -325,7 +256,6 @@ public static byte anyByte() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static char anyChar() { reportMatcher(new InstanceOf(Character.class, "")); @@ -348,7 +278,6 @@ public static char anyChar() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static int anyInt() { reportMatcher(new InstanceOf(Integer.class, "")); @@ -371,7 +300,6 @@ public static int anyInt() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static long anyLong() { reportMatcher(new InstanceOf(Long.class, "")); @@ -394,7 +322,6 @@ public static long anyLong() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static float anyFloat() { reportMatcher(new InstanceOf(Float.class, "")); @@ -417,7 +344,6 @@ public static float anyFloat() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static double anyDouble() { reportMatcher(new InstanceOf(Double.class, "")); @@ -440,7 +366,6 @@ public static double anyDouble() { * * @return 0. * @see #isNull() - * @see #isNull(Class) */ public static short anyShort() { reportMatcher(new InstanceOf(Short.class, "")); @@ -463,7 +388,6 @@ public static short anyShort() { * * @return empty String ("") * @see #isNull() - * @see #isNull(Class) */ public static String anyString() { reportMatcher(new InstanceOf(String.class, "")); @@ -485,50 +409,13 @@ public static String anyString() { *

* * @return empty List. - * @see #anyListOf(Class) * @see #isNull() - * @see #isNull(Class) */ public static List anyList() { reportMatcher(new InstanceOf(List.class, "")); return new ArrayList(0); } - /** - * Any non-null List. - * - * Generic friendly alias to {@link ArgumentMatchers#anyList()}. It's an alternative to - * @SuppressWarnings("unchecked") to keep code clean of compiler warnings. - * - *

- * This method doesn't do type checks of the list content with the given type parameter, it is only there - * to avoid casting in the code. - *

- * - *

- * Since Mockito 2.1.0, only allow non-null List. - * As this is a nullable reference, the suggested API to match null wrapper - * would be {@link #isNull()}. We felt this change would make test harnesses much safer than they were with Mockito - * 1.x. - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @param clazz Type owned by the list to avoid casting - * @return empty List. - * @see #anyList() - * @see #isNull() - * @see #isNull(Class) - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static List anyListOf(Class clazz) { - return anyList(); - } - /** * Any non-null Set. * @@ -544,52 +431,13 @@ public static List anyListOf(Class clazz) { *

* * @return empty Set - * @see #anySetOf(Class) * @see #isNull() - * @see #isNull(Class) */ public static Set anySet() { reportMatcher(new InstanceOf(Set.class, "")); return new HashSet(0); } - /** - * Any non-null Set. - * - *

- * Generic friendly alias to {@link ArgumentMatchers#anySet()}. - * It's an alternative to @SuppressWarnings("unchecked") to keep code clean of compiler warnings. - *

- * - *

- * This method doesn't do type checks of the set content with the given type parameter, it is only there - * to avoid casting in the code. - *

- * - *

- * Since Mockito 2.1.0, only allow non-null Set. - * As this is a nullable reference, the suggested API to match null wrapper - * would be {@link #isNull()}. We felt this change would make test harnesses much safer than they were with Mockito - * 1.x. - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @param clazz Type owned by the Set to avoid casting - * @return empty Set - * @see #anySet() - * @see #isNull() - * @see #isNull(Class) - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static Set anySetOf(Class clazz) { - return anySet(); - } - /** * Any non-null Map. * @@ -605,53 +453,13 @@ public static Set anySetOf(Class clazz) { *

* * @return empty Map. - * @see #anyMapOf(Class, Class) * @see #isNull() - * @see #isNull(Class) */ public static Map anyMap() { reportMatcher(new InstanceOf(Map.class, "")); return new HashMap(0); } - /** - * Any non-null Map. - * - *

- * Generic friendly alias to {@link ArgumentMatchers#anyMap()}. - * It's an alternative to @SuppressWarnings("unchecked") to keep code clean of compiler warnings. - *

- * - *

- * This method doesn't do type checks of the map content with the given type parameter, it is only there - * to avoid casting in the code. - *

- * - *

- * Since Mockito 2.1.0, only allow non-null Map. - * As this is a nullable reference, the suggested API to match null wrapper - * would be {@link #isNull()}. We felt this change would make test harnesses much safer than they were with Mockito - * 1.x. - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @param keyClazz Type of the map key to avoid casting - * @param valueClazz Type of the value to avoid casting - * @return empty Map. - * @see #anyMap() - * @see #isNull() - * @see #isNull(Class) - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static Map anyMapOf(Class keyClazz, Class valueClazz) { - return anyMap(); - } - /** * Any non-null Collection. * @@ -667,52 +475,13 @@ public static Map anyMapOf(Class keyClazz, Class valueClazz) *

* * @return empty Collection. - * @see #anyCollectionOf(Class) * @see #isNull() - * @see #isNull(Class) */ public static Collection anyCollection() { reportMatcher(new InstanceOf(Collection.class, "")); return new ArrayList(0); } - /** - * Any non-null Collection. - * - *

- * Generic friendly alias to {@link ArgumentMatchers#anyCollection()}. - * It's an alternative to @SuppressWarnings("unchecked") to keep code clean of compiler warnings. - *

- * - *

- * This method doesn't do type checks of the collection content with the given type parameter, it is only there - * to avoid casting in the code. - *

- * - *

- * Since Mockito 2.1.0, only allow non-null Collection. - * As this is a nullable reference, the suggested API to match null - * would be {@link #isNull()}. We felt this change would make test harnesses much safer than they were with Mockito - * 1.x. - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @param clazz Type owned by the collection to avoid casting - * @return empty Collection. - * @see #anyCollection() - * @see #isNull() - * @see #isNull(Class) - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static Collection anyCollectionOf(Class clazz) { - return anyCollection(); - } - /** * Any non-null Iterable. * @@ -728,9 +497,7 @@ public static Collection anyCollectionOf(Class clazz) { *

* * @return empty Iterable. - * @see #anyIterableOf(Class) * @see #isNull() - * @see #isNull(Class) * @since 2.1.0 */ public static Iterable anyIterable() { @@ -738,44 +505,6 @@ public static Iterable anyIterable() { return new ArrayList(0); } - /** - * Any non-null Iterable. - * - *

- * Generic friendly alias to {@link ArgumentMatchers#anyIterable()}. - * It's an alternative to @SuppressWarnings("unchecked") to keep code clean of compiler warnings. - *

- * - *

- * This method doesn't do type checks of the iterable content with the given type parameter, it is only there - * to avoid casting in the code. - *

- * - *

- * Since Mockito 2.1.0, only allow non-null String. - * As strings are nullable reference, the suggested API to match null wrapper - * would be {@link #isNull()}. We felt this change would make test harnesses much safer than they were with Mockito - * 1.x. - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class. - *

- * - * @param clazz Type owned by the collection to avoid casting - * @return empty Iterable. - * @see #anyIterable() - * @see #isNull() - * @see #isNull(Class) - * @since 2.1.0 - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static Iterable anyIterableOf(Class clazz) { - return anyIterable(); - } - /** * boolean argument that is equal to the given value. * @@ -966,39 +695,13 @@ public static T same(T value) { *

* * @return null. - * @see #isNull(Class) * @see #isNotNull() - * @see #isNotNull(Class) */ public static T isNull() { reportMatcher(Null.NULL); return null; } - /** - * null argument. - * - *

- * The class argument is provided to avoid casting. - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class - *

- * - * @param clazz Type to avoid casting - * @return null. - * @see #isNull() - * @see #isNotNull() - * @see #isNotNull(Class) - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static T isNull(Class clazz) { - return isNull(); - } - /** * Not null argument. * @@ -1017,32 +720,6 @@ public static T notNull() { return null; } - /** - * Not null argument, not necessary of the given class. - * - *

- * The class argument is provided to avoid casting. - * - * Alias to {@link ArgumentMatchers#isNotNull(Class)} - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class - *

- * - * @param clazz Type to avoid casting - * @return null. - * @see #isNotNull() - * @see #isNull() - * @see #isNull(Class) - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static T notNull(Class clazz) { - return notNull(); - } - /** * Not null argument. * @@ -1055,36 +732,12 @@ public static T notNull(Class clazz) { *

* * @return null. - * @see #isNotNull(Class) * @see #isNull() - * @see #isNull(Class) */ public static T isNotNull() { return notNull(); } - /** - * Not null argument, not necessary of the given class. - * - *

- * The class argument is provided to avoid casting. - * Alias to {@link ArgumentMatchers#notNull(Class)} - *

- * - *

- * See examples in javadoc for {@link ArgumentMatchers} class - *

- * - * @param clazz Type to avoid casting - * @return null. - * @deprecated With Java 8 this method will be removed in Mockito 4.0. This method is only used for generic - * friendliness to avoid casting, this is not anymore needed in Java 8. - */ - @Deprecated - public static T isNotNull(Class clazz) { - return notNull(clazz); - } - /** * Argument that is either null or of the given type. * diff --git a/src/main/java/org/mockito/BDDMockito.java b/src/main/java/org/mockito/BDDMockito.java index 1f249b4595..d37a07ae93 100644 --- a/src/main/java/org/mockito/BDDMockito.java +++ b/src/main/java/org/mockito/BDDMockito.java @@ -254,14 +254,6 @@ public interface Then { */ T should(InOrder inOrder, VerificationMode mode); - /** - * @see #verifyZeroInteractions(Object...) - * @since 2.1.0 - * @deprecated Since 3.0.1. Please migrate your code to {@link #shouldHaveNoInteractions()} - */ - @Deprecated - void shouldHaveZeroInteractions(); - /** * @see #verifyNoMoreInteractions(Object...) * @since 2.1.0 @@ -315,14 +307,6 @@ public T should(InOrder inOrder, VerificationMode mode) { return inOrder.verify(mock, mode); } - /** - * @see #verifyZeroInteractions(Object...) - * @since 2.1.0 - */ - public void shouldHaveZeroInteractions() { - verifyZeroInteractions(mock); - } - /** * @see #verifyNoMoreInteractions(Object...) * @since 2.1.0 @@ -357,17 +341,6 @@ public interface BDDStubber { */ BDDStubber will(Answer answer); - /** - * See original {@link Stubber#doNothing()}. - * - * This method will be removed in version 4.0.0 - * - * @since 1.8.0 - * @deprecated as of 2.1.0 please use {@link #willDoNothing()} instead - */ - @Deprecated - BDDStubber willNothing(); - /** * See original {@link Stubber#doNothing()} * @since 1.10.20 @@ -441,14 +414,6 @@ public BDDStubber will(Answer answer) { return new BDDStubberImpl(mockitoStubber.doAnswer(answer)); } - /** - * @deprecated please use {@link #willDoNothing()} instead - */ - @Deprecated - public BDDStubber willNothing() { - return willDoNothing(); - } - public BDDStubber willDoNothing() { return new BDDStubberImpl(mockitoStubber.doNothing()); } diff --git a/src/main/java/org/mockito/Matchers.java b/src/main/java/org/mockito/Matchers.java deleted file mode 100644 index f5e70bb658..0000000000 --- a/src/main/java/org/mockito/Matchers.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito; - -/** - * @deprecated Use {@link ArgumentMatchers}. This class is now deprecated in order to avoid a name clash with Hamcrest - * org.hamcrest.Matchers class. This class will likely be removed in version 4.0. - */ -@Deprecated -public class Matchers extends ArgumentMatchers {} diff --git a/src/main/java/org/mockito/MockSettings.java b/src/main/java/org/mockito/MockSettings.java index a1fdb508fd..c24d31ae9f 100644 --- a/src/main/java/org/mockito/MockSettings.java +++ b/src/main/java/org/mockito/MockSettings.java @@ -255,7 +255,6 @@ public interface MockSettings extends Serializable { * @return settings instance so that you can fluently specify other settings * @since 2.11.0 */ - @Incubating MockSettings verificationStartedListeners(VerificationStartedListener... listeners); /** @@ -296,7 +295,6 @@ public interface MockSettings extends Serializable { * @return settings instance so that you can fluently specify other settings * @since 2.7.14 (useConstructor with no arguments was supported since 1.10.12) */ - @Incubating MockSettings useConstructor(Object... args); /** @@ -311,7 +309,6 @@ public interface MockSettings extends Serializable { * @return settings instance so that you can fluently specify other settings * @since 1.10.12 */ - @Incubating MockSettings outerInstance(Object outerClassInstance); /** @@ -322,7 +319,6 @@ public interface MockSettings extends Serializable { * @return settings instance so that you can fluently specify other settings * @since 1.10.13 */ - @Incubating MockSettings withoutAnnotations(); /** @@ -337,7 +333,6 @@ public interface MockSettings extends Serializable { * @return immutable view of mock settings * @since 2.10.0 */ - @Incubating MockCreationSettings build(Class typeToMock); /** @@ -352,7 +347,6 @@ public interface MockSettings extends Serializable { * @return immutable view of mock settings * @since 2.10.0 */ - @Incubating MockCreationSettings buildStatic(Class classToMock); /** @@ -366,6 +360,5 @@ public interface MockSettings extends Serializable { * * For more information and an elaborate example, see {@link Mockito#lenient()}. */ - @Incubating MockSettings lenient(); } diff --git a/src/main/java/org/mockito/MockedConstruction.java b/src/main/java/org/mockito/MockedConstruction.java index c00fb021a2..5c2ec2128d 100644 --- a/src/main/java/org/mockito/MockedConstruction.java +++ b/src/main/java/org/mockito/MockedConstruction.java @@ -19,7 +19,6 @@ * * @param The type for which the construction is being mocked. */ -@Incubating public interface MockedConstruction extends ScopedMock { List constructed(); diff --git a/src/main/java/org/mockito/MockedStatic.java b/src/main/java/org/mockito/MockedStatic.java index fbf011f7df..9095556fd7 100644 --- a/src/main/java/org/mockito/MockedStatic.java +++ b/src/main/java/org/mockito/MockedStatic.java @@ -23,7 +23,6 @@ * * @param The type being mocked. */ -@Incubating public interface MockedStatic extends ScopedMock { /** @@ -38,14 +37,6 @@ default void verify(Verification verification) { verify(verification, times(1)); } - /** - * See {@link Mockito#verify(Object, VerificationMode)}. - * - * @deprecated Please use {@link MockedStatic#verify(Verification, VerificationMode) instead - */ - @Deprecated - void verify(VerificationMode mode, Verification verification); - /** * See {@link Mockito#verify(Object, VerificationMode)}. */ diff --git a/src/main/java/org/mockito/MockingDetails.java b/src/main/java/org/mockito/MockingDetails.java index be7dc6352a..c32e04e5c9 100644 --- a/src/main/java/org/mockito/MockingDetails.java +++ b/src/main/java/org/mockito/MockingDetails.java @@ -102,8 +102,6 @@ public interface MockingDetails { * Don't write code that depends on the output of this method. * If you need to know about interactions and stubbings, use {@link #getStubbings()} and {@link #getInvocations()}. *

- * This method was moved from the deprecated and semi-hidden type {@link MockitoDebugger}. - *

* This method throws meaningful exception when object wrapped by MockingDetails is not a mock. * * @since 2.2.6 @@ -119,7 +117,6 @@ public interface MockingDetails { * @return mock handler instance of this mock * @since 2.10.0 */ - @Incubating MockHandler getMockHandler(); /** diff --git a/src/main/java/org/mockito/Mockito.java b/src/main/java/org/mockito/Mockito.java index 184cc1407c..8d7154c513 100644 --- a/src/main/java/org/mockito/Mockito.java +++ b/src/main/java/org/mockito/Mockito.java @@ -6,10 +6,8 @@ import org.mockito.exceptions.misusing.PotentialStubbingProblem; import org.mockito.exceptions.misusing.UnnecessaryStubbingException; -import org.mockito.internal.InternalMockHandler; import org.mockito.internal.MockitoCore; import org.mockito.internal.creation.MockSettingsImpl; -import org.mockito.internal.debugging.MockitoDebuggerImpl; import org.mockito.internal.framework.DefaultMockitoFramework; import org.mockito.internal.session.DefaultMockitoSessionBuilder; import org.mockito.internal.verification.VerificationModeFactory; @@ -29,9 +27,11 @@ import org.mockito.session.MockitoSessionBuilder; import org.mockito.session.MockitoSessionLogger; import org.mockito.stubbing.Answer; +import org.mockito.stubbing.Answer1; import org.mockito.stubbing.LenientStubber; import org.mockito.stubbing.OngoingStubbing; import org.mockito.stubbing.Stubber; +import org.mockito.stubbing.VoidAnswer1; import org.mockito.verification.*; import java.util.function.Function; @@ -284,10 +284,10 @@ * * *

- * Matcher methods like anyObject(), eq() do not return matchers. + * Matcher methods like any(), eq() do not return matchers. * Internally, they record a matcher on a stack and return a dummy value (usually null). * This implementation is due to static type safety imposed by the java compiler. - * The consequence is that you cannot use anyObject(), eq() methods outside of verified/stubbed method. + * The consequence is that you cannot use any(), eq() methods outside of verified/stubbed method. * * * @@ -401,9 +401,6 @@ * //verify that method was never called on a mock * verify(mockOne, never()).add("two"); * - * //verify that other mocks were not interacted - * verifyZeroInteractions(mockTwo, mockThree); - * * * * @@ -1242,7 +1239,7 @@ * as Java 8 lambdas. Even in Java 7 and lower these custom answers based on a typed interface can reduce boilerplate. * In particular, this approach will make it easier to test functions which use callbacks. * - * The methods {@link AdditionalAnswers#answer(Answer1) answer} and {@link AdditionalAnswers#answerVoid(VoidAnswer1) answerVoid} + * The methods {@link AdditionalAnswers#answer(Answer1)}} and {@link AdditionalAnswers#answerVoid(VoidAnswer1)} * can be used to create the answer. They rely on the related answer interfaces in {@link org.mockito.stubbing} that * support answers up to 5 parameters. * @@ -1436,16 +1433,11 @@ * Provides access to invocation container object which has no methods (marker interface). * Container is needed to hide the internal implementation and avoid leaking it to the public API. * - *

  • Changed {@link Stubbing} - + *
  • Changed {@link org.mockito.stubbing.Stubbing} - * it now extends {@link Answer} interface. * It is backwards compatible because Stubbing interface is not extensible (see {@link NotExtensible}). * The change should be seamless to our users. *
  • - *
  • Deprecated {@link InternalMockHandler} - - * In order to accommodate API changes we needed to deprecate this interface. - * The interface was always documented as internal, we don't have evidence it was used by the community. - * The deprecation should be completely seamless for our users. - *
  • *
  • {@link NotExtensible} - * Public annotation that 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. @@ -1505,9 +1497,9 @@ * Deprecated org.mockito.plugins.InstantiatorProvider as it was leaking internal API. it was * replaced by org.mockito.plugins.InstantiatorProvider2 (Since 2.15.4) * - *

    {@link org.mockito.plugins.InstantiatorProvider} returned an internal API. Hence it was deprecated and replaced - * by {@link org.mockito.plugins.InstantiatorProvider2}. Old {@link org.mockito.plugins.InstantiatorProvider - * instantiator providers} will continue to work, but it is recommended to switch to the new API.

    + *

    org.mockito.plugins.InstantiatorProvider returned an internal API. Hence it was deprecated and replaced + * by {@link org.mockito.plugins.InstantiatorProvider2}. org.mockito.plugins.InstantiatorProvider + * has now been removed.

    * *

    45. New JUnit Jupiter (JUnit5+) extension

    * @@ -2076,7 +2068,6 @@ public static T spy(T object) { * @return a spy of the provided class * @since 1.10.12 */ - @Incubating public static T spy(Class classToSpy) { return MOCKITO_CORE.mock( classToSpy, withSettings().useConstructor().defaultAnswer(CALLS_REAL_METHODS)); @@ -2098,7 +2089,6 @@ public static T spy(Class classToSpy) { * @param classToMock class or interface of which static mocks should be mocked. * @return mock controller */ - @Incubating public static MockedStatic mockStatic(Class classToMock) { return mockStatic(classToMock, withSettings()); } @@ -2120,7 +2110,6 @@ public static MockedStatic mockStatic(Class classToMock) { * @param defaultAnswer the default answer when invoking static methods. * @return mock controller */ - @Incubating public static MockedStatic mockStatic(Class classToMock, Answer defaultAnswer) { return mockStatic(classToMock, withSettings().defaultAnswer(defaultAnswer)); } @@ -2142,7 +2131,6 @@ public static MockedStatic mockStatic(Class classToMock, Answer defaul * @param name the name of the mock to use in error messages. * @return mock controller */ - @Incubating public static MockedStatic mockStatic(Class classToMock, String name) { return mockStatic(classToMock, withSettings().name(name)); } @@ -2164,7 +2152,6 @@ public static MockedStatic mockStatic(Class classToMock, String name) * @param mockSettings the settings to use where only name and default answer are considered. * @return mock controller */ - @Incubating public static MockedStatic mockStatic(Class classToMock, MockSettings mockSettings) { return MOCKITO_CORE.mockStatic(classToMock, mockSettings); } @@ -2182,7 +2169,6 @@ public static MockedStatic mockStatic(Class classToMock, MockSettings * last answer is used. If this array is empty, the {@code defaultAnswer} is used. * @return mock controller */ - @Incubating public static MockedConstruction mockConstructionWithAnswer( Class classToMock, Answer defaultAnswer, Answer... additionalAnswers) { return mockConstruction( @@ -2211,7 +2197,6 @@ public static MockedConstruction mockConstructionWithAnswer( * @param classToMock non-abstract class of which constructions should be mocked. * @return mock controller */ - @Incubating public static MockedConstruction mockConstruction(Class classToMock) { return mockConstruction(classToMock, index -> withSettings(), (mock, context) -> {}); } @@ -2227,7 +2212,6 @@ public static MockedConstruction mockConstruction(Class classToMock) { * @param mockInitializer a callback to prepare a mock's methods after its instantiation. * @return mock controller */ - @Incubating public static MockedConstruction mockConstruction( Class classToMock, MockedConstruction.MockInitializer mockInitializer) { return mockConstruction(classToMock, withSettings(), mockInitializer); @@ -2244,7 +2228,6 @@ public static MockedConstruction mockConstruction( * @param mockSettings the mock settings to use. * @return mock controller */ - @Incubating public static MockedConstruction mockConstruction( Class classToMock, MockSettings mockSettings) { return mockConstruction(classToMock, context -> mockSettings); @@ -2261,7 +2244,6 @@ public static MockedConstruction mockConstruction( * @param mockSettingsFactory the mock settings to use. * @return mock controller */ - @Incubating public static MockedConstruction mockConstruction( Class classToMock, Function mockSettingsFactory) { @@ -2280,7 +2262,6 @@ public static MockedConstruction mockConstruction( * @param mockInitializer a callback to prepare a mock's methods after its instantiation. * @return mock controller */ - @Incubating public static MockedConstruction mockConstruction( Class classToMock, MockSettings mockSettings, @@ -2300,7 +2281,6 @@ public static MockedConstruction mockConstruction( * @param mockInitializer a callback to prepare a mock's methods after its instantiation. * @return mock controller */ - @Incubating public static MockedConstruction mockConstruction( Class classToMock, Function mockSettingsFactory, @@ -2531,18 +2511,6 @@ public static void verifyNoMoreInteractions(Object... mocks) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } - /** - * Verifies that no interactions happened on given mocks beyond the previously verified interactions.
    - * This method has the same behavior as {@link #verifyNoMoreInteractions(Object...)}. - * - * @param mocks to be verified - * @deprecated Since 3.0.1. Please migrate your code to {@link #verifyNoInteractions(Object...)} - */ - @Deprecated - public static void verifyZeroInteractions(Object... mocks) { - MOCKITO_CORE.verifyNoMoreInteractions(mocks); - } - /** * Verifies that no interactions happened on given mocks. *
    
    @@ -2980,8 +2948,7 @@ public static VerificationMode times(int wantedNumberOfInvocations) {
          *
          * 

    * If you want to verify there were NO interactions with the mock - * check out {@link Mockito#verifyZeroInteractions(Object...)} - * or {@link Mockito#verifyNoMoreInteractions(Object...)} + * check out {@link Mockito#verifyNoMoreInteractions(Object...)} *

    * See examples in javadoc for {@link Mockito} class * @@ -3273,21 +3240,11 @@ public static VerificationMode description(String description) { return times(1).description(description); } - /** - * @deprecated - please use {@link MockingDetails#printInvocations()} instead. - * An instance of {@code MockingDetails} can be retrieved via {@link #mockingDetails(Object)}. - */ - @Deprecated - static MockitoDebugger debug() { - return new MockitoDebuggerImpl(); - } - /** * For advanced users or framework integrators. See {@link MockitoFramework} class. * * @since 2.1.0 */ - @Incubating public static MockitoFramework framework() { return new DefaultMockitoFramework(); } @@ -3300,7 +3257,6 @@ public static MockitoFramework framework() { * * @since 2.7.0 */ - @Incubating public static MockitoSessionBuilder mockitoSession() { return new DefaultMockitoSessionBuilder(); } @@ -3368,7 +3324,6 @@ public static MockitoSessionBuilder mockitoSession() { * * @since 2.20.0 */ - @Incubating public static LenientStubber lenient() { return MOCKITO_CORE.lenient(); } diff --git a/src/main/java/org/mockito/MockitoDebugger.java b/src/main/java/org/mockito/MockitoDebugger.java deleted file mode 100644 index 7ee2229969..0000000000 --- a/src/main/java/org/mockito/MockitoDebugger.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito; - -/** - * @deprecated - please use {@link MockingDetails#printInvocations()} instead. - * An instance of {@code MockingDetails} can be retrieved via {@link Mockito#mockingDetails(Object)}. - */ -@Deprecated -public interface MockitoDebugger { - - /** - * @deprecated - please use {@link MockingDetails#printInvocations()} instead. - * An instance of {@code MockingDetails} can be retrieved via {@link Mockito#mockingDetails(Object)}. - */ - @Deprecated - String printInvocations(Object... mocks); -} diff --git a/src/main/java/org/mockito/MockitoFramework.java b/src/main/java/org/mockito/MockitoFramework.java index da03ef4d80..c3d590ceb7 100644 --- a/src/main/java/org/mockito/MockitoFramework.java +++ b/src/main/java/org/mockito/MockitoFramework.java @@ -19,7 +19,6 @@ * * @since 2.1.0 */ -@Incubating @NotExtensible public interface MockitoFramework { @@ -53,7 +52,6 @@ public interface MockitoFramework { * @return this instance of mockito framework (fluent builder pattern) * @since 2.1.0 */ - @Incubating MockitoFramework addListener(MockitoListener listener) throws RedundantListenerException; /** @@ -70,7 +68,6 @@ public interface MockitoFramework { * @return this instance of mockito framework (fluent builder pattern) * @since 2.1.0 */ - @Incubating MockitoFramework removeListener(MockitoListener listener); /** @@ -81,7 +78,6 @@ public interface MockitoFramework { * @return object that gives access to mockito plugins * @since 2.10.0 */ - @Incubating MockitoPlugins getPlugins(); /** @@ -91,7 +87,6 @@ public interface MockitoFramework { * @return object that can construct invocations * @since 2.10.0 */ - @Incubating InvocationFactory getInvocationFactory(); /** @@ -130,7 +125,6 @@ public interface MockitoFramework { * @since 2.25.0 * @see #clearInlineMock(Object) */ - @Incubating void clearInlineMocks(); /** @@ -142,6 +136,5 @@ public interface MockitoFramework { * @since 2.25.0 * @see #clearInlineMocks() */ - @Incubating void clearInlineMock(Object mock); } diff --git a/src/main/java/org/mockito/MockitoSession.java b/src/main/java/org/mockito/MockitoSession.java index c7989be1fc..4afa24341a 100644 --- a/src/main/java/org/mockito/MockitoSession.java +++ b/src/main/java/org/mockito/MockitoSession.java @@ -86,7 +86,6 @@ * * @since 2.7.0 */ -@Incubating @NotExtensible public interface MockitoSession { @@ -101,7 +100,6 @@ public interface MockitoSession { * @param strictness new strictness for this session. * @since 2.15.0 */ - @Incubating void setStrictness(Strictness strictness); /** @@ -123,7 +121,6 @@ public interface MockitoSession { * @see #finishMocking(Throwable) * @since 2.7.0 */ - @Incubating void finishMocking(); /** @@ -140,6 +137,5 @@ public interface MockitoSession { * @see #finishMocking() * @since 2.15.0 */ - @Incubating void finishMocking(Throwable failure); } diff --git a/src/main/java/org/mockito/ScopedMock.java b/src/main/java/org/mockito/ScopedMock.java index 3ef0d9b3d3..ab2b94c76d 100644 --- a/src/main/java/org/mockito/ScopedMock.java +++ b/src/main/java/org/mockito/ScopedMock.java @@ -8,7 +8,6 @@ * Represents a mock with a thread-local explicit scope. Scoped mocks must be closed by the entity * that activates the scoped mock. */ -@Incubating public interface ScopedMock extends AutoCloseable { /** diff --git a/src/main/java/org/mockito/configuration/AnnotationEngine.java b/src/main/java/org/mockito/configuration/AnnotationEngine.java deleted file mode 100644 index 897878169a..0000000000 --- a/src/main/java/org/mockito/configuration/AnnotationEngine.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.configuration; - -import org.mockito.MockitoAnnotations; - -/** - * Configures mock creation logic behind @Mock, @Captor and @Spy annotations - *

    - * If you are interested then see implementations or source code of {@link MockitoAnnotations#openMocks(Object)} - * - *

    This interface can be used to configure a different annotation engine through - * {@link org.mockito.configuration.IMockitoConfiguration}, however this mechanism is being superseded by the new - * {@link org.mockito.plugins plugin} system. - * - *

    - * Note that if it exists on the classpath both a class org.mockito.configuration.MockitoConfiguration - * and a file mockito-extensions/org.mockito.plugins.AnnotationEngine then the implementation of - * org.mockito.configuration.MockitoConfiguration will be chosen instead of the one in the file. - * - * @deprecated Please use {@link org.mockito.plugins.AnnotationEngine} instead, - * this interface will probably be removed in mockito 4. - */ -@Deprecated -public interface AnnotationEngine extends org.mockito.plugins.AnnotationEngine {} diff --git a/src/main/java/org/mockito/configuration/DefaultMockitoConfiguration.java b/src/main/java/org/mockito/configuration/DefaultMockitoConfiguration.java index 2d749c2fbc..43882d49f1 100644 --- a/src/main/java/org/mockito/configuration/DefaultMockitoConfiguration.java +++ b/src/main/java/org/mockito/configuration/DefaultMockitoConfiguration.java @@ -4,7 +4,6 @@ */ package org.mockito.configuration; -import org.mockito.internal.configuration.InjectingAnnotationEngine; import org.mockito.internal.stubbing.defaultanswers.ReturnsEmptyValues; import org.mockito.stubbing.Answer; @@ -22,13 +21,6 @@ public Answer getDefaultAnswer() { return new ReturnsEmptyValues(); } - /* (non-Javadoc) - * @see org.mockito.IMockitoConfiguration#getAnnotationEngine() - */ - public AnnotationEngine getAnnotationEngine() { - return new InjectingAnnotationEngine(); - } - /* (non-Javadoc) * @see org.mockito.configuration.IMockitoConfiguration#cleansStackTrace() */ diff --git a/src/main/java/org/mockito/configuration/IMockitoConfiguration.java b/src/main/java/org/mockito/configuration/IMockitoConfiguration.java index f9690dec3d..53664940ea 100644 --- a/src/main/java/org/mockito/configuration/IMockitoConfiguration.java +++ b/src/main/java/org/mockito/configuration/IMockitoConfiguration.java @@ -44,24 +44,6 @@ public interface IMockitoConfiguration { */ Answer getDefaultAnswer(); - /** - * Configures annotations for mocks. - * - *

    - * This method will have lower priority that the new extension mechanism. - * That is if it exists on the classpath both a class org.mockito.configuration.MockitoConfiguration - * and a file mockito-extensions/org.mockito.plugins.AnnotationEngine then the implementation of - * org.mockito.configuration.MockitoConfiguration will be chosen instead of the one in the file. - * - *

    - * See javadoc for {@link IMockitoConfiguration} - * - * @deprecated Please use the extension mechanism {@link org.mockito.plugins.AnnotationEngine} instead, - * this method will probably be removed in mockito 4. - */ - @Deprecated - AnnotationEngine getAnnotationEngine(); - /** * This should be turned on unless you're a Mockito developer and you wish * to have verbose (read: messy) stack traces that only few understand (eg: diff --git a/src/main/java/org/mockito/exceptions/verification/TooFewActualInvocations.java b/src/main/java/org/mockito/exceptions/verification/TooFewActualInvocations.java index 5ffbb2f83b..bf7c01851d 100644 --- a/src/main/java/org/mockito/exceptions/verification/TooFewActualInvocations.java +++ b/src/main/java/org/mockito/exceptions/verification/TooFewActualInvocations.java @@ -4,10 +4,12 @@ */ package org.mockito.exceptions.verification; +import org.mockito.exceptions.base.MockitoAssertionError; + /** * @since 2.27.5 */ -public class TooFewActualInvocations extends TooLittleActualInvocations { +public class TooFewActualInvocations extends MockitoAssertionError { private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/mockito/exceptions/verification/TooLittleActualInvocations.java b/src/main/java/org/mockito/exceptions/verification/TooLittleActualInvocations.java deleted file mode 100644 index 39bd30f82c..0000000000 --- a/src/main/java/org/mockito/exceptions/verification/TooLittleActualInvocations.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.exceptions.verification; - -import org.mockito.exceptions.base.MockitoAssertionError; - -/** - * @deprecated as of 2.27.5. Please use {@link TooFewActualInvocations} instead. - * @see TooFewActualInvocations - */ -@Deprecated -public class TooLittleActualInvocations extends MockitoAssertionError { - - private static final long serialVersionUID = 1L; - - public TooLittleActualInvocations(String message) { - super(message); - } -} diff --git a/src/main/java/org/mockito/internal/InternalMockHandler.java b/src/main/java/org/mockito/internal/InternalMockHandler.java deleted file mode 100644 index 2fd95498ef..0000000000 --- a/src/main/java/org/mockito/internal/InternalMockHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal; - -import org.mockito.invocation.MockHandler; - -/** - * Deprecated, please use {@link MockHandler}. - *

    - * This class was changed in Mockito in order to tidy up Mockito API - * and make it easier for other frameworks to integrate with Mockito. - * Since this class is internal, e.g. it resides in "org.mockito.internal" package, - * Mockito team can change it without the need for major version release of Mockito. - *

    - * This interface was deprecated in Mockito 2.10.0 and will be deleted in Mockito 4.0. - */ -@Deprecated -public interface InternalMockHandler extends MockHandler {} diff --git a/src/main/java/org/mockito/internal/MockedStaticImpl.java b/src/main/java/org/mockito/internal/MockedStaticImpl.java index 2b7ca0ac15..fb6c16010a 100644 --- a/src/main/java/org/mockito/internal/MockedStaticImpl.java +++ b/src/main/java/org/mockito/internal/MockedStaticImpl.java @@ -61,11 +61,6 @@ public OngoingStubbing when(Verification verification) { return stubbing; } - @Override - public void verify(VerificationMode mode, Verification verification) { - verify(verification, mode); - } - @Override public void verify(Verification verification, VerificationMode mode) { assertNotClosed(); diff --git a/src/main/java/org/mockito/internal/configuration/GlobalConfiguration.java b/src/main/java/org/mockito/internal/configuration/GlobalConfiguration.java index 8f8e037c3b..92f5a54eb4 100644 --- a/src/main/java/org/mockito/internal/configuration/GlobalConfiguration.java +++ b/src/main/java/org/mockito/internal/configuration/GlobalConfiguration.java @@ -6,7 +6,6 @@ import java.io.Serializable; -import org.mockito.configuration.AnnotationEngine; import org.mockito.configuration.DefaultMockitoConfiguration; import org.mockito.configuration.IMockitoConfiguration; import org.mockito.internal.configuration.plugins.Plugins; @@ -47,16 +46,8 @@ public static void validate() { new GlobalConfiguration(); } - public AnnotationEngine getAnnotationEngine() { - return GLOBAL_CONFIGURATION.get().getAnnotationEngine(); - } - public org.mockito.plugins.AnnotationEngine tryGetPluginAnnotationEngine() { - IMockitoConfiguration configuration = GLOBAL_CONFIGURATION.get(); - if (configuration.getClass() == DefaultMockitoConfiguration.class) { - return Plugins.getAnnotationEngine(); - } - return configuration.getAnnotationEngine(); + return Plugins.getAnnotationEngine(); } @Override diff --git a/src/main/java/org/mockito/internal/configuration/IndependentAnnotationEngine.java b/src/main/java/org/mockito/internal/configuration/IndependentAnnotationEngine.java index 06f2d29559..a7950da9f9 100644 --- a/src/main/java/org/mockito/internal/configuration/IndependentAnnotationEngine.java +++ b/src/main/java/org/mockito/internal/configuration/IndependentAnnotationEngine.java @@ -31,8 +31,7 @@ * @see MockitoAnnotations */ @SuppressWarnings("unchecked") -public class IndependentAnnotationEngine - implements AnnotationEngine, org.mockito.configuration.AnnotationEngine { +public class IndependentAnnotationEngine implements AnnotationEngine { private final Map, FieldAnnotationProcessor> annotationProcessorMap = new HashMap<>(); diff --git a/src/main/java/org/mockito/internal/configuration/InjectingAnnotationEngine.java b/src/main/java/org/mockito/internal/configuration/InjectingAnnotationEngine.java index 513d7c9052..ef9933d9d6 100644 --- a/src/main/java/org/mockito/internal/configuration/InjectingAnnotationEngine.java +++ b/src/main/java/org/mockito/internal/configuration/InjectingAnnotationEngine.java @@ -21,8 +21,7 @@ /** * See {@link MockitoAnnotations} */ -public class InjectingAnnotationEngine - implements AnnotationEngine, org.mockito.configuration.AnnotationEngine { +public class InjectingAnnotationEngine implements AnnotationEngine { private final AnnotationEngine delegate = new IndependentAnnotationEngine(); private final AnnotationEngine spyAnnotationEngine = new SpyAnnotationEngine(); diff --git a/src/main/java/org/mockito/internal/configuration/SpyAnnotationEngine.java b/src/main/java/org/mockito/internal/configuration/SpyAnnotationEngine.java index 254031132d..a88ad63b84 100644 --- a/src/main/java/org/mockito/internal/configuration/SpyAnnotationEngine.java +++ b/src/main/java/org/mockito/internal/configuration/SpyAnnotationEngine.java @@ -46,8 +46,7 @@ *

    This engine will fail, if the field is also annotated with incompatible Mockito annotations. */ @SuppressWarnings({"unchecked"}) -public class SpyAnnotationEngine - implements AnnotationEngine, org.mockito.configuration.AnnotationEngine { +public class SpyAnnotationEngine implements AnnotationEngine { @Override public AutoCloseable process(Class context, Object testInstance) { diff --git a/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java b/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java index 559a90d592..254ef2dd44 100644 --- a/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java +++ b/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java @@ -6,9 +6,7 @@ import java.util.HashMap; import java.util.Map; -import org.mockito.internal.creation.instance.InstantiatorProvider2Adapter; import org.mockito.plugins.AnnotationEngine; -import org.mockito.plugins.InstantiatorProvider; import org.mockito.plugins.InstantiatorProvider2; import org.mockito.plugins.MemberAccessor; import org.mockito.plugins.MockMaker; @@ -53,18 +51,8 @@ class DefaultMockitoPlugins implements MockitoPlugins { @Override public T getDefaultPlugin(Class pluginType) { - if (pluginType == InstantiatorProvider.class) { - // the implementation class is not configured via map so that we can reduce duplication - // (ensure that we are adapting the currently configured default implementation for - // InstantiatorProvider2) - String className = DEFAULT_PLUGINS.get(InstantiatorProvider2.class.getName()); - return pluginType.cast( - new InstantiatorProvider2Adapter( - create(InstantiatorProvider2.class, className))); - } else { - String className = DEFAULT_PLUGINS.get(pluginType.getName()); - return create(pluginType, className); - } + String className = DEFAULT_PLUGINS.get(pluginType.getName()); + return create(pluginType, className); } String getDefaultPluginClass(String classOrAlias) { diff --git a/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java b/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java index 3bec0bf13b..b912dcf8ff 100644 --- a/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java +++ b/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java @@ -5,9 +5,7 @@ package org.mockito.internal.configuration.plugins; import java.util.List; -import org.mockito.internal.creation.instance.InstantiatorProviderAdapter; import org.mockito.plugins.AnnotationEngine; -import org.mockito.plugins.InstantiatorProvider; import org.mockito.plugins.InstantiatorProvider2; import org.mockito.plugins.MemberAccessor; import org.mockito.plugins.MockMaker; @@ -47,14 +45,8 @@ class PluginRegistry { new PluginLoader(pluginSwitch).loadPlugins(MockResolver.class); PluginRegistry() { - Object impl = - new PluginLoader(pluginSwitch) - .loadPlugin(InstantiatorProvider2.class, InstantiatorProvider.class); - if (impl instanceof InstantiatorProvider) { - instantiatorProvider = new InstantiatorProviderAdapter((InstantiatorProvider) impl); - } else { - instantiatorProvider = (InstantiatorProvider2) impl; - } + instantiatorProvider = + new PluginLoader(pluginSwitch).loadPlugin(InstantiatorProvider2.class); } /** diff --git a/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyCrossClassLoaderSerializationSupport.java b/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyCrossClassLoaderSerializationSupport.java index 41efec416b..02e8961385 100644 --- a/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyCrossClassLoaderSerializationSupport.java +++ b/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyCrossClassLoaderSerializationSupport.java @@ -21,7 +21,6 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import org.mockito.Incubating; import org.mockito.exceptions.base.MockitoSerializationIssue; import org.mockito.internal.configuration.plugins.Plugins; import org.mockito.internal.creation.settings.CreationSettings; @@ -58,7 +57,6 @@ * @author Brice Dutheil * @since 1.10.0 */ -@Incubating class ByteBuddyCrossClassLoaderSerializationSupport implements Serializable { private static final long serialVersionUID = 7411152578314420778L; private static final String MOCKITO_PROXY_MARKER = "ByteBuddyMockitoProxyMarker"; diff --git a/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyMockMaker.java b/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyMockMaker.java index 35c379c4a6..f6cba2946b 100644 --- a/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyMockMaker.java +++ b/src/main/java/org/mockito/internal/creation/bytebuddy/ByteBuddyMockMaker.java @@ -4,7 +4,6 @@ */ package org.mockito.internal.creation.bytebuddy; -import org.mockito.Incubating; import org.mockito.MockedConstruction; import org.mockito.internal.exceptions.Reporter; import org.mockito.invocation.MockHandler; @@ -65,7 +64,6 @@ public void resetMock(Object mock, MockHandler newHandler, MockCreationSettings } @Override - @Incubating public TypeMockability isTypeMockable(Class type) { return subclassByteBuddyMockMaker.isTypeMockable(type); } diff --git a/src/main/java/org/mockito/internal/creation/bytebuddy/InlineByteBuddyMockMaker.java b/src/main/java/org/mockito/internal/creation/bytebuddy/InlineByteBuddyMockMaker.java index 92593ded9f..acfddfef34 100644 --- a/src/main/java/org/mockito/internal/creation/bytebuddy/InlineByteBuddyMockMaker.java +++ b/src/main/java/org/mockito/internal/creation/bytebuddy/InlineByteBuddyMockMaker.java @@ -4,7 +4,6 @@ */ package org.mockito.internal.creation.bytebuddy; -import org.mockito.Incubating; import org.mockito.MockedConstruction; import org.mockito.creation.instance.Instantiator; import org.mockito.internal.exceptions.Reporter; @@ -15,7 +14,6 @@ import java.util.Optional; import java.util.function.Function; -@Incubating public class InlineByteBuddyMockMaker implements ClassCreatingMockMaker, InlineMockMaker, Instantiator { private final InlineDelegateByteBuddyMockMaker inlineDelegateByteBuddyMockMaker; diff --git a/src/main/java/org/mockito/internal/creation/bytebuddy/InlineDelegateByteBuddyMockMaker.java b/src/main/java/org/mockito/internal/creation/bytebuddy/InlineDelegateByteBuddyMockMaker.java index 7178927cd9..9da65605a5 100644 --- a/src/main/java/org/mockito/internal/creation/bytebuddy/InlineDelegateByteBuddyMockMaker.java +++ b/src/main/java/org/mockito/internal/creation/bytebuddy/InlineDelegateByteBuddyMockMaker.java @@ -5,7 +5,6 @@ package org.mockito.internal.creation.bytebuddy; import net.bytebuddy.agent.ByteBuddyAgent; -import org.mockito.Incubating; import org.mockito.MockedConstruction; import org.mockito.creation.instance.InstantiationException; import org.mockito.creation.instance.Instantiator; @@ -100,7 +99,6 @@ * (also known as HotSwap). All major VM distributions such as HotSpot (OpenJDK), J9 (IBM/Websphere) or Zing (Azul) * support this feature. */ -@Incubating @SuppressSignatureCheck class InlineDelegateByteBuddyMockMaker implements ClassCreatingMockMaker, InlineMockMaker, Instantiator { diff --git a/src/main/java/org/mockito/internal/creation/instance/InstantiationException.java b/src/main/java/org/mockito/internal/creation/instance/InstantiationException.java deleted file mode 100644 index 86b54630af..0000000000 --- a/src/main/java/org/mockito/internal/creation/instance/InstantiationException.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2016 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.creation.instance; - -import org.mockito.exceptions.base.MockitoException; - -/** - * @deprecated since 2.15.4 because this internal class was leaking from the public API. - * For information why deprecated, see {@link org.mockito.plugins.InstantiatorProvider2}. - * Use {@link org.mockito.creation.instance.Instantiator} and {@link org.mockito.creation.instance.InstantiationException} types instead. - *

    - * Exception generated when {@link Instantiator#newInstance(Class)} failed. - */ -@Deprecated -public class InstantiationException extends MockitoException { - - public InstantiationException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/src/main/java/org/mockito/internal/creation/instance/Instantiator.java b/src/main/java/org/mockito/internal/creation/instance/Instantiator.java deleted file mode 100644 index 3760124e1f..0000000000 --- a/src/main/java/org/mockito/internal/creation/instance/Instantiator.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2016 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.creation.instance; - -/** - * @deprecated since 2.15.4 because this internal class was leaking from the public API. - * For more information why deprecated, see {@link org.mockito.plugins.InstantiatorProvider2}. - * Use {@link org.mockito.creation.instance.Instantiator} instead. - *

    - * Provides instances of classes. - */ -@Deprecated -public interface Instantiator { - - /** Creates instance of given class */ - T newInstance(Class cls); -} diff --git a/src/main/java/org/mockito/internal/creation/instance/InstantiatorProvider2Adapter.java b/src/main/java/org/mockito/internal/creation/instance/InstantiatorProvider2Adapter.java deleted file mode 100644 index de764d77a6..0000000000 --- a/src/main/java/org/mockito/internal/creation/instance/InstantiatorProvider2Adapter.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2018 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.creation.instance; - -import org.mockito.mock.MockCreationSettings; -import org.mockito.plugins.InstantiatorProvider; -import org.mockito.plugins.InstantiatorProvider2; - -/** - * Adapts new public API {@link InstantiatorProvider2} onto old, deprecated API {@link InstantiatorProvider} - */ -public class InstantiatorProvider2Adapter implements InstantiatorProvider { - private final InstantiatorProvider2 provider; - - public InstantiatorProvider2Adapter(InstantiatorProvider2 provider) { - this.provider = provider; - } - - @Override - public Instantiator getInstantiator(final MockCreationSettings settings) { - return new Instantiator() { - @Override - public T newInstance(Class cls) { - try { - return provider.getInstantiator(settings).newInstance(cls); - } catch (org.mockito.creation.instance.InstantiationException e) { - throw new InstantiationException(e.getMessage(), e.getCause()); - } - } - }; - } -} diff --git a/src/main/java/org/mockito/internal/creation/instance/InstantiatorProviderAdapter.java b/src/main/java/org/mockito/internal/creation/instance/InstantiatorProviderAdapter.java deleted file mode 100644 index 62e98ab2b9..0000000000 --- a/src/main/java/org/mockito/internal/creation/instance/InstantiatorProviderAdapter.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2018 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.creation.instance; - -import org.mockito.creation.instance.InstantiationException; -import org.mockito.creation.instance.Instantiator; -import org.mockito.mock.MockCreationSettings; -import org.mockito.plugins.InstantiatorProvider; -import org.mockito.plugins.InstantiatorProvider2; - -/** - * Adapts old, deprecated {@link InstantiatorProvider} onto a new public {@link InstantiatorProvider2} API. - */ -public class InstantiatorProviderAdapter implements InstantiatorProvider2 { - private final InstantiatorProvider provider; - - public InstantiatorProviderAdapter(InstantiatorProvider provider) { - this.provider = provider; - } - - @Override - public Instantiator getInstantiator(final MockCreationSettings settings) { - return new Instantiator() { - @Override - public T newInstance(Class cls) { - try { - return provider.getInstantiator(settings).newInstance(cls); - } catch (org.mockito.internal.creation.instance.InstantiationException e) { - throw new InstantiationException(e.getMessage(), e.getCause()); - } - } - }; - } -} diff --git a/src/main/java/org/mockito/internal/creation/proxy/InvokeDefaultProxy.java b/src/main/java/org/mockito/internal/creation/proxy/InvokeDefaultProxy.java new file mode 100644 index 0000000000..41f808ad79 --- /dev/null +++ b/src/main/java/org/mockito/internal/creation/proxy/InvokeDefaultProxy.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.internal.creation.proxy; + +import org.mockito.exceptions.base.MockitoException; +import org.mockito.internal.invocation.RealMethod; +import org.mockito.internal.invocation.SerializableMethod; +import org.mockito.internal.util.Platform; + +import java.io.Serializable; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import static org.mockito.internal.util.StringUtil.join; + +class InvokeDefaultProxy implements ProxyRealMethod { + + private final Method invokeDefault; + + InvokeDefaultProxy() throws Throwable { + invokeDefault = + InvocationHandler.class.getMethod( + "invokeDefault", Object.class, Method.class, Object[].class); + } + + @Override + public RealMethod resolve(Object proxy, Method method, Object[] args) { + return new InvokeDefaultRealMethod(proxy, method, args); + } + + private class InvokeDefaultRealMethod implements RealMethod, Serializable { + + private static final long serialVersionUID = -1; + + private final Object proxy; + private final SerializableMethod serializableMethod; + private final Object[] args; + + private InvokeDefaultRealMethod(Object proxy, Method method, Object[] args) { + this.proxy = proxy; + this.serializableMethod = new SerializableMethod(method); + this.args = args; + } + + @Override + public boolean isInvokable() { + return true; + } + + @Override + public Object invoke() throws Throwable { + try { + return invokeDefault.invoke(null, proxy, serializableMethod.getJavaMethod(), args); + } catch (InvocationTargetException e) { + throw e.getTargetException(); + } catch (IllegalAccessException | IllegalArgumentException e) { + throw new MockitoException( + join( + "Failed to access default method or invoked method with illegal arguments", + "", + "Method " + + serializableMethod.getJavaMethod() + + " could not be delegated, this is not supposed to happen", + Platform.describe()), + e); + } + } + } +} diff --git a/src/main/java/org/mockito/internal/creation/proxy/MethodHandleProxy.java b/src/main/java/org/mockito/internal/creation/proxy/MethodHandleProxy.java new file mode 100644 index 0000000000..068f7233a5 --- /dev/null +++ b/src/main/java/org/mockito/internal/creation/proxy/MethodHandleProxy.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2021 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.internal.creation.proxy; + +import org.mockito.internal.SuppressSignatureCheck; +import org.mockito.internal.invocation.RealMethod; + +import java.io.Serializable; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + +@SuppressSignatureCheck +class MethodHandleProxy implements ProxyRealMethod { + + private final MethodHandles.Lookup lookup; + + MethodHandleProxy() throws Throwable { + lookup = MethodHandles.lookup(); + } + + @Override + public RealMethod resolve(Object proxy, Method method, Object[] args) { + try { + return new MethodHandleRealMethod( + lookup.findSpecial( + method.getDeclaringClass(), + method.getName(), + MethodType.methodType( + method.getReturnType(), method.getParameterTypes()), + method.getDeclaringClass()) + .bindTo(proxy), + args); + } catch (Throwable ignored) { + return RealMethod.IsIllegal.INSTANCE; + } + } + + @SuppressSignatureCheck + static class LegacyVersion implements ProxyRealMethod { + + private final Constructor constructor; + + LegacyVersion() throws Throwable { + try { + Class.forName("java.lang.Module"); + throw new RuntimeException("Must not be used when modules are available"); + } catch (ClassNotFoundException ignored) { + } + constructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); + constructor.setAccessible(true); + } + + @Override + public RealMethod resolve(Object proxy, Method method, Object[] args) { + try { + return new MethodHandleRealMethod( + constructor + .newInstance(method.getDeclaringClass()) + .in(method.getDeclaringClass()) + .unreflectSpecial(method, method.getDeclaringClass()) + .bindTo(proxy), + args); + } catch (Throwable ignored) { + return RealMethod.IsIllegal.INSTANCE; + } + } + } + + @SuppressSignatureCheck + private static class MethodHandleRealMethod implements RealMethod, Serializable { + + private static final long serialVersionUID = -1; + + private final MethodHandle handle; + private final Object[] args; + + private MethodHandleRealMethod(MethodHandle handle, Object[] args) { + this.handle = handle; + this.args = args; + } + + @Override + public boolean isInvokable() { + return true; + } + + @Override + public Object invoke() throws Throwable { + return handle.invokeWithArguments(args); + } + } +} diff --git a/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java b/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java index 96770d34a7..faa97e849b 100644 --- a/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java +++ b/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java @@ -7,13 +7,15 @@ import org.mockito.exceptions.base.MockitoException; import org.mockito.internal.debugging.LocationImpl; import org.mockito.internal.invocation.RealMethod; -import org.mockito.internal.invocation.SerializableMethod; import org.mockito.internal.util.Platform; import org.mockito.invocation.MockHandler; import org.mockito.mock.MockCreationSettings; import org.mockito.plugins.MockMaker; -import java.lang.reflect.*; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; import java.util.concurrent.atomic.AtomicReference; import static org.mockito.internal.invocation.DefaultInvocationFactory.createInvocation; @@ -27,36 +29,53 @@ public class ProxyMockMaker implements MockMaker { private static final Object[] EMPTY = new Object[0]; - private final Method invokeDefault; - - public ProxyMockMaker() { - Method m; - try { - m = - InvocationHandler.class.getMethod( - "invokeDefault", Object.class, Method.class, Object[].class); - } catch (NoSuchMethodException ignored) { - m = null; - } - invokeDefault = m; - } + private final ProxyRealMethod proxyRealMethod = ProxyRealMethod.make(); @Override @SuppressWarnings("unchecked") public T createMock(MockCreationSettings settings, MockHandler handler) { - Class[] ifaces = new Class[settings.getExtraInterfaces().size() + 1]; - ifaces[0] = settings.getTypeToMock(); - int index = 1; + boolean object = settings.getTypeToMock() == Object.class; + Class[] ifaces = new Class[settings.getExtraInterfaces().size() + (object ? 0 : 1)]; + int index = 0; + if (!object) { + ifaces[index++] = settings.getTypeToMock(); + } + ClassLoader classLoader = settings.getTypeToMock().getClassLoader(); for (Class iface : settings.getExtraInterfaces()) { ifaces[index++] = iface; + classLoader = resolveCommonClassLoader(classLoader, iface); } return (T) Proxy.newProxyInstance( - settings.getTypeToMock().getClassLoader(), + resolveCommonClassLoader(classLoader, ProxyMockMaker.class), ifaces, new MockInvocationHandler(handler, settings)); } + private static ClassLoader resolveCommonClassLoader(ClassLoader mostSpecific, Class type) { + if (mostSpecific == null) { + return type.getClassLoader(); + } + ClassLoader candidate = type.getClassLoader(); + if (candidate == null || mostSpecific == candidate) { + return mostSpecific; + } + while (candidate != null) { + if (candidate == mostSpecific) { + return type.getClassLoader(); + } + candidate = candidate.getParent(); + } + candidate = mostSpecific; + while (candidate != null) { + if (candidate == type.getClassLoader()) { + return mostSpecific; + } + candidate = candidate.getParent(); + } + return new CommonClassLoader(mostSpecific, type.getClassLoader()); + } + @Override public MockHandler getHandler(Object mock) { if (!Proxy.isProxyClass(mock.getClass())) { @@ -79,7 +98,7 @@ public TypeMockability isTypeMockable(Class type) { return new TypeMockability() { @Override public boolean mockable() { - return type.isInterface(); + return type.isInterface() || type == Object.class; } @Override @@ -126,10 +145,10 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl } } RealMethod realMethod; - if (invokeDefault == null || Modifier.isAbstract(method.getModifiers())) { + if (Modifier.isAbstract(method.getModifiers())) { realMethod = RealMethod.IsIllegal.INSTANCE; } else { - realMethod = new RealDefaultMethod(proxy, method, args); + realMethod = proxyRealMethod.resolve(proxy, method, args); } return handler.get() .handle( @@ -138,39 +157,22 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl } } - private class RealDefaultMethod implements RealMethod { + private static class CommonClassLoader extends ClassLoader { - private final Object proxy; - private final SerializableMethod serializableMethod; - private final Object[] args; + private final ClassLoader left, right; - private RealDefaultMethod(Object proxy, Method method, Object[] args) { - this.proxy = proxy; - this.serializableMethod = new SerializableMethod(method); - this.args = args; - } - - @Override - public boolean isInvokable() { - return true; + private CommonClassLoader(ClassLoader left, ClassLoader right) { + super(null); + this.left = left; + this.right = right; } @Override - public Object invoke() throws Throwable { + public Class loadClass(String name) throws ClassNotFoundException { try { - return invokeDefault.invoke(null, proxy, serializableMethod.getJavaMethod(), args); - } catch (InvocationTargetException e) { - throw e.getTargetException(); - } catch (IllegalAccessException | IllegalArgumentException e) { - throw new MockitoException( - join( - "Failed to access default method or invoked method with illegal arguments", - "", - "Method " - + serializableMethod.getJavaMethod() - + " could not be delegated, this is not supposed to happen", - Platform.describe()), - e); + return left.loadClass(name); + } catch (ClassNotFoundException ignored) { + return right.loadClass(name); } } } diff --git a/src/main/java/org/mockito/internal/creation/proxy/ProxyRealMethod.java b/src/main/java/org/mockito/internal/creation/proxy/ProxyRealMethod.java new file mode 100644 index 0000000000..a6f140de1d --- /dev/null +++ b/src/main/java/org/mockito/internal/creation/proxy/ProxyRealMethod.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.internal.creation.proxy; + +import org.mockito.internal.invocation.RealMethod; + +import java.lang.reflect.Method; + +interface ProxyRealMethod { + + RealMethod resolve(Object proxy, Method method, Object[] args); + + static ProxyRealMethod make() { + // From Java 16 on, there is a standard API for invoking a default method from an invocation + // handler. + try { + return new InvokeDefaultProxy(); + } catch (Throwable ignored) { + } + // Java 8 does not yet allow special method invocation via proxies. Therefore, we need to + // deep reflect what is no longer allowed after Java 8. + try { + return new MethodHandleProxy.LegacyVersion(); + } catch (Throwable ignored) { + } + // Between Java 9 and 15, a default method can be invoked via regular method handle + // invocation. + try { + return new MethodHandleProxy(); + } catch (Throwable ignored) { + } + // Nothing works, this might happen on Android where method handles are not supported on old + // versions. Default methods cannot be invoked. + return (proxy, method, args) -> RealMethod.IsIllegal.INSTANCE; + } +} diff --git a/src/main/java/org/mockito/internal/debugging/MockitoDebuggerImpl.java b/src/main/java/org/mockito/internal/debugging/MockitoDebuggerImpl.java deleted file mode 100644 index 7300b20102..0000000000 --- a/src/main/java/org/mockito/internal/debugging/MockitoDebuggerImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.debugging; - -import static java.util.Arrays.asList; - -import java.util.List; - -import org.mockito.MockitoDebugger; -import org.mockito.internal.invocation.UnusedStubsFinder; -import org.mockito.internal.invocation.finder.AllInvocationsFinder; -import org.mockito.invocation.Invocation; - -public class MockitoDebuggerImpl implements MockitoDebugger { - - private final UnusedStubsFinder unusedStubsFinder = new UnusedStubsFinder(); - - /** - * TODO: when MockitoDebugger is deleted, delete this implementation, too - */ - @Deprecated - public String printInvocations(Object... mocks) { - String out = ""; - List invocations = AllInvocationsFinder.find(asList(mocks)); - out += line("********************************"); - out += line("*** Mockito interactions log ***"); - out += line("********************************"); - for (Invocation i : invocations) { - out += line(i.toString()); - out += line(" invoked: " + i.getLocation()); - if (i.stubInfo() != null) { - out += line(" stubbed: " + i.stubInfo().stubbedAt()); - } - } - - invocations = unusedStubsFinder.find(asList(mocks)); - if (invocations.isEmpty()) { - return print(out); - } - out += line("********************************"); - out += line("*** Unused stubs ***"); - out += line("********************************"); - - for (Invocation i : invocations) { - out += line(i.toString()); - out += line(" stubbed: " + i.getLocation()); - } - return print(out); - } - - private String line(String text) { - return text + "\n"; - } - - private String print(String out) { - System.out.println(out); - return out; - } -} diff --git a/src/main/java/org/mockito/internal/debugging/WarningsCollector.java b/src/main/java/org/mockito/internal/debugging/WarningsCollector.java deleted file mode 100644 index 5c6b8f0b46..0000000000 --- a/src/main/java/org/mockito/internal/debugging/WarningsCollector.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.debugging; - -import java.util.LinkedList; -import java.util.List; - -import org.mockito.internal.invocation.InvocationMatcher; -import org.mockito.internal.invocation.UnusedStubsFinder; -import org.mockito.internal.invocation.finder.AllInvocationsFinder; -import org.mockito.invocation.Invocation; - -@Deprecated -public class WarningsCollector { - - private final List createdMocks; - - public WarningsCollector() { - createdMocks = new LinkedList<>(); - } - - public String getWarnings() { - List unused = new UnusedStubsFinder().find(createdMocks); - List all = AllInvocationsFinder.find(createdMocks); - List allInvocationMatchers = InvocationMatcher.createFrom(all); - - return new WarningsPrinterImpl(unused, allInvocationMatchers, false).print(); - } -} diff --git a/src/main/java/org/mockito/internal/exceptions/Reporter.java b/src/main/java/org/mockito/internal/exceptions/Reporter.java index b22e128616..f91c6e1f0d 100644 --- a/src/main/java/org/mockito/internal/exceptions/Reporter.java +++ b/src/main/java/org/mockito/internal/exceptions/Reporter.java @@ -243,11 +243,11 @@ public static MockitoException invalidUseOfMatchers( "", "This exception may occur if matchers are combined with raw values:", " //incorrect:", - " someMethod(anyObject(), \"raw String\");", + " someMethod(any(), \"raw String\");", "When using matchers, all arguments have to be provided by matchers.", "For example:", " //correct:", - " someMethod(anyObject(), eq(\"String by matcher\"));", + " someMethod(any(), eq(\"String by matcher\"));", "", "For more info see javadoc for Matchers class.", "")); @@ -626,7 +626,7 @@ public static MockitoException misplacedArgumentMatcher(List l "You cannot use argument matchers outside of verification or stubbing.", "Examples of correct usage of argument matchers:", " when(mock.get(anyInt())).thenReturn(null);", - " doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());", + " doThrow(new RuntimeException()).when(mock).someVoidMethod(any());", " verify(mock).someMethod(contains(\"foo\"))", "", "This message may appear after an NullPointerException if the last matcher is returning an object ", diff --git a/src/main/java/org/mockito/internal/invocation/UnusedStubsFinder.java b/src/main/java/org/mockito/internal/invocation/UnusedStubsFinder.java deleted file mode 100644 index fd8efa69c9..0000000000 --- a/src/main/java/org/mockito/internal/invocation/UnusedStubsFinder.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.invocation; - -import java.util.LinkedList; -import java.util.List; - -import org.mockito.internal.util.MockUtil; -import org.mockito.invocation.Invocation; -import org.mockito.stubbing.Stubbing; - -@Deprecated -public class UnusedStubsFinder { - - /** - * Finds all unused stubs for given mocks - * - * @param mocks full list of mocks - */ - public List find(List mocks) { - List unused = new LinkedList<>(); - for (Object mock : mocks) { - List fromSingleMock = - MockUtil.getInvocationContainer(mock).getStubbingsDescending(); - for (Stubbing s : fromSingleMock) { - if (!s.wasUsed()) { - unused.add(s.getInvocation()); - } - } - } - return unused; - } -} diff --git a/src/main/java/org/mockito/internal/junit/util/JUnitFailureHacker.java b/src/main/java/org/mockito/internal/junit/util/JUnitFailureHacker.java deleted file mode 100644 index d6e784c647..0000000000 --- a/src/main/java/org/mockito/internal/junit/util/JUnitFailureHacker.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.internal.junit.util; - -import java.lang.reflect.Field; - -import org.junit.runner.notification.Failure; -import org.mockito.internal.configuration.plugins.Plugins; -import org.mockito.internal.exceptions.ExceptionIncludingMockitoWarnings; -import org.mockito.plugins.MemberAccessor; - -@Deprecated -public class JUnitFailureHacker { - - public void appendWarnings(Failure failure, String warnings) { - if (isEmpty(warnings)) { - return; - } - // TODO: this has to protect the use in case jUnit changes and this internal state logic - // fails - Throwable throwable = (Throwable) getInternalState(failure, "fThrownException"); - - String newMessage = - "contains both: actual test failure *and* Mockito warnings.\n" - + warnings - + "\n *** The actual failure is because of: ***\n"; - - ExceptionIncludingMockitoWarnings e = - new ExceptionIncludingMockitoWarnings(newMessage, throwable); - e.setStackTrace(throwable.getStackTrace()); - setInternalState(failure, "fThrownException", e); - } - - private boolean isEmpty(String warnings) { - return warnings == null || "".equals(warnings); // isEmpty() is in JDK 6+ - } - - private static Object getInternalState(Object target, String field) { - MemberAccessor accessor = Plugins.getMemberAccessor(); - Class c = target.getClass(); - try { - Field f = getFieldFromHierarchy(c, field); - return accessor.get(f, target); - } catch (Exception e) { - throw new RuntimeException( - "Unable to get internal state on a private field. Please report to mockito mailing list.", - e); - } - } - - private static void setInternalState(Object target, String field, Object value) { - MemberAccessor accessor = Plugins.getMemberAccessor(); - Class c = target.getClass(); - try { - Field f = getFieldFromHierarchy(c, field); - accessor.set(f, target, value); - } catch (Exception e) { - throw new RuntimeException( - "Unable to set internal state on a private field. Please report to mockito mailing list.", - e); - } - } - - private static Field getFieldFromHierarchy(Class clazz, String field) { - Field f = getField(clazz, field); - while (f == null && clazz != Object.class) { - clazz = clazz.getSuperclass(); - f = getField(clazz, field); - } - if (f == null) { - throw new RuntimeException( - "You want me to get this field: '" - + field - + "' on this class: '" - + clazz.getSimpleName() - + "' but this field is not declared within the hierarchy of this class!"); - } - return f; - } - - private static Field getField(Class clazz, String field) { - try { - return clazz.getDeclaredField(field); - } catch (NoSuchFieldException e) { - return null; - } - } -} diff --git a/src/main/java/org/mockito/internal/verification/AtMost.java b/src/main/java/org/mockito/internal/verification/AtMost.java index 57dedc4c66..72c0d00275 100644 --- a/src/main/java/org/mockito/internal/verification/AtMost.java +++ b/src/main/java/org/mockito/internal/verification/AtMost.java @@ -51,4 +51,9 @@ private void removeAlreadyVerified(List invocations) { } } } + + @Override + public String toString() { + return "Wanted invocations count: at most " + maxNumberOfInvocations; + } } diff --git a/src/main/java/org/mockito/internal/verification/Only.java b/src/main/java/org/mockito/internal/verification/Only.java index 64ec47d5ab..aea8981d10 100644 --- a/src/main/java/org/mockito/internal/verification/Only.java +++ b/src/main/java/org/mockito/internal/verification/Only.java @@ -34,4 +34,9 @@ public void verify(VerificationData data) { } markVerified(chunk.get(0), target); } + + @Override + public String toString() { + return "Wanted invocations count: 1 and no other method invoked"; + } } diff --git a/src/main/java/org/mockito/internal/verification/VerificationDataImpl.java b/src/main/java/org/mockito/internal/verification/VerificationDataImpl.java index 4746130abb..a566ab5eaa 100644 --- a/src/main/java/org/mockito/internal/verification/VerificationDataImpl.java +++ b/src/main/java/org/mockito/internal/verification/VerificationDataImpl.java @@ -36,11 +36,6 @@ public MatchableInvocation getTarget() { return wanted; } - @Override - public InvocationMatcher getWanted() { - return wanted; - } - private void assertWantedIsVerifiable() { if (wanted == null) { return; diff --git a/src/main/java/org/mockito/internal/verification/api/VerificationData.java b/src/main/java/org/mockito/internal/verification/api/VerificationData.java index bc699209ff..f84f71e634 100644 --- a/src/main/java/org/mockito/internal/verification/api/VerificationData.java +++ b/src/main/java/org/mockito/internal/verification/api/VerificationData.java @@ -6,7 +6,6 @@ import java.util.List; -import org.mockito.internal.invocation.InvocationMatcher; import org.mockito.invocation.Invocation; import org.mockito.invocation.MatchableInvocation; @@ -39,13 +38,4 @@ public interface VerificationData { * @since 2.2.12 */ MatchableInvocation getTarget(); - - /** - * @deprecated - This internal method leaks internal class InvocationMatcher. - * Please use {@link org.mockito.internal.verification.api.VerificationData#getTarget()} instead. - * - * Deprecated since 2.2.12 - */ - @Deprecated - InvocationMatcher getWanted(); } diff --git a/src/main/java/org/mockito/invocation/InvocationContainer.java b/src/main/java/org/mockito/invocation/InvocationContainer.java index 9f0e82a2ee..d12df44e53 100644 --- a/src/main/java/org/mockito/invocation/InvocationContainer.java +++ b/src/main/java/org/mockito/invocation/InvocationContainer.java @@ -4,7 +4,6 @@ */ package org.mockito.invocation; -import org.mockito.Incubating; import org.mockito.NotExtensible; /** @@ -17,5 +16,4 @@ * @since 2.10.0 */ @NotExtensible -@Incubating public interface InvocationContainer {} diff --git a/src/main/java/org/mockito/invocation/InvocationFactory.java b/src/main/java/org/mockito/invocation/InvocationFactory.java index 3b2ef4c0c2..c28ef716b4 100644 --- a/src/main/java/org/mockito/invocation/InvocationFactory.java +++ b/src/main/java/org/mockito/invocation/InvocationFactory.java @@ -6,9 +6,7 @@ import java.io.Serializable; import java.lang.reflect.Method; -import java.util.concurrent.Callable; -import org.mockito.Incubating; import org.mockito.MockitoFramework; import org.mockito.mock.MockCreationSettings; @@ -24,36 +22,8 @@ * * @since 2.10.0 */ -@Incubating public interface InvocationFactory { - /** - * @deprecated Use {@link #createInvocation(Object, MockCreationSettings, Method, RealMethodBehavior, Object...)} instead. - * - * Why deprecated? We found use cases where we need to handle Throwable and ensure correct stack trace filtering - * (removing Mockito internals from the stack trace). Hence the introduction of {@link RealMethodBehavior}. - * - * Creates instance of an {@link Invocation} object. - * This method is useful for framework integrators to programmatically simulate method calls on mocks using {@link MockHandler}. - * It enables advanced framework integrations. - * - * @param target the mock object the method is invoked on. - * @param settings creation settings of the mock object. - * @param method java method invoked on mock. - * @param realMethod real method behavior. Needed for spying / invoking real behavior on mock objects. - * @param args the java method arguments - * - * @return invocation instance - * @since 2.10.0 - */ - @Deprecated - Invocation createInvocation( - Object target, - MockCreationSettings settings, - Method method, - Callable realMethod, - Object... args); - /** * Behavior of the real method. * @@ -77,7 +47,6 @@ interface RealMethodBehavior extends Serializable { * @return invocation instance * @since 2.14.0 */ - @Incubating Invocation createInvocation( Object target, MockCreationSettings settings, diff --git a/src/main/java/org/mockito/invocation/MockHandler.java b/src/main/java/org/mockito/invocation/MockHandler.java index d20b76b2e6..56a0004ad4 100644 --- a/src/main/java/org/mockito/invocation/MockHandler.java +++ b/src/main/java/org/mockito/invocation/MockHandler.java @@ -6,7 +6,6 @@ import java.io.Serializable; -import org.mockito.Incubating; import org.mockito.MockSettings; import org.mockito.mock.MockCreationSettings; @@ -44,7 +43,6 @@ public interface MockHandler extends Serializable { * @return read-only settings of the mock * @since 2.10.0 */ - @Incubating MockCreationSettings getMockSettings(); /** @@ -60,6 +58,5 @@ public interface MockHandler extends Serializable { * The container is not part of the public API, please do not cast it or provide custom implementations. * @since 2.10.0 */ - @Incubating InvocationContainer getInvocationContainer(); } diff --git a/src/main/java/org/mockito/junit/MockitoJUnit.java b/src/main/java/org/mockito/junit/MockitoJUnit.java index 825303a510..bbe61308fd 100644 --- a/src/main/java/org/mockito/junit/MockitoJUnit.java +++ b/src/main/java/org/mockito/junit/MockitoJUnit.java @@ -5,7 +5,6 @@ package org.mockito.junit; import org.junit.rules.TestRule; -import org.mockito.Incubating; import org.mockito.internal.configuration.plugins.Plugins; import org.mockito.internal.junit.JUnitRule; import org.mockito.internal.junit.JUnitTestRule; @@ -56,7 +55,6 @@ public static MockitoTestRule testRule(Object testInstance) { * @return the rule instance * @since 2.1.0 */ - @Incubating public static VerificationCollector collector() { return new VerificationCollectorImpl(); } diff --git a/src/main/java/org/mockito/junit/MockitoRule.java b/src/main/java/org/mockito/junit/MockitoRule.java index 0869d012ac..10a2735e92 100644 --- a/src/main/java/org/mockito/junit/MockitoRule.java +++ b/src/main/java/org/mockito/junit/MockitoRule.java @@ -5,7 +5,6 @@ package org.mockito.junit; import org.junit.rules.MethodRule; -import org.mockito.Incubating; import org.mockito.MockSettings; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -146,6 +145,5 @@ public interface MockitoRule extends MethodRule { * * @since 2.3.0 */ - @Incubating MockitoRule strictness(Strictness strictness); } diff --git a/src/main/java/org/mockito/junit/MockitoTestRule.java b/src/main/java/org/mockito/junit/MockitoTestRule.java index 33c15e498c..5efc690a76 100644 --- a/src/main/java/org/mockito/junit/MockitoTestRule.java +++ b/src/main/java/org/mockito/junit/MockitoTestRule.java @@ -5,7 +5,6 @@ package org.mockito.junit; import org.junit.rules.TestRule; -import org.mockito.Incubating; import org.mockito.quality.Strictness; /** @@ -28,6 +27,5 @@ public interface MockitoTestRule extends TestRule { * * @since 3.3.0 */ - @Incubating MockitoTestRule strictness(Strictness strictness); } diff --git a/src/main/java/org/mockito/junit/VerificationCollector.java b/src/main/java/org/mockito/junit/VerificationCollector.java index 08962b58f3..c214b5dd22 100644 --- a/src/main/java/org/mockito/junit/VerificationCollector.java +++ b/src/main/java/org/mockito/junit/VerificationCollector.java @@ -5,7 +5,6 @@ package org.mockito.junit; import org.junit.rules.TestRule; -import org.mockito.Incubating; import org.mockito.exceptions.base.MockitoAssertionError; /** @@ -37,7 +36,6 @@ * @see org.mockito.Mockito#verify(Object, org.mockito.verification.VerificationMode) * @since 2.1.0 */ -@Incubating public interface VerificationCollector extends TestRule { /** @@ -70,7 +68,6 @@ public interface VerificationCollector extends TestRule { * @throws MockitoAssertionError If there were failed verifications * @since 2.1.0 */ - @Incubating void collectAndReport() throws MockitoAssertionError; /** @@ -96,6 +93,5 @@ public interface VerificationCollector extends TestRule { * @return this * @since 2.1.0 */ - @Incubating VerificationCollector assertLazily(); } diff --git a/src/main/java/org/mockito/listeners/VerificationListener.java b/src/main/java/org/mockito/listeners/VerificationListener.java index c42be31752..9f3aaae548 100644 --- a/src/main/java/org/mockito/listeners/VerificationListener.java +++ b/src/main/java/org/mockito/listeners/VerificationListener.java @@ -4,7 +4,6 @@ */ package org.mockito.listeners; -import org.mockito.Incubating; import org.mockito.verification.VerificationEvent; /** @@ -12,7 +11,6 @@ *

    * For this to happen, it must be registered using {@link org.mockito.internal.progress.MockingProgress#addListener(MockitoListener)}. */ -@Incubating public interface VerificationListener extends MockitoListener { /** * Called after a verification happened. diff --git a/src/main/java/org/mockito/listeners/VerificationStartedEvent.java b/src/main/java/org/mockito/listeners/VerificationStartedEvent.java index b2f4a00dd8..0eb72ce410 100644 --- a/src/main/java/org/mockito/listeners/VerificationStartedEvent.java +++ b/src/main/java/org/mockito/listeners/VerificationStartedEvent.java @@ -4,15 +4,12 @@ */ package org.mockito.listeners; -import org.mockito.Incubating; - /** * The instance of this class is passed to {@link VerificationStartedListener}. * For all the details, including how and why to use this API, see {@link VerificationStartedListener}. * * @since 2.11.0 */ -@Incubating public interface VerificationStartedEvent { /** @@ -27,7 +24,6 @@ public interface VerificationStartedEvent { * @param mock to be used for verification. * @since 2.11.0 */ - @Incubating void setMock(Object mock); /** @@ -37,6 +33,5 @@ public interface VerificationStartedEvent { * * @since 2.11.0 */ - @Incubating Object getMock(); } diff --git a/src/main/java/org/mockito/listeners/VerificationStartedListener.java b/src/main/java/org/mockito/listeners/VerificationStartedListener.java index f555125557..d942a1cc3c 100644 --- a/src/main/java/org/mockito/listeners/VerificationStartedListener.java +++ b/src/main/java/org/mockito/listeners/VerificationStartedListener.java @@ -4,8 +4,6 @@ */ package org.mockito.listeners; -import org.mockito.Incubating; - /** * This listener gets notified when the user starts verification. * It allows to replace the mock object for verification. @@ -54,7 +52,6 @@ * * @since 2.11.0 */ -@Incubating public interface VerificationStartedListener { /** @@ -64,6 +61,5 @@ public interface VerificationStartedListener { * @param event object that allows to identify and replace mock for verification. * @since 2.11.0 */ - @Incubating void onVerificationStarted(VerificationStartedEvent event); } diff --git a/src/main/java/org/mockito/mock/MockCreationSettings.java b/src/main/java/org/mockito/mock/MockCreationSettings.java index 726428660b..23d5418a14 100644 --- a/src/main/java/org/mockito/mock/MockCreationSettings.java +++ b/src/main/java/org/mockito/mock/MockCreationSettings.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Set; -import org.mockito.Incubating; import org.mockito.MockSettings; import org.mockito.NotExtensible; import org.mockito.listeners.InvocationListener; @@ -90,7 +89,6 @@ public interface MockCreationSettings { * * @since 2.11.0 */ - @Incubating List getVerificationStartedListeners(); /** @@ -98,7 +96,6 @@ public interface MockCreationSettings { * * @since 1.10.12 */ - @Incubating boolean isUsingConstructor(); /** @@ -110,7 +107,6 @@ public interface MockCreationSettings { * * @since 2.7.14 */ - @Incubating Object[] getConstructorArgs(); /** @@ -119,7 +115,6 @@ public interface MockCreationSettings { * @return the outer class instance used for creation of the mock object via the constructor. * @since 1.10.12 */ - @Incubating Object getOuterClassInstance(); /** @@ -128,6 +123,5 @@ public interface MockCreationSettings { * * @since 2.20.0 */ - @Incubating boolean isLenient(); } diff --git a/src/main/java/org/mockito/mock/SerializableMode.java b/src/main/java/org/mockito/mock/SerializableMode.java index 790fc04f1d..41a5f36796 100644 --- a/src/main/java/org/mockito/mock/SerializableMode.java +++ b/src/main/java/org/mockito/mock/SerializableMode.java @@ -4,12 +4,9 @@ */ package org.mockito.mock; -import org.mockito.Incubating; - /** * Mock serializable style. */ -@Incubating public enum SerializableMode { /** @@ -25,6 +22,5 @@ public enum SerializableMode { /** * Useful if the mock is deserialized in a different classloader / vm. */ - @Incubating ACROSS_CLASSLOADERS } diff --git a/src/main/java/org/mockito/plugins/InlineMockMaker.java b/src/main/java/org/mockito/plugins/InlineMockMaker.java index f271d5203a..08fab59ae3 100644 --- a/src/main/java/org/mockito/plugins/InlineMockMaker.java +++ b/src/main/java/org/mockito/plugins/InlineMockMaker.java @@ -4,7 +4,6 @@ */ package org.mockito.plugins; -import org.mockito.Incubating; import org.mockito.MockitoFramework; /** @@ -26,7 +25,6 @@ * * @since 2.25.0 */ -@Incubating public interface InlineMockMaker extends MockMaker { /** @@ -36,7 +34,6 @@ public interface InlineMockMaker extends MockMaker { * @param mock the mock instance whose internal state is to be cleaned. * @since 2.25.0 */ - @Incubating void clearMock(Object mock); /** @@ -45,6 +42,5 @@ public interface InlineMockMaker extends MockMaker { * * @since 2.25.0 */ - @Incubating void clearAllMocks(); } diff --git a/src/main/java/org/mockito/plugins/InstantiatorProvider.java b/src/main/java/org/mockito/plugins/InstantiatorProvider.java deleted file mode 100644 index 354b87b082..0000000000 --- a/src/main/java/org/mockito/plugins/InstantiatorProvider.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.plugins; - -import org.mockito.internal.creation.instance.Instantiator; -import org.mockito.mock.MockCreationSettings; - -/** - * @deprecated since 2.15.4 because this internal class was leaking from the public API. - * For more information why deprecated, see {@link org.mockito.plugins.InstantiatorProvider2} and - * Issue 1303 - * - *

    - * Mockito will invoke this interface in order to fetch an instance instantiator provider. - *

    - * - *

    - * By default, an internal byte-buddy/asm/objenesis based implementation is used. - *

    - * - *

    Using the extension point

    - * - *

    - * The plugin mechanism of mockito works in a similar way as the - * {@link java.util.ServiceLoader}, however instead of looking in the META-INF - * directory, Mockito will look in mockito-extensions directory. - * The reason for that is that Android SDK strips jar from the META-INF - * directory when creating an APK. - *

    - * - *
      - *
    1. The implementation itself, for example - * org.awesome.mockito.AwesomeInstantiatorProvider that implements the - * InstantiatorProvider.
    2. - *
    3. A file "mockito-extensions/org.mockito.plugins.InstantiatorProvider". - * The content of this file is exactly a one line with the qualified - * name: org.awesome.mockito.AwesomeInstantiatorProvider.
    4. - *

    - * - *

    - * Note that if several mockito-extensions/org.mockito.plugins.InstantiatorProvider - * files exists in the classpath, Mockito will only use the first returned by the standard - * {@link ClassLoader#getResource} mechanism. - *

    - * So just create a custom implementation of {@link InstantiatorProvider} and place the - * qualified name in the following file - * mockito-extensions/org.mockito.plugins.InstantiatorProvider. - *

    - *

    - * This class is deprecated and was replaced by - * {@link org.mockito.plugins.InstantiatorProvider2}. Hence if there is both a - * mockito-extensions/org.mockito.plugins.InstantiatorProvider and - * mockito-extensions/org.mockito.plugins.InstantiatorProvider2 the second one - * takes preference. - *

    - * - * @since 2.0.31 - */ -@Deprecated -public interface InstantiatorProvider { - - /** - * @deprecated, see {@link InstantiatorProvider}. - * - * Returns an instantiator, used to create new class instances. - */ - @Deprecated - Instantiator getInstantiator(MockCreationSettings settings); -} diff --git a/src/main/java/org/mockito/plugins/MemberAccessor.java b/src/main/java/org/mockito/plugins/MemberAccessor.java index caccb656da..6a39d6c93f 100644 --- a/src/main/java/org/mockito/plugins/MemberAccessor.java +++ b/src/main/java/org/mockito/plugins/MemberAccessor.java @@ -4,8 +4,6 @@ */ package org.mockito.plugins; -import org.mockito.Incubating; - import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -15,7 +13,6 @@ * A member accessor is responsible for invoking methods, constructors and for setting * and reading field values. */ -@Incubating public interface MemberAccessor { Object newInstance(Constructor constructor, Object... arguments) diff --git a/src/main/java/org/mockito/plugins/MockMaker.java b/src/main/java/org/mockito/plugins/MockMaker.java index 7e06e32e5f..93a87ef0a5 100644 --- a/src/main/java/org/mockito/plugins/MockMaker.java +++ b/src/main/java/org/mockito/plugins/MockMaker.java @@ -4,7 +4,6 @@ */ package org.mockito.plugins; -import org.mockito.Incubating; import org.mockito.MockedConstruction; import org.mockito.exceptions.base.MockitoException; import org.mockito.invocation.MockHandler; @@ -132,7 +131,6 @@ default Optional createSpy( * @return object that carries the information about mockability of given type. * @since 2.1.0 */ - @Incubating TypeMockability isTypeMockable(Class type); /** @@ -151,7 +149,6 @@ default Optional createSpy( * @return A control for the static mock. * @since 3.4.0 */ - @Incubating default StaticMockControl createStaticMock( Class type, MockCreationSettings settings, MockHandler handler) { throw new MockitoException( @@ -181,7 +178,6 @@ default StaticMockControl createStaticMock( * @return A control for the mocked construction. * @since 3.5.0 */ - @Incubating default ConstructionMockControl createConstructionMock( Class type, Function> settingsFactory, @@ -201,7 +197,6 @@ default ConstructionMockControl createConstructionMock( /** * Clears all cashes for mocked types and removes all byte code alterations, if possible. */ - @Incubating default void clearAllCaches() {} /** @@ -209,7 +204,6 @@ default void clearAllCaches() {} * * @since 2.1.0 */ - @Incubating interface TypeMockability { /** * informs if type is mockable @@ -222,7 +216,6 @@ interface TypeMockability { String nonMockableReason(); } - @Incubating interface StaticMockControl { Class getType(); @@ -232,7 +225,6 @@ interface StaticMockControl { void disable(); } - @Incubating interface ConstructionMockControl { Class getType(); diff --git a/src/main/java/org/mockito/plugins/MockitoLogger.java b/src/main/java/org/mockito/plugins/MockitoLogger.java index 38ca4a8a23..d1f981be3a 100644 --- a/src/main/java/org/mockito/plugins/MockitoLogger.java +++ b/src/main/java/org/mockito/plugins/MockitoLogger.java @@ -4,8 +4,6 @@ */ package org.mockito.plugins; -import org.mockito.Incubating; - /** * Mockito logger. * @@ -35,13 +33,11 @@ * * @since 2.23.19 */ -@Incubating public interface MockitoLogger { /** * Log specified object. * * @param what to be logged */ - @Incubating void log(Object what); } diff --git a/src/main/java/org/mockito/plugins/PluginSwitch.java b/src/main/java/org/mockito/plugins/PluginSwitch.java index 916db246c9..a5db3473f7 100644 --- a/src/main/java/org/mockito/plugins/PluginSwitch.java +++ b/src/main/java/org/mockito/plugins/PluginSwitch.java @@ -4,8 +4,6 @@ */ package org.mockito.plugins; -import org.mockito.Incubating; - /** * Allows switching off the plugins that are discovered on classpath. * @@ -42,7 +40,6 @@ * * @since 1.10.15 */ -@Incubating public interface PluginSwitch { /** diff --git a/src/main/java/org/mockito/quality/Strictness.java b/src/main/java/org/mockito/quality/Strictness.java index 20ce8cb33d..b25cab33e6 100644 --- a/src/main/java/org/mockito/quality/Strictness.java +++ b/src/main/java/org/mockito/quality/Strictness.java @@ -4,7 +4,6 @@ */ package org.mockito.quality; -import org.mockito.Incubating; import org.mockito.MockitoSession; import org.mockito.exceptions.misusing.PotentialStubbingProblem; import org.mockito.exceptions.misusing.UnnecessaryStubbingException; @@ -38,7 +37,6 @@ * * @since 2.3.0 */ -@Incubating public enum Strictness { /** @@ -49,7 +47,6 @@ public enum Strictness { * * @since 2.3.0 */ - @Incubating LENIENT, /** @@ -62,7 +59,6 @@ public enum Strictness { * * @since 2.3.0 */ - @Incubating WARN, /** @@ -88,6 +84,5 @@ public enum Strictness { * * @since 2.3.0 */ - @Incubating STRICT_STUBS; } diff --git a/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java b/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java deleted file mode 100644 index d169dd74e0..0000000000 --- a/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.runners; - -import java.lang.reflect.InvocationTargetException; - -import org.junit.runner.Description; -import org.junit.runner.Runner; -import org.junit.runner.manipulation.Filter; -import org.junit.runner.manipulation.Filterable; -import org.junit.runner.manipulation.NoTestsRemainException; -import org.junit.runner.notification.Failure; -import org.junit.runner.notification.RunListener; -import org.junit.runner.notification.RunNotifier; -import org.mockito.internal.configuration.plugins.Plugins; -import org.mockito.internal.debugging.WarningsCollector; -import org.mockito.internal.runners.InternalRunner; -import org.mockito.internal.runners.RunnerFactory; -import org.mockito.plugins.MockitoLogger; - -/** - * @deprecated as of 2.1.0. Use the {@link org.mockito.junit.MockitoJUnitRunner} runner instead - * which contains support for detecting unused stubs. - *

    - * If you still prefer using this runner, tell us why (create ticket in our issue tracker). - */ -@Deprecated -public class ConsoleSpammingMockitoJUnitRunner extends Runner implements Filterable { - - private final MockitoLogger logger; - private final InternalRunner runner; - - public ConsoleSpammingMockitoJUnitRunner(Class klass) throws InvocationTargetException { - this(Plugins.getMockitoLogger(), new RunnerFactory().create(klass)); - } - - ConsoleSpammingMockitoJUnitRunner(MockitoLogger logger, InternalRunner runner) { - this.runner = runner; - this.logger = logger; - } - - @Override - public void run(RunNotifier notifier) { - RunListener listener = - new RunListener() { - WarningsCollector warningsCollector; - - @Override - public void testStarted(Description description) throws Exception { - warningsCollector = new WarningsCollector(); - } - - @Override - public void testFailure(Failure failure) throws Exception { - logger.log(warningsCollector.getWarnings()); - } - }; - - notifier.addListener(listener); - - runner.run(notifier); - } - - @Override - public Description getDescription() { - return runner.getDescription(); - } - - @Override - public void filter(Filter filter) throws NoTestsRemainException { - // filter is required because without it UnrootedTests show up in Eclipse - runner.filter(filter); - } -} diff --git a/src/main/java/org/mockito/runners/MockitoJUnitRunner.java b/src/main/java/org/mockito/runners/MockitoJUnitRunner.java deleted file mode 100644 index b906fdd1f7..0000000000 --- a/src/main/java/org/mockito/runners/MockitoJUnitRunner.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.runners; - -import java.lang.reflect.InvocationTargetException; - -import org.junit.runner.Description; -import org.junit.runner.manipulation.Filter; -import org.junit.runner.manipulation.NoTestsRemainException; -import org.junit.runner.notification.RunNotifier; - -/** - * Runner moved to a new place see {@link org.mockito.junit.MockitoJUnitRunner} - * - * @deprecated Moved to {@link org.mockito.junit.MockitoJUnitRunner}, this class will be removed with Mockito 4 - */ -@Deprecated -public class MockitoJUnitRunner extends org.mockito.junit.MockitoJUnitRunner { - - /** - * Silent runner moved to a new place see {@link org.mockito.junit.MockitoJUnitRunner.Silent} - * - * @deprecated Moved to {@link org.mockito.junit.MockitoJUnitRunner.Silent}, this class will be removed with Mockito 4 - */ - @Deprecated - public static class Silent extends MockitoJUnitRunner { - public Silent(Class klass) throws InvocationTargetException { - super(klass); - } - } - - /** - * Silent runner moved to a new place see {@link org.mockito.junit.MockitoJUnitRunner.Strict} - * - * @deprecated Moved to {@link org.mockito.junit.MockitoJUnitRunner.Strict}, this class will be removed with Mockito 4 - */ - @Deprecated - public static class Strict extends MockitoJUnitRunner { - public Strict(Class klass) throws InvocationTargetException { - super(klass); - } - } - - public MockitoJUnitRunner(Class klass) throws InvocationTargetException { - super(klass); - } - - @Deprecated - @Override - public void run(final RunNotifier notifier) { - super.run(notifier); - } - - @Deprecated - @Override - public Description getDescription() { - return super.getDescription(); - } - - @Override - @Deprecated - public void filter(Filter filter) throws NoTestsRemainException { - super.filter(filter); - } -} diff --git a/src/main/java/org/mockito/runners/VerboseMockitoJUnitRunner.java b/src/main/java/org/mockito/runners/VerboseMockitoJUnitRunner.java deleted file mode 100644 index 0a29c192ee..0000000000 --- a/src/main/java/org/mockito/runners/VerboseMockitoJUnitRunner.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ -package org.mockito.runners; - -import java.lang.reflect.InvocationTargetException; - -import org.junit.runner.Description; -import org.junit.runner.Runner; -import org.junit.runner.manipulation.Filter; -import org.junit.runner.manipulation.Filterable; -import org.junit.runner.manipulation.NoTestsRemainException; -import org.junit.runner.notification.Failure; -import org.junit.runner.notification.RunListener; -import org.junit.runner.notification.RunNotifier; -import org.mockito.internal.debugging.WarningsCollector; -import org.mockito.internal.junit.util.JUnitFailureHacker; -import org.mockito.internal.runners.InternalRunner; -import org.mockito.internal.runners.RunnerFactory; - -/** - * @deprecated as of 2.1.0. Use the {@link org.mockito.junit.MockitoJUnitRunner} runner instead - * which contains support for detecting unused stubs. - *

    - * If you still prefer using this runner, tell us why (create ticket in our issue tracker). - */ -@Deprecated -public class VerboseMockitoJUnitRunner extends Runner implements Filterable { - - private final InternalRunner runner; - - public VerboseMockitoJUnitRunner(Class klass) throws InvocationTargetException { - this(new RunnerFactory().create(klass)); - } - - VerboseMockitoJUnitRunner(InternalRunner runner) { - this.runner = runner; - } - - @Override - public void run(RunNotifier notifier) { - - // a listener that changes the failure's exception in a very hacky way... - RunListener listener = - new RunListener() { - - WarningsCollector warningsCollector; - - @Override - public void testStarted(Description description) throws Exception { - warningsCollector = new WarningsCollector(); - } - - @Override - @SuppressWarnings("deprecation") - public void testFailure(final Failure failure) throws Exception { - String warnings = warningsCollector.getWarnings(); - new JUnitFailureHacker().appendWarnings(failure, warnings); - } - }; - - notifier.addFirstListener(listener); - - runner.run(notifier); - } - - @Override - public Description getDescription() { - return runner.getDescription(); - } - - @Override - public void filter(Filter filter) throws NoTestsRemainException { - // filter is required because without it UnrootedTests show up in Eclipse - runner.filter(filter); - } -} diff --git a/src/main/java/org/mockito/runners/package-info.java b/src/main/java/org/mockito/runners/package-info.java deleted file mode 100644 index ab2fb8cb0e..0000000000 --- a/src/main/java/org/mockito/runners/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright (c) 2007 Mockito contributors - * This program is made available under the terms of the MIT License. - */ - -/** - * JUnit runners. - */ -@Deprecated -package org.mockito.runners; diff --git a/src/main/java/org/mockito/session/MockitoSessionBuilder.java b/src/main/java/org/mockito/session/MockitoSessionBuilder.java index 648ca9d41e..6a84205670 100644 --- a/src/main/java/org/mockito/session/MockitoSessionBuilder.java +++ b/src/main/java/org/mockito/session/MockitoSessionBuilder.java @@ -4,7 +4,6 @@ */ package org.mockito.session; -import org.mockito.Incubating; import org.mockito.MockitoAnnotations; import org.mockito.MockitoSession; import org.mockito.NotExtensible; @@ -17,7 +16,6 @@ * * @since 2.7.0 */ -@Incubating @NotExtensible public interface MockitoSessionBuilder { @@ -41,7 +39,6 @@ public interface MockitoSessionBuilder { * @return the same builder instance for fluent configuration of {@code MockitoSession}. * @since 2.7.0 */ - @Incubating MockitoSessionBuilder initMocks(Object testClassInstance); /** @@ -59,7 +56,6 @@ public interface MockitoSessionBuilder { * @see #initMocks(Object) * @since 2.15.0 */ - @Incubating MockitoSessionBuilder initMocks(Object... testClassInstances); /** @@ -81,7 +77,6 @@ public interface MockitoSessionBuilder { * @see org.mockito.quality.MockitoHint * @since 2.15.0 */ - @Incubating MockitoSessionBuilder name(String name); /** @@ -95,7 +90,6 @@ public interface MockitoSessionBuilder { * @return the same builder instance for fluent configuration of {@code MockitoSession}. * @since 2.7.0 */ - @Incubating MockitoSessionBuilder strictness(Strictness strictness); /** @@ -114,7 +108,6 @@ public interface MockitoSessionBuilder { * @see org.mockito.quality.MockitoHint * @since 2.15.0 */ - @Incubating MockitoSessionBuilder logger(MockitoSessionLogger logger); /** @@ -136,6 +129,5 @@ public interface MockitoSessionBuilder { * @throws UnfinishedMockingSessionException * when previous session was not concluded with {@link MockitoSession#finishMocking()} */ - @Incubating MockitoSession startMocking() throws UnfinishedMockingSessionException; } diff --git a/src/main/java/org/mockito/session/MockitoSessionLogger.java b/src/main/java/org/mockito/session/MockitoSessionLogger.java index bf365d5707..7d2e1350cd 100644 --- a/src/main/java/org/mockito/session/MockitoSessionLogger.java +++ b/src/main/java/org/mockito/session/MockitoSessionLogger.java @@ -4,7 +4,6 @@ */ package org.mockito.session; -import org.mockito.Incubating; import org.mockito.MockitoSession; import org.mockito.NotExtensible; @@ -17,7 +16,6 @@ * * @since 2.15.0 */ -@Incubating @NotExtensible public interface MockitoSessionLogger { @@ -26,6 +24,5 @@ public interface MockitoSessionLogger { * * @param hint to log; never {@code null} */ - @Incubating void log(String hint); } diff --git a/src/main/java/org/mockito/stubbing/Answer1.java b/src/main/java/org/mockito/stubbing/Answer1.java index afc2a5e424..e370dca419 100644 --- a/src/main/java/org/mockito/stubbing/Answer1.java +++ b/src/main/java/org/mockito/stubbing/Answer1.java @@ -4,8 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; - /** * Generic interface to be used for configuring mock's answer for a single argument invocation. * @@ -31,7 +29,6 @@ * @param type of the single argument * @see Answer */ -@Incubating public interface Answer1 { /** * @param argument0 the single argument. diff --git a/src/main/java/org/mockito/stubbing/Answer2.java b/src/main/java/org/mockito/stubbing/Answer2.java index 77944b7366..71b5a03d03 100644 --- a/src/main/java/org/mockito/stubbing/Answer2.java +++ b/src/main/java/org/mockito/stubbing/Answer2.java @@ -4,8 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; - /** * Generic interface to be used for configuring mock's answer for a two argument invocation. * @@ -32,7 +30,6 @@ * @param type of the second argument * @see Answer */ -@Incubating public interface Answer2 { /** * @param argument0 the first argument. diff --git a/src/main/java/org/mockito/stubbing/Answer3.java b/src/main/java/org/mockito/stubbing/Answer3.java index e80f06eadc..1aa4abfb03 100644 --- a/src/main/java/org/mockito/stubbing/Answer3.java +++ b/src/main/java/org/mockito/stubbing/Answer3.java @@ -4,8 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; - /** * Generic interface to be used for configuring mock's answer for a three argument invocation. * @@ -33,7 +31,6 @@ * @param type of the third argument * @see Answer */ -@Incubating public interface Answer3 { /** * @param argument0 the first argument. diff --git a/src/main/java/org/mockito/stubbing/Answer4.java b/src/main/java/org/mockito/stubbing/Answer4.java index f89a2019f9..bfc6c3185e 100644 --- a/src/main/java/org/mockito/stubbing/Answer4.java +++ b/src/main/java/org/mockito/stubbing/Answer4.java @@ -4,8 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; - /** * Generic interface to be used for configuring mock's answer for a four argument invocation. * @@ -34,7 +32,6 @@ * @param type of the fourth argument * @see Answer */ -@Incubating public interface Answer4 { /** * @param argument0 the first argument. diff --git a/src/main/java/org/mockito/stubbing/Answer5.java b/src/main/java/org/mockito/stubbing/Answer5.java index 3e83968b4c..d5e12e10f4 100644 --- a/src/main/java/org/mockito/stubbing/Answer5.java +++ b/src/main/java/org/mockito/stubbing/Answer5.java @@ -4,8 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; - /** * Generic interface to be used for configuring mock's answer for a five argument invocation. * @@ -34,7 +32,6 @@ * @param type of the fourth argument * @see Answer */ -@Incubating public interface Answer5 { /** * @param argument0 the first argument. diff --git a/src/main/java/org/mockito/stubbing/Answer6.java b/src/main/java/org/mockito/stubbing/Answer6.java index 11a95c1977..b3248db449 100644 --- a/src/main/java/org/mockito/stubbing/Answer6.java +++ b/src/main/java/org/mockito/stubbing/Answer6.java @@ -4,8 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; - /** * Generic interface to be used for configuring mock's answer for a six argument invocation. * @@ -36,7 +34,6 @@ * @param type of the sixth argument * @see Answer */ -@Incubating public interface Answer6 { /** * @param argument0 the first argument. diff --git a/src/main/java/org/mockito/stubbing/Stubbing.java b/src/main/java/org/mockito/stubbing/Stubbing.java index cba0917f97..48b5ee4dad 100644 --- a/src/main/java/org/mockito/stubbing/Stubbing.java +++ b/src/main/java/org/mockito/stubbing/Stubbing.java @@ -4,7 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; import org.mockito.MockingDetails; import org.mockito.Mockito; import org.mockito.NotExtensible; @@ -60,6 +59,5 @@ public interface Stubbing extends Answer { * * @since 2.20.0 */ - @Incubating Strictness getStrictness(); } diff --git a/src/main/java/org/mockito/stubbing/ValidableAnswer.java b/src/main/java/org/mockito/stubbing/ValidableAnswer.java index 9d0bde1bd2..a5dacaa46c 100644 --- a/src/main/java/org/mockito/stubbing/ValidableAnswer.java +++ b/src/main/java/org/mockito/stubbing/ValidableAnswer.java @@ -4,7 +4,6 @@ */ package org.mockito.stubbing; -import org.mockito.Incubating; import org.mockito.invocation.InvocationOnMock; /** @@ -39,7 +38,7 @@ * *

    
      * when(mock.someMethod(anyString(), anyInt())).then(doSomethingTricky()); // fail at answer execution time
    - * when(mock.incompatibleMethod(anyVararg())).then(doSomethingTricky()); // fail at answer execution time
    + * when(mock.incompatibleMethod(any())).then(doSomethingTricky()); // fail at answer execution time
      * 
    *

    * @@ -48,7 +47,7 @@ * validable at stub time by implementing this contract. * *
    
    - * when(mock.incompatibleMethod(anyVararg())).then(doSomethingTricky()); // fail at answer stub time
    + * when(mock.incompatibleMethod(any())).then(doSomethingTricky()); // fail at answer stub time
      *
      * static Answer doSomethingTricky() {
      *     return new TrickyAnswer();
    @@ -68,7 +67,6 @@
      *
      * @since 2.3.8
      */
    -@Incubating
     public interface ValidableAnswer {
     
         /**
    diff --git a/src/main/java/org/mockito/stubbing/VoidAnswer1.java b/src/main/java/org/mockito/stubbing/VoidAnswer1.java
    index 9f75bf5b9e..df563a92f5 100644
    --- a/src/main/java/org/mockito/stubbing/VoidAnswer1.java
    +++ b/src/main/java/org/mockito/stubbing/VoidAnswer1.java
    @@ -4,8 +4,6 @@
      */
     package org.mockito.stubbing;
     
    -import org.mockito.Incubating;
    -
     /**
      * Generic interface to be used for configuring mock's answer for a single argument invocation that returns nothing.
      *
    @@ -30,7 +28,6 @@
      * @param  type of the single argument
      * @see Answer
      */
    -@Incubating
     public interface VoidAnswer1 {
         /**
          * @param argument0 the single argument.
    diff --git a/src/main/java/org/mockito/stubbing/VoidAnswer2.java b/src/main/java/org/mockito/stubbing/VoidAnswer2.java
    index 8d062f163d..a9b6ef47ab 100644
    --- a/src/main/java/org/mockito/stubbing/VoidAnswer2.java
    +++ b/src/main/java/org/mockito/stubbing/VoidAnswer2.java
    @@ -4,8 +4,6 @@
      */
     package org.mockito.stubbing;
     
    -import org.mockito.Incubating;
    -
     /**
      * Generic interface to be used for configuring mock's answer for a two argument invocation that returns nothing.
      *
    @@ -31,7 +29,6 @@
      * @param  type of the second argument
      * @see Answer
      */
    -@Incubating
     public interface VoidAnswer2 {
         /**
          * @param argument0 the first argument.
    diff --git a/src/main/java/org/mockito/stubbing/VoidAnswer3.java b/src/main/java/org/mockito/stubbing/VoidAnswer3.java
    index b56498297b..a2c6a072a0 100644
    --- a/src/main/java/org/mockito/stubbing/VoidAnswer3.java
    +++ b/src/main/java/org/mockito/stubbing/VoidAnswer3.java
    @@ -4,8 +4,6 @@
      */
     package org.mockito.stubbing;
     
    -import org.mockito.Incubating;
    -
     /**
      * Generic interface to be used for configuring mock's answer for a three argument invocation that returns nothing.
      *
    @@ -32,7 +30,6 @@
      * @param  type of the third argument
      * @see Answer
      */
    -@Incubating
     public interface VoidAnswer3 {
         /**
          * @param argument0 the first argument.
    diff --git a/src/main/java/org/mockito/stubbing/VoidAnswer4.java b/src/main/java/org/mockito/stubbing/VoidAnswer4.java
    index c34abee33b..aec382be9a 100644
    --- a/src/main/java/org/mockito/stubbing/VoidAnswer4.java
    +++ b/src/main/java/org/mockito/stubbing/VoidAnswer4.java
    @@ -4,8 +4,6 @@
      */
     package org.mockito.stubbing;
     
    -import org.mockito.Incubating;
    -
     /**
      * Generic interface to be used for configuring mock's answer for a four argument invocation that returns nothing.
      *
    @@ -33,7 +31,6 @@
      * @param  type of the fourth argument
      * @see Answer
      */
    -@Incubating
     public interface VoidAnswer4 {
         /**
          * @param argument0 the first argument.
    diff --git a/src/main/java/org/mockito/stubbing/VoidAnswer5.java b/src/main/java/org/mockito/stubbing/VoidAnswer5.java
    index 87db6136ad..fc4b8b280a 100644
    --- a/src/main/java/org/mockito/stubbing/VoidAnswer5.java
    +++ b/src/main/java/org/mockito/stubbing/VoidAnswer5.java
    @@ -4,8 +4,6 @@
      */
     package org.mockito.stubbing;
     
    -import org.mockito.Incubating;
    -
     /**
      * Generic interface to be used for configuring mock's answer for a five argument invocation that returns nothing.
      *
    @@ -34,7 +32,6 @@
      * @param  type of the fifth argument
      * @see Answer
      */
    -@Incubating
     public interface VoidAnswer5 {
         /**
          * @param argument0 the first argument.
    diff --git a/src/main/java/org/mockito/stubbing/VoidAnswer6.java b/src/main/java/org/mockito/stubbing/VoidAnswer6.java
    index 545ca3f591..879b516c1c 100644
    --- a/src/main/java/org/mockito/stubbing/VoidAnswer6.java
    +++ b/src/main/java/org/mockito/stubbing/VoidAnswer6.java
    @@ -4,8 +4,6 @@
      */
     package org.mockito.stubbing;
     
    -import org.mockito.Incubating;
    -
     /**
      * Generic interface to be used for configuring mock's answer for a six argument invocation that returns nothing.
      *
    @@ -35,7 +33,6 @@
      * @param  type of the sixth argument
      * @see Answer
      */
    -@Incubating
     public interface VoidAnswer6 {
         /**
          * @param argument0 the first argument.
    diff --git a/src/main/java/org/mockito/verification/After.java b/src/main/java/org/mockito/verification/After.java
    index 5e7a0b8eae..ed87333925 100644
    --- a/src/main/java/org/mockito/verification/After.java
    +++ b/src/main/java/org/mockito/verification/After.java
    @@ -38,4 +38,13 @@ public After(long delayMillis, VerificationMode verificationMode) {
         protected VerificationMode copySelfWithNewVerificationMode(VerificationMode verificationMode) {
             return new After(wrappedVerification.copyWithVerificationMode(verificationMode));
         }
    +
    +    @Override
    +    public String toString() {
    +        return "Wanted after "
    +                + wrappedVerification.getTimer().duration()
    +                + " ms: ["
    +                + wrappedVerification.getDelegate()
    +                + "]";
    +    }
     }
    diff --git a/src/main/java/org/mockito/verification/Timeout.java b/src/main/java/org/mockito/verification/Timeout.java
    index 502bb9fc0e..405a4356d8 100644
    --- a/src/main/java/org/mockito/verification/Timeout.java
    +++ b/src/main/java/org/mockito/verification/Timeout.java
    @@ -62,4 +62,13 @@ public VerificationMode atMost(int maxNumberOfInvocations) {
         public VerificationMode never() {
             throw atMostAndNeverShouldNotBeUsedWithTimeout();
         }
    +
    +    @Override
    +    public String toString() {
    +        return "Wanted after at most "
    +                + wrappedVerification.getTimer().duration()
    +                + " ms: ["
    +                + wrappedVerification.getDelegate()
    +                + "]";
    +    }
     }
    diff --git a/src/main/java/org/mockito/verification/VerificationEvent.java b/src/main/java/org/mockito/verification/VerificationEvent.java
    index fad511b6ff..0469bd2fa7 100644
    --- a/src/main/java/org/mockito/verification/VerificationEvent.java
    +++ b/src/main/java/org/mockito/verification/VerificationEvent.java
    @@ -4,13 +4,11 @@
      */
     package org.mockito.verification;
     
    -import org.mockito.Incubating;
     import org.mockito.internal.verification.api.VerificationData;
     
     /**
      * Contains all information about a verification that has happened.
      */
    -@Incubating
     public interface VerificationEvent {
         /**
          * @return The mock that a verification happened on.
    diff --git a/src/test/java/org/mockito/InvocationFactoryTest.java b/src/test/java/org/mockito/InvocationFactoryTest.java
    index 5837a7d86f..8864e05a57 100644
    --- a/src/test/java/org/mockito/InvocationFactoryTest.java
    +++ b/src/test/java/org/mockito/InvocationFactoryTest.java
    @@ -9,8 +9,6 @@
     import static org.mockito.Mockito.spy;
     import static org.mockito.Mockito.withSettings;
     
    -import java.util.concurrent.Callable;
    -
     import org.junit.Test;
     import org.mockito.invocation.Invocation;
     import org.mockito.invocation.InvocationFactory;
    @@ -70,23 +68,4 @@ public Object call() throws Throwable {
             Object ret = Mockito.mockingDetails(mock).getMockHandler().handle(invocation);
             assertEquals("mocked", ret);
         }
    -
    -    @Test
    -    public void deprecated_api_still_works() throws Throwable {
    -        Invocation invocation =
    -                Mockito.framework()
    -                        .getInvocationFactory()
    -                        .createInvocation(
    -                                mock,
    -                                withSettings().build(TestClass.class),
    -                                TestClass.class.getDeclaredMethod("testMethod"),
    -                                new Callable() {
    -                                    public Object call() throws Exception {
    -                                        return "mocked";
    -                                    }
    -                                });
    -
    -        Object ret = Mockito.mockingDetails(mock).getMockHandler().handle(invocation);
    -        assertEquals("mocked", ret);
    -    }
     }
    diff --git a/src/test/java/org/mockito/MockitoTest.java b/src/test/java/org/mockito/MockitoTest.java
    index b41dd2091b..687ae4cd4b 100644
    --- a/src/test/java/org/mockito/MockitoTest.java
    +++ b/src/test/java/org/mockito/MockitoTest.java
    @@ -44,11 +44,6 @@ public void shouldValidateMockWhenVerifyingNoMoreInteractions() {
             Mockito.verifyNoMoreInteractions("notMock");
         }
     
    -    @Test(expected = NotAMockException.class)
    -    public void shouldValidateMockWhenVerifyingZeroInteractions() {
    -        Mockito.verifyZeroInteractions("notMock");
    -    }
    -
         @Test(expected = NotAMockException.class)
         public void shouldValidateMockWhenVerifyingNoInteractions() {
             Mockito.verifyNoInteractions("notMock");
    diff --git a/src/test/java/org/mockito/configuration/MockitoConfiguration.java b/src/test/java/org/mockito/configuration/MockitoConfiguration.java
    index 5834485e43..ab65516f11 100644
    --- a/src/test/java/org/mockito/configuration/MockitoConfiguration.java
    +++ b/src/test/java/org/mockito/configuration/MockitoConfiguration.java
    @@ -5,7 +5,6 @@
     package org.mockito.configuration;
     
     import org.mockito.stubbing.Answer;
    -import org.mockitousage.configuration.CustomizedAnnotationForSmartMockTest;
     
     public class MockitoConfiguration extends DefaultMockitoConfiguration
             implements IMockitoConfiguration {
    @@ -14,7 +13,7 @@ public class MockitoConfiguration extends DefaultMockitoConfiguration
     
         private boolean cleansStackTrace;
     
    -    private AnnotationEngine overriddenEngine;
    +    private org.mockito.plugins.AnnotationEngine overriddenEngine;
     
         private boolean enableClassCache = true;
     
    @@ -29,7 +28,7 @@ public void overrideCleansStackTrace(boolean cleansStackTrace) {
         }
     
         // for testing purposes, allow to override the annotation engine
    -    public void overrideAnnotationEngine(AnnotationEngine engine) {
    +    public void overrideAnnotationEngine(org.mockito.plugins.AnnotationEngine engine) {
             this.overriddenEngine = engine;
         }
     
    @@ -47,14 +46,6 @@ public Answer getDefaultAnswer() {
             }
         }
     
    -    @Override
    -    public AnnotationEngine getAnnotationEngine() {
    -        if (this.overriddenEngine != null) {
    -            return this.overriddenEngine;
    -        }
    -        return new CustomizedAnnotationForSmartMockTest.CustomInjectingAnnotationEngine();
    -    }
    -
         @Override
         public boolean cleansStackTrace() {
             return cleansStackTrace;
    diff --git a/src/test/java/org/mockito/internal/InvalidStateDetectionTest.java b/src/test/java/org/mockito/internal/InvalidStateDetectionTest.java
    index ae31893b47..be466a049c 100644
    --- a/src/test/java/org/mockito/internal/InvalidStateDetectionTest.java
    +++ b/src/test/java/org/mockito/internal/InvalidStateDetectionTest.java
    @@ -30,12 +30,10 @@
      *
      *    -on method call on mock
      *    -on verify
    - *    -on verifyZeroInteractions
      *    -on verifyNoMoreInteractions
      *    -on verify in order
      *    -on stub
      */
    -@SuppressWarnings({"unchecked", "deprecation"})
     public class InvalidStateDetectionTest extends TestBase {
     
         @Mock private IMethods mock;
    @@ -60,9 +58,6 @@ public void shouldDetectUnfinishedStubbing() {
             when(mock.simpleMethod());
             detectsAndCleansUp(new OnVerifyInOrder(), UnfinishedStubbingException.class);
     
    -        when(mock.simpleMethod());
    -        detectsAndCleansUp(new OnVerifyZeroInteractions(), UnfinishedStubbingException.class);
    -
             when(mock.simpleMethod());
             detectsAndCleansUp(new OnVerifyNoMoreInteractions(), UnfinishedStubbingException.class);
     
    @@ -88,9 +83,6 @@ public void shouldDetectUnfinishedDoAnswerStubbing() {
             doAnswer(null);
             detectsAndCleansUp(new OnVerifyInOrder(), UnfinishedStubbingException.class);
     
    -        doAnswer(null);
    -        detectsAndCleansUp(new OnVerifyZeroInteractions(), UnfinishedStubbingException.class);
    -
             doAnswer(null);
             detectsAndCleansUp(new OnVerifyNoMoreInteractions(), UnfinishedStubbingException.class);
     
    @@ -113,9 +105,6 @@ public void shouldDetectUnfinishedVerification() {
             verify(mock);
             detectsAndCleansUp(new OnVerifyInOrder(), UnfinishedVerificationException.class);
     
    -        verify(mock);
    -        detectsAndCleansUp(new OnVerifyZeroInteractions(), UnfinishedVerificationException.class);
    -
             verify(mock);
             detectsAndCleansUp(new OnVerifyNoMoreInteractions(), UnfinishedVerificationException.class);
     
    @@ -128,22 +117,19 @@ public void shouldDetectUnfinishedVerification() {
     
         @Test
         public void shouldDetectMisplacedArgumentMatcher() {
    -        Object ignored = anyObject();
    +        Object ignored = any();
             detectsAndCleansUp(new OnVerify(), InvalidUseOfMatchersException.class);
     
    -        ignored = anyObject();
    +        ignored = any();
             detectsAndCleansUp(new OnVerifyInOrder(), InvalidUseOfMatchersException.class);
     
    -        ignored = anyObject();
    -        detectsAndCleansUp(new OnVerifyZeroInteractions(), InvalidUseOfMatchersException.class);
    -
    -        ignored = anyObject();
    +        ignored = any();
             detectsAndCleansUp(new OnVerifyNoMoreInteractions(), InvalidUseOfMatchersException.class);
     
    -        ignored = anyObject();
    +        ignored = any();
             detectsAndCleansUp(new OnVerifyNoInteractions(), InvalidUseOfMatchersException.class);
     
    -        ignored = anyObject();
    +        ignored = any();
             detectsAndCleansUp(new OnDoAnswer(), InvalidUseOfMatchersException.class);
         }
     
    @@ -198,13 +184,6 @@ public void detect(IMethods mock) {
             }
         }
     
    -    private static class OnVerifyZeroInteractions implements DetectsInvalidState {
    -        @SuppressWarnings({"CheckReturnValue", "MockitoUsage"})
    -        public void detect(IMethods mock) {
    -            verifyZeroInteractions(mock);
    -        }
    -    }
    -
         private static class OnVerifyNoMoreInteractions implements DetectsInvalidState {
             @SuppressWarnings({"CheckReturnValue", "MockitoUsage"})
             public void detect(IMethods mock) {
    diff --git a/src/test/java/org/mockito/internal/configuration/GlobalConfigurationTest.java b/src/test/java/org/mockito/internal/configuration/GlobalConfigurationTest.java
    index d5590ccfa6..48cf998b00 100644
    --- a/src/test/java/org/mockito/internal/configuration/GlobalConfigurationTest.java
    +++ b/src/test/java/org/mockito/internal/configuration/GlobalConfigurationTest.java
    @@ -11,21 +11,11 @@
     import org.junit.After;
     import org.junit.Test;
     import org.mockito.Mockito;
    -import org.mockito.configuration.AnnotationEngine;
     import org.mockito.internal.configuration.plugins.Plugins;
     import org.mockitoutil.ClassLoaders;
     import org.objenesis.Objenesis;
     
     public class GlobalConfigurationTest {
    -    @Test
    -    public void returns_mockito_configuration_annotation_engine_if_non_default() throws Exception {
    -        ConfigurationAccess.getConfig().overrideAnnotationEngine(new CustomAnnotationEngine());
    -        assertThat(new GlobalConfiguration().getAnnotationEngine())
    -                .isInstanceOf(CustomAnnotationEngine.class);
    -        assertThat(new GlobalConfiguration().tryGetPluginAnnotationEngine())
    -                .isInstanceOf(CustomAnnotationEngine.class);
    -    }
    -
         @Test
         public void returns_mockito_annotation_engine_of_Plugins_if_no_MockitoConfiguration()
                 throws Throwable {
    @@ -44,8 +34,6 @@ public void returns_mockito_annotation_engine_of_Plugins_if_no_MockitoConfigurat
                             new Runnable() {
                                 @Override
                                 public void run() {
    -                                assertThat(new GlobalConfiguration().getAnnotationEngine())
    -                                        .isInstanceOf(Plugins.getAnnotationEngine().getClass());
                                     assertThat(new GlobalConfiguration().tryGetPluginAnnotationEngine())
                                             .isInstanceOf(Plugins.getAnnotationEngine().getClass());
                                 }
    @@ -57,7 +45,7 @@ public void reset_annotation_engine() {
             ConfigurationAccess.getConfig().overrideAnnotationEngine(null);
         }
     
    -    private static class CustomAnnotationEngine implements AnnotationEngine {
    +    private static class CustomAnnotationEngine implements org.mockito.plugins.AnnotationEngine {
             @Override
             public AutoCloseable process(Class clazz, Object testInstance) {
                 return new NoAction();
    diff --git a/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java b/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java
    index ab97bc5f1d..44afe0b6a9 100644
    --- a/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java
    +++ b/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java
    @@ -12,7 +12,6 @@
     import org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker;
     import org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker;
     import org.mockito.internal.util.ConsoleMockitoLogger;
    -import org.mockito.plugins.InstantiatorProvider;
     import org.mockito.plugins.InstantiatorProvider2;
     import org.mockito.plugins.MockMaker;
     import org.mockito.plugins.MockitoLogger;
    @@ -23,7 +22,6 @@ public class DefaultMockitoPluginsTest extends TestBase {
         private DefaultMockitoPlugins plugins = new DefaultMockitoPlugins();
     
         @Test
    -    @SuppressWarnings("deprecation")
         public void provides_plugins() throws Exception {
             assertEquals(
                     "org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker",
    @@ -34,7 +32,6 @@ public void provides_plugins() throws Exception {
                     plugins.getDefaultPluginClass(PROXY_ALIAS));
             assertEquals(
                     ByteBuddyMockMaker.class, plugins.getDefaultPlugin(MockMaker.class).getClass());
    -        assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider.class));
             assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider2.class));
             assertEquals(
                     ConsoleMockitoLogger.class,
    diff --git a/src/test/java/org/mockito/internal/configuration/plugins/PluginFinderTest.java b/src/test/java/org/mockito/internal/configuration/plugins/PluginFinderTest.java
    index dcfc7f6dc8..4b704461da 100644
    --- a/src/test/java/org/mockito/internal/configuration/plugins/PluginFinderTest.java
    +++ b/src/test/java/org/mockito/internal/configuration/plugins/PluginFinderTest.java
    @@ -8,7 +8,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.junit.Assert.*;
    -import static org.mockito.Matchers.anyString;
    +import static org.mockito.ArgumentMatchers.anyString;
     import static org.mockito.Mockito.when;
     
     import java.io.File;
    diff --git a/src/test/java/org/mockito/internal/creation/bytebuddy/SubclassByteBuddyMockMakerTest.java b/src/test/java/org/mockito/internal/creation/bytebuddy/SubclassByteBuddyMockMakerTest.java
    index 154fc9a856..6e082287d1 100644
    --- a/src/test/java/org/mockito/internal/creation/bytebuddy/SubclassByteBuddyMockMakerTest.java
    +++ b/src/test/java/org/mockito/internal/creation/bytebuddy/SubclassByteBuddyMockMakerTest.java
    @@ -4,13 +4,6 @@
      */
     package org.mockito.internal.creation.bytebuddy;
     
    -import static org.assertj.core.api.Assertions.assertThat;
    -
    -import java.lang.annotation.Retention;
    -import java.lang.annotation.RetentionPolicy;
    -import java.util.Observable;
    -import java.util.Observer;
    -
     import net.bytebuddy.ByteBuddy;
     import net.bytebuddy.ClassFileVersion;
     import net.bytebuddy.description.modifier.TypeManifestation;
    @@ -19,6 +12,13 @@
     import org.mockito.internal.creation.MockSettingsImpl;
     import org.mockito.plugins.MockMaker;
     
    +import java.lang.annotation.Retention;
    +import java.lang.annotation.RetentionPolicy;
    +import java.util.Observable;
    +import java.util.Observer;
    +
    +import static org.assertj.core.api.Assertions.assertThat;
    +
     public class SubclassByteBuddyMockMakerTest
             extends AbstractByteBuddyMockMakerTest {
     
    @@ -35,22 +35,16 @@ public void is_type_mockable_excludes_primitive_wrapper_classes() {
     
         @Test
         public void is_type_mockable_excludes_sealed_classes() {
    -        // is only supported on Java 17 and later
             if (ClassFileVersion.ofThisVm().isAtMost(ClassFileVersion.JAVA_V16)) {
                 return;
             }
    -        DynamicType.Builder base = new ByteBuddy().subclass(Object.class);
    -        DynamicType.Unloaded dynamic =
    -                new ByteBuddy()
    -                        .subclass(Object.class)
    -                        .permittedSubclass(base.toTypeDescription())
    -                        .make();
    +        DynamicType.Builder base = new ByteBuddy().subclass(Object.class);
    +        DynamicType.Builder subclass =
    +                new ByteBuddy().subclass(base.toTypeDescription()).merge(TypeManifestation.FINAL);
             Class type =
    -                new ByteBuddy()
    -                        .subclass(base.toTypeDescription())
    -                        .merge(TypeManifestation.FINAL)
    +                base.permittedSubclass(subclass.toTypeDescription())
                             .make()
    -                        .include(dynamic)
    +                        .include(subclass.make())
                             .load(null)
                             .getLoaded();
             MockMaker.TypeMockability mockable = mockMaker.isTypeMockable(type);
    diff --git a/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java b/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java
    index f113d5e315..fd6009dae3 100644
    --- a/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java
    +++ b/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java
    @@ -42,10 +42,11 @@ public void should_create_mock_from_interface_with_extra_interface() {
     
         @Test
         public void should_discover_mockable_input() {
    -        assertThat(mockMaker.isTypeMockable(Object.class).mockable()).isFalse();
    -        assertThat(mockMaker.isTypeMockable(Object.class).nonMockableReason())
    +        assertThat(mockMaker.isTypeMockable(Number.class).mockable()).isFalse();
    +        assertThat(mockMaker.isTypeMockable(Number.class).nonMockableReason())
                     .isEqualTo("non-interface");
             assertThat(mockMaker.isTypeMockable(SomeInterface.class).mockable()).isTrue();
    +        assertThat(mockMaker.isTypeMockable(Object.class).mockable()).isTrue();
         }
     
         @Test
    diff --git a/src/test/java/org/mockito/internal/handler/InvocationNotifierHandlerTest.java b/src/test/java/org/mockito/internal/handler/InvocationNotifierHandlerTest.java
    index a95921bfcc..273674f614 100644
    --- a/src/test/java/org/mockito/internal/handler/InvocationNotifierHandlerTest.java
    +++ b/src/test/java/org/mockito/internal/handler/InvocationNotifierHandlerTest.java
    @@ -8,7 +8,7 @@
     import static org.junit.Assert.fail;
     import static org.mockito.BDDMockito.given;
     import static org.mockito.BDDMockito.willThrow;
    -import static org.mockito.Matchers.any;
    +import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.Mockito.mock;
     import static org.mockito.Mockito.verify;
     
    diff --git a/src/test/java/org/mockito/internal/handler/MockHandlerImplTest.java b/src/test/java/org/mockito/internal/handler/MockHandlerImplTest.java
    index c0fed25fb1..b109b7eeca 100644
    --- a/src/test/java/org/mockito/internal/handler/MockHandlerImplTest.java
    +++ b/src/test/java/org/mockito/internal/handler/MockHandlerImplTest.java
    @@ -7,7 +7,7 @@
     import static org.junit.Assert.assertNull;
     import static org.junit.Assert.fail;
     import static org.mockito.BDDMockito.given;
    -import static org.mockito.Matchers.any;
    +import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.Mockito.doThrow;
     import static org.mockito.Mockito.mock;
     import static org.mockito.internal.progress.ThreadSafeMockingProgress.mockingProgress;
    diff --git a/src/test/java/org/mockito/internal/invocation/MatcherApplicationStrategyTest.java b/src/test/java/org/mockito/internal/invocation/MatcherApplicationStrategyTest.java
    index b79a1fc082..285bfecc66 100644
    --- a/src/test/java/org/mockito/internal/invocation/MatcherApplicationStrategyTest.java
    +++ b/src/test/java/org/mockito/internal/invocation/MatcherApplicationStrategyTest.java
    @@ -120,7 +120,7 @@ public void shouldKnowWhenVarargsMatch() {
         }
     
         @Test
    -    public void shouldAllowAnyVarargMatchEntireVararg() {
    +    public void shouldAllowAnyMatchEntireVararg() {
             // given
             invocation = varargs("1", "2");
             matchers = asList(ANY);
    @@ -135,7 +135,7 @@ public void shouldAllowAnyVarargMatchEntireVararg() {
         }
     
         @Test
    -    public void shouldNotAllowAnyObjectWithMixedVarargs() {
    +    public void shouldNotAllowAnyWithMixedVarargs() {
             // given
             invocation = mixedVarargs(1, "1", "2");
             matchers = asList(new Equals(1));
    @@ -150,7 +150,7 @@ public void shouldNotAllowAnyObjectWithMixedVarargs() {
         }
     
         @Test
    -    public void shouldAllowAnyObjectWithMixedVarargs() {
    +    public void shouldAllowanyWithMixedVarargs() {
             // given
             invocation = mixedVarargs(1, "1", "2");
             matchers = asList(new Equals(1), ANY);
    @@ -165,7 +165,7 @@ public void shouldAllowAnyObjectWithMixedVarargs() {
         }
     
         @Test
    -    public void shouldAnyObjectVarargDealWithDifferentSizeOfArgs() {
    +    public void shouldAnyDealWithDifferentSizeOfArgs() {
             // given
             invocation = mixedVarargs(1, "1", "2");
             matchers = asList(new Equals(1));
    @@ -182,7 +182,7 @@ public void shouldAnyObjectVarargDealWithDifferentSizeOfArgs() {
         }
     
         @Test
    -    public void shouldMatchAnyVarargEvenIfOneOfTheArgsIsNull() {
    +    public void shouldMatchAnyEvenIfOneOfTheArgsIsNull() {
             // given
             invocation = mixedVarargs(null, null, "2");
             matchers = asList(new Equals(null), ANY);
    @@ -196,7 +196,7 @@ public void shouldMatchAnyVarargEvenIfOneOfTheArgsIsNull() {
         }
     
         @Test
    -    public void shouldMatchAnyVarargEvenIfMatcherIsDecorated() {
    +    public void shouldMatchAnyEvenIfMatcherIsDecorated() {
             // given
             invocation = varargs("1", "2");
             matchers = asList(ANY);
    @@ -210,7 +210,7 @@ public void shouldMatchAnyVarargEvenIfMatcherIsDecorated() {
         }
     
         @Test
    -    public void shouldMatchAnyVarargEvenIfMatcherIsWrappedInHamcrestMatcher() {
    +    public void shouldMatchAnyEvenIfMatcherIsWrappedInHamcrestMatcher() {
             // given
             invocation = varargs("1", "2");
             HamcrestArgumentMatcher argumentMatcher = new HamcrestArgumentMatcher(new IntMatcher());
    diff --git a/src/test/java/org/mockito/internal/junit/util/JUnitFailureHackerTest.java b/src/test/java/org/mockito/internal/junit/util/JUnitFailureHackerTest.java
    deleted file mode 100644
    index 3e3fb8d633..0000000000
    --- a/src/test/java/org/mockito/internal/junit/util/JUnitFailureHackerTest.java
    +++ /dev/null
    @@ -1,82 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockito.internal.junit.util;
    -
    -import static org.assertj.core.api.Assertions.assertThat;
    -import static org.junit.Assert.assertEquals;
    -
    -import org.assertj.core.api.Assertions;
    -import org.junit.Test;
    -import org.junit.runner.Description;
    -import org.junit.runner.notification.Failure;
    -import org.mockito.internal.exceptions.ExceptionIncludingMockitoWarnings;
    -import org.mockitoutil.TestBase;
    -
    -public class JUnitFailureHackerTest extends TestBase {
    -
    -    JUnitFailureHacker hacker = new JUnitFailureHacker();
    -
    -    @Test
    -    public void shouldReplaceException() throws Exception {
    -        // given
    -        RuntimeException actualExc = new RuntimeException("foo");
    -        Failure failure = new Failure(Description.EMPTY, actualExc);
    -
    -        // when
    -        hacker.appendWarnings(failure, "unused stubbing");
    -
    -        // then
    -        assertEquals(ExceptionIncludingMockitoWarnings.class, failure.getException().getClass());
    -        assertEquals(actualExc, failure.getException().getCause());
    -        Assertions.assertThat(actualExc.getStackTrace())
    -                .isEqualTo(failure.getException().getStackTrace());
    -    }
    -
    -    @Test
    -    public void shouldAppendWarning() throws Exception {
    -        Failure failure = new Failure(Description.EMPTY, new RuntimeException("foo"));
    -
    -        // when
    -        hacker.appendWarnings(failure, "unused stubbing blah");
    -
    -        // then
    -        assertThat(failure.getException()).hasMessageContaining("unused stubbing blah");
    -    }
    -
    -    @Test
    -    public void shouldNotAppendWhenNoWarnings() throws Exception {
    -        RuntimeException ex = new RuntimeException("foo");
    -        Failure failure = new Failure(Description.EMPTY, ex);
    -
    -        // when
    -        hacker.appendWarnings(failure, "");
    -
    -        // then
    -        assertEquals(ex, failure.getException());
    -    }
    -
    -    @Test
    -    public void shouldNotAppendWhenNullWarnings() throws Exception {
    -        RuntimeException ex = new RuntimeException("foo");
    -        Failure failure = new Failure(Description.EMPTY, ex);
    -
    -        // when
    -        hacker.appendWarnings(failure, null);
    -
    -        // then
    -        assertEquals(ex, failure.getException());
    -    }
    -
    -    @Test
    -    public void shouldPrintTheWarningSoICanSeeIt() throws Exception {
    -        Failure failure = new Failure(Description.EMPTY, new RuntimeException("foo"));
    -
    -        // when
    -        hacker.appendWarnings(failure, "unused stubbing blah");
    -
    -        // then
    -        System.out.println(failure.getException());
    -    }
    -}
    diff --git a/src/test/java/org/mockito/internal/util/reflection/FieldInitializerTest.java b/src/test/java/org/mockito/internal/util/reflection/FieldInitializerTest.java
    index aecdcb4fb0..47a8769c4c 100644
    --- a/src/test/java/org/mockito/internal/util/reflection/FieldInitializerTest.java
    +++ b/src/test/java/org/mockito/internal/util/reflection/FieldInitializerTest.java
    @@ -6,7 +6,7 @@
     
     import static org.junit.Assert.*;
     import static org.mockito.BDDMockito.given;
    -import static org.mockito.Matchers.any;
    +import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.Mockito.mock;
     
     import java.lang.reflect.Field;
    diff --git a/src/test/java/org/mockito/internal/util/reflection/GenericMetadataSupportTest.java b/src/test/java/org/mockito/internal/util/reflection/GenericMetadataSupportTest.java
    index 6c6333cd56..cb1d73ab49 100644
    --- a/src/test/java/org/mockito/internal/util/reflection/GenericMetadataSupportTest.java
    +++ b/src/test/java/org/mockito/internal/util/reflection/GenericMetadataSupportTest.java
    @@ -116,16 +116,16 @@ public void can_get_raw_type_from_ParameterizedType() {
         public void can_get_type_variables_from_Class() {
             assertThat(inferFrom(GenericsNest.class).actualTypeArguments().keySet())
                     .hasSize(1)
    -                .extracting("name")
    +                .extracting(TypeVariable::getName)
                     .contains("K");
             assertThat(inferFrom(ListOfNumbers.class).actualTypeArguments().keySet()).isEmpty();
             assertThat(inferFrom(ListOfAnyNumbers.class).actualTypeArguments().keySet())
                     .hasSize(1)
    -                .extracting("name")
    +                .extracting(TypeVariable::getName)
                     .contains("N");
             assertThat(inferFrom(Map.class).actualTypeArguments().keySet())
                     .hasSize(2)
    -                .extracting("name")
    +                .extracting(TypeVariable::getName)
                     .contains("K", "V");
             assertThat(inferFrom(Serializable.class).actualTypeArguments().keySet()).isEmpty();
             assertThat(inferFrom(StringList.class).actualTypeArguments().keySet()).isEmpty();
    @@ -153,21 +153,21 @@ public void can_get_type_variables_from_ParameterizedType() {
                                     .actualTypeArguments()
                                     .keySet())
                     .hasSize(2)
    -                .extracting("name")
    +                .extracting(TypeVariable::getName)
                     .contains("K", "V");
             assertThat(
                             inferFrom(ListOfAnyNumbers.class.getGenericInterfaces()[0])
                                     .actualTypeArguments()
                                     .keySet())
                     .hasSize(1)
    -                .extracting("name")
    +                .extracting(TypeVariable::getName)
                     .contains("E");
             assertThat(
                             inferFrom(Integer.class.getGenericInterfaces()[0])
                                     .actualTypeArguments()
                                     .keySet())
                     .hasSize(1)
    -                .extracting("name")
    +                .extracting(TypeVariable::getName)
                     .contains("T");
             assertThat(
                             inferFrom(StringBuilder.class.getGenericInterfaces()[0])
    diff --git a/src/test/java/org/mockito/internal/util/reflection/LenientCopyToolTest.java b/src/test/java/org/mockito/internal/util/reflection/LenientCopyToolTest.java
    index e70d8aa3c4..310218a66f 100644
    --- a/src/test/java/org/mockito/internal/util/reflection/LenientCopyToolTest.java
    +++ b/src/test/java/org/mockito/internal/util/reflection/LenientCopyToolTest.java
    @@ -136,7 +136,7 @@ public void shouldContinueEvenIfThereAreProblemsCopyingSingleFieldValue() throws
                     .doThrow(new IllegalStateException())
                     .doNothing()
                     .when(tool.accessor)
    -                .set(any(Field.class), anyObject(), anyObject());
    +                .set(any(Field.class), any(), any());
     
             // when
             tool.copyToMock(from, to);
    diff --git a/src/test/java/org/mockito/internal/util/reflection/ParameterizedConstructorInstantiatorTest.java b/src/test/java/org/mockito/internal/util/reflection/ParameterizedConstructorInstantiatorTest.java
    index cb7549601c..9e63e8df69 100644
    --- a/src/test/java/org/mockito/internal/util/reflection/ParameterizedConstructorInstantiatorTest.java
    +++ b/src/test/java/org/mockito/internal/util/reflection/ParameterizedConstructorInstantiatorTest.java
    @@ -73,7 +73,7 @@ public void should_be_created_with_an_argument_resolver() throws Exception {
         public void should_instantiate_type_if_resolver_provide_matching_types() throws Exception {
             Observer observer = mock(Observer.class);
             Map map = mock(Map.class);
    -        given(resolver.resolveTypeInstances(ArgumentMatchers.[]>anyVararg()))
    +        given(resolver.resolveTypeInstances(ArgumentMatchers.[]>any()))
                     .willReturn(new Object[] {observer, map});
     
             new ParameterizedConstructorInstantiator(this, field("withMultipleConstructor"), resolver)
    @@ -104,7 +104,7 @@ this, field("withMultipleConstructor"), resolver)
     
         @Test
         public void should_report_failure_if_constructor_throws_exception() throws Exception {
    -        given(resolver.resolveTypeInstances(ArgumentMatchers.[]>anyVararg()))
    +        given(resolver.resolveTypeInstances(ArgumentMatchers.[]>any()))
                     .willReturn(new Object[] {null});
     
             try {
    @@ -120,7 +120,7 @@ this, field("withThrowingConstructor"), resolver)
         @Test
         public void should_instantiate_type_with_vararg_constructor() throws Exception {
             Observer[] vararg = new Observer[] {};
    -        given(resolver.resolveTypeInstances(ArgumentMatchers.[]>anyVararg()))
    +        given(resolver.resolveTypeInstances(ArgumentMatchers.[]>any()))
                     .willReturn(new Object[] {"", vararg});
     
             new ParameterizedConstructorInstantiator(this, field("withVarargConstructor"), resolver)
    diff --git a/src/test/java/org/mockito/internal/verification/DummyVerificationMode.java b/src/test/java/org/mockito/internal/verification/DummyVerificationMode.java
    index 92b3b640d4..6b5f4c028f 100644
    --- a/src/test/java/org/mockito/internal/verification/DummyVerificationMode.java
    +++ b/src/test/java/org/mockito/internal/verification/DummyVerificationMode.java
    @@ -13,4 +13,9 @@ public void verify(VerificationData data) {}
         public VerificationMode description(String description) {
             return new DummyVerificationMode();
         }
    +
    +    @Override
    +    public String toString() {
    +        return "Dummy verification mode";
    +    }
     }
    diff --git a/src/test/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunnerTest.java b/src/test/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunnerTest.java
    deleted file mode 100644
    index a9b487c137..0000000000
    --- a/src/test/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunnerTest.java
    +++ /dev/null
    @@ -1,80 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockito.runners;
    -
    -import static org.junit.Assert.assertEquals;
    -
    -import org.junit.Before;
    -import org.junit.Test;
    -import org.junit.runner.Description;
    -import org.junit.runner.manipulation.Filter;
    -import org.junit.runner.manipulation.NoTestsRemainException;
    -import org.junit.runner.notification.RunNotifier;
    -import org.junit.runners.model.InitializationError;
    -import org.mockito.internal.runners.InternalRunner;
    -import org.mockito.internal.util.ConsoleMockitoLogger;
    -import org.mockitoutil.TestBase;
    -
    -public class ConsoleSpammingMockitoJUnitRunnerTest extends TestBase {
    -
    -    private ConsoleSpammingMockitoJUnitRunner runner;
    -
    -    private MockitoLoggerStub loggerStub;
    -
    -    private RunNotifier notifier;
    -
    -    @Before
    -    public void setup() throws InitializationError {
    -        loggerStub = new MockitoLoggerStub();
    -        notifier = new RunNotifier();
    -    }
    -
    -    // TODO add sensible tests
    -
    -    @Test
    -    public void shouldDelegateToGetDescription() throws Exception {
    -        // given
    -        final Description expectedDescription = Description.createSuiteDescription(this.getClass());
    -        runner =
    -                new ConsoleSpammingMockitoJUnitRunner(
    -                        loggerStub,
    -                        new InternalRunnerStub() {
    -                            public Description getDescription() {
    -                                return expectedDescription;
    -                            }
    -                        });
    -
    -        // when
    -        Description description = runner.getDescription();
    -
    -        // then
    -        assertEquals(expectedDescription, description);
    -    }
    -
    -    public class MockitoLoggerStub extends ConsoleMockitoLogger {
    -
    -        StringBuilder loggedInfo = new StringBuilder();
    -
    -        public void log(Object what) {
    -            super.log(what);
    -            loggedInfo.append(what);
    -        }
    -
    -        public String getLoggedInfo() {
    -            return loggedInfo.toString();
    -        }
    -    }
    -
    -    static class InternalRunnerStub implements InternalRunner {
    -
    -        public Description getDescription() {
    -            return null;
    -        }
    -
    -        public void run(RunNotifier notifier) {}
    -
    -        public void filter(Filter filter) throws NoTestsRemainException {}
    -    }
    -}
    diff --git a/src/test/java/org/mockitousage/PlaygroundWithDemoOfUnclonedParametersProblemTest.java b/src/test/java/org/mockitousage/PlaygroundWithDemoOfUnclonedParametersProblemTest.java
    index e3289f344f..3ff4379f20 100644
    --- a/src/test/java/org/mockitousage/PlaygroundWithDemoOfUnclonedParametersProblemTest.java
    +++ b/src/test/java/org/mockitousage/PlaygroundWithDemoOfUnclonedParametersProblemTest.java
    @@ -7,7 +7,7 @@
     import static org.junit.Assert.assertEquals;
     import static org.mockito.BDDMockito.given;
     import static org.mockito.BDDMockito.willAnswer;
    -import static org.mockito.Matchers.any;
    +import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.Mockito.verify;
     
     import java.util.Date;
    diff --git a/src/test/java/org/mockitousage/annotation/DeprecatedAnnotationEngineApiTest.java b/src/test/java/org/mockitousage/annotation/DeprecatedAnnotationEngineApiTest.java
    deleted file mode 100644
    index a02434cdaf..0000000000
    --- a/src/test/java/org/mockitousage/annotation/DeprecatedAnnotationEngineApiTest.java
    +++ /dev/null
    @@ -1,74 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.annotation;
    -
    -import static org.junit.Assert.*;
    -
    -import org.junit.After;
    -import org.junit.Test;
    -import org.mockito.InjectMocks;
    -import org.mockito.Mock;
    -import org.mockito.MockitoAnnotations;
    -import org.mockito.configuration.AnnotationEngine;
    -import org.mockito.configuration.DefaultMockitoConfiguration;
    -import org.mockito.internal.configuration.ConfigurationAccess;
    -import org.mockito.internal.configuration.IndependentAnnotationEngine;
    -import org.mockitoutil.TestBase;
    -
    -public class DeprecatedAnnotationEngineApiTest extends TestBase {
    -
    -    @After
    -    public void goBackToDefaultConfiguration() {
    -        ConfigurationAccess.getConfig().overrideAnnotationEngine(null);
    -    }
    -
    -    class SimpleTestCase {
    -        @InjectMocks Tested tested = new Tested();
    -        @Mock Dependency mock;
    -    }
    -
    -    class Tested {
    -        Dependency dependency;
    -
    -        public void setDependency(Dependency dependency) {
    -            this.dependency = dependency;
    -        }
    -    }
    -
    -    class Dependency {}
    -
    -    @Test
    -    public void shouldInjectMocksIfThereIsNoUserDefinedEngine() throws Exception {
    -        // given
    -        AnnotationEngine defaultEngine = new DefaultMockitoConfiguration().getAnnotationEngine();
    -        ConfigurationAccess.getConfig().overrideAnnotationEngine(defaultEngine);
    -        SimpleTestCase test = new SimpleTestCase();
    -
    -        // when
    -        MockitoAnnotations.openMocks(test);
    -
    -        // then
    -        assertNotNull(test.mock);
    -        assertNotNull(test.tested.dependency);
    -        assertSame(test.mock, test.tested.dependency);
    -    }
    -
    -    @Test
    -    public void shouldRespectUsersEngine() throws Exception {
    -        // given
    -        AnnotationEngine customizedEngine = new IndependentAnnotationEngine() {
    -                    /**/
    -                };
    -        ConfigurationAccess.getConfig().overrideAnnotationEngine(customizedEngine);
    -        SimpleTestCase test = new SimpleTestCase();
    -
    -        // when
    -        MockitoAnnotations.openMocks(test);
    -
    -        // then
    -        assertNotNull(test.mock);
    -        assertNull(test.tested.dependency);
    -    }
    -}
    diff --git a/src/test/java/org/mockitousage/basicapi/MocksSerializationForAnnotationTest.java b/src/test/java/org/mockitousage/basicapi/MocksSerializationForAnnotationTest.java
    index 749beeb35b..736de4e933 100644
    --- a/src/test/java/org/mockitousage/basicapi/MocksSerializationForAnnotationTest.java
    +++ b/src/test/java/org/mockitousage/basicapi/MocksSerializationForAnnotationTest.java
    @@ -300,7 +300,7 @@ public void should_serialize_object_mock() throws Exception {
         @Test
         public void should_serialize_real_partial_mock() throws Exception {
             // given
    -        when(anyMock.matches(anyObject())).thenCallRealMethod();
    +        when(anyMock.matches(any())).thenCallRealMethod();
     
             // when
             ByteArrayOutputStream serialized = serializeMock(anyMock);
    diff --git a/src/test/java/org/mockitousage/basicapi/MocksSerializationTest.java b/src/test/java/org/mockitousage/basicapi/MocksSerializationTest.java
    index f1a40697b5..0bd6d5b502 100644
    --- a/src/test/java/org/mockitousage/basicapi/MocksSerializationTest.java
    +++ b/src/test/java/org/mockitousage/basicapi/MocksSerializationTest.java
    @@ -312,7 +312,7 @@ public void should_serialize_object_mock() throws Exception {
         public void should_serialize_real_partial_mock() throws Exception {
             // given
             Any mock = mock(Any.class, withSettings().serializable());
    -        when(mock.matches(anyObject())).thenCallRealMethod();
    +        when(mock.matches(any())).thenCallRealMethod();
     
             // when
             ByteArrayOutputStream serialized = serializeMock(mock);
    diff --git a/src/test/java/org/mockitousage/basicapi/ResetTest.java b/src/test/java/org/mockitousage/basicapi/ResetTest.java
    index 8f4d7238de..95f4730f70 100644
    --- a/src/test/java/org/mockitousage/basicapi/ResetTest.java
    +++ b/src/test/java/org/mockitousage/basicapi/ResetTest.java
    @@ -57,7 +57,7 @@ public void shouldRemoveAllStubbing() throws Exception {
         public void shouldRemoveAllInteractions() throws Exception {
             mock.simpleMethod(1);
             reset(mock);
    -        verifyZeroInteractions(mock);
    +        verifyNoInteractions(mock);
         }
     
         @Test
    @@ -75,14 +75,6 @@ public void shouldRemoveStubbingToString() throws Exception {
             assertThat(mockTwo.toString()).contains("Mock for IMethods");
         }
     
    -    @Test
    -    public void shouldStubbingNotBeTreatedAsInteraction() {
    -        when(mock.simpleMethod("one")).thenThrow(new RuntimeException());
    -        doThrow(new RuntimeException()).when(mock).simpleMethod("two");
    -        reset(mock);
    -        verifyZeroInteractions(mock);
    -    }
    -
         @Test
         public void shouldStubbingNotBeTreatedAsInteractionVerifyNoInteractions() {
             when(mock.simpleMethod("one")).thenThrow(new RuntimeException());
    diff --git a/src/test/java/org/mockitousage/basicapi/UsingVarargsTest.java b/src/test/java/org/mockitousage/basicapi/UsingVarargsTest.java
    index 4e9fc59c53..551c63790a 100644
    --- a/src/test/java/org/mockitousage/basicapi/UsingVarargsTest.java
    +++ b/src/test/java/org/mockitousage/basicapi/UsingVarargsTest.java
    @@ -121,18 +121,18 @@ public void shouldVerifyBooleanVarargs() {
         }
     
         @Test
    -    public void shouldVerifyWithAnyObject() {
    +    public void shouldVerifyWithAny() {
             Foo foo = Mockito.mock(Foo.class);
             foo.varArgs("");
    -        Mockito.verify(foo).varArgs((String[]) Mockito.anyObject());
    -        Mockito.verify(foo).varArgs((String) Mockito.anyObject());
    +        Mockito.verify(foo).varArgs((String[]) Mockito.any());
    +        Mockito.verify(foo).varArgs((String) Mockito.any());
         }
     
         @Test
         public void shouldVerifyWithNullVarArgArray() {
             Foo foo = Mockito.mock(Foo.class);
             foo.varArgs((String[]) null);
    -        Mockito.verify(foo).varArgs((String[]) Mockito.anyObject());
    +        Mockito.verify(foo).varArgs((String[]) Mockito.any());
             Mockito.verify(foo).varArgs((String[]) null);
         }
     
    @@ -175,7 +175,7 @@ public void shouldStubCorrectlyWhenDoubleStringAndMixedVarargsUsed() {
         // See bug #157
         public void shouldMatchEasilyEmptyVararg() throws Exception {
             // when
    -        when(mock.foo(anyVararg())).thenReturn(-1);
    +        when(mock.foo(any())).thenReturn(-1);
     
             // then
             assertEquals(-1, mock.foo());
    diff --git a/src/test/java/org/mockitousage/bugs/ActualInvocationHasNullArgumentNPEBugTest.java b/src/test/java/org/mockitousage/bugs/ActualInvocationHasNullArgumentNPEBugTest.java
    index c426e912b0..ac46998abb 100644
    --- a/src/test/java/org/mockitousage/bugs/ActualInvocationHasNullArgumentNPEBugTest.java
    +++ b/src/test/java/org/mockitousage/bugs/ActualInvocationHasNullArgumentNPEBugTest.java
    @@ -20,7 +20,7 @@ public interface Fun {
         public void shouldAllowPassingNullArgument() {
             // given
             Fun mockFun = mock(Fun.class);
    -        when(mockFun.doFun((String) anyObject())).thenReturn("value");
    +        when(mockFun.doFun((String) any())).thenReturn("value");
     
             // when
             mockFun.doFun(null);
    diff --git a/src/test/java/org/mockitousage/bugs/ClassCastExOnVerifyZeroInteractionsTest.java b/src/test/java/org/mockitousage/bugs/ClassCastExOnVerifyZeroInteractionsTest.java
    index e9b9c114aa..060aa04cd0 100644
    --- a/src/test/java/org/mockitousage/bugs/ClassCastExOnVerifyZeroInteractionsTest.java
    +++ b/src/test/java/org/mockitousage/bugs/ClassCastExOnVerifyZeroInteractionsTest.java
    @@ -5,7 +5,7 @@
     package org.mockitousage.bugs;
     
     import static org.mockito.Mockito.mock;
    -import static org.mockito.Mockito.verifyZeroInteractions;
    +import static org.mockito.Mockito.verifyNoInteractions;
     
     import org.junit.Test;
     import org.mockito.exceptions.misusing.WrongTypeOfReturnValue;
    @@ -29,7 +29,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable {
                                 }
                             });
             test.m1();
    -        verifyZeroInteractions(test);
    +        verifyNoInteractions(test);
         }
     
         @Test(expected = WrongTypeOfReturnValue.class)
    diff --git a/src/test/java/org/mockitousage/bugs/CompareMatcherTest.java b/src/test/java/org/mockitousage/bugs/CompareMatcherTest.java
    index 240199509f..dd6db3fbb8 100644
    --- a/src/test/java/org/mockitousage/bugs/CompareMatcherTest.java
    +++ b/src/test/java/org/mockitousage/bugs/CompareMatcherTest.java
    @@ -6,8 +6,8 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.mockito.AdditionalMatchers.leq;
    -import static org.mockito.Matchers.argThat;
    -import static org.mockito.Matchers.startsWith;
    +import static org.mockito.ArgumentMatchers.argThat;
    +import static org.mockito.ArgumentMatchers.startsWith;
     import static org.mockito.Mockito.mock;
     import static org.mockito.Mockito.when;
     
    diff --git a/src/test/java/org/mockitousage/bugs/IOOBExceptionShouldNotBeThrownWhenNotCodingFluentlyTest.java b/src/test/java/org/mockitousage/bugs/IOOBExceptionShouldNotBeThrownWhenNotCodingFluentlyTest.java
    index 3d8db84947..4885d24540 100644
    --- a/src/test/java/org/mockitousage/bugs/IOOBExceptionShouldNotBeThrownWhenNotCodingFluentlyTest.java
    +++ b/src/test/java/org/mockitousage/bugs/IOOBExceptionShouldNotBeThrownWhenNotCodingFluentlyTest.java
    @@ -6,7 +6,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.junit.Assert.fail;
    -import static org.mockito.Matchers.anyString;
    +import static org.mockito.ArgumentMatchers.anyString;
     import static org.mockito.Mockito.mock;
     import static org.mockito.Mockito.when;
     
    diff --git a/src/test/java/org/mockitousage/bugs/NPEWithCertainMatchersTest.java b/src/test/java/org/mockitousage/bugs/NPEWithCertainMatchersTest.java
    index 8864de8a22..108f5f114b 100644
    --- a/src/test/java/org/mockitousage/bugs/NPEWithCertainMatchersTest.java
    +++ b/src/test/java/org/mockitousage/bugs/NPEWithCertainMatchersTest.java
    @@ -4,7 +4,7 @@
      */
     package org.mockitousage.bugs;
     
    -import static org.mockito.Matchers.*;
    +import static org.mockito.ArgumentMatchers.*;
     import static org.mockito.Mockito.never;
     import static org.mockito.Mockito.verify;
     
    diff --git a/src/test/java/org/mockitousage/bugs/varargs/VarargsAndAnyObjectPicksUpExtraInvocationsTest.java b/src/test/java/org/mockitousage/bugs/varargs/VarargsAndAnyPicksUpExtraInvocationsTest.java
    similarity index 80%
    rename from src/test/java/org/mockitousage/bugs/varargs/VarargsAndAnyObjectPicksUpExtraInvocationsTest.java
    rename to src/test/java/org/mockitousage/bugs/varargs/VarargsAndAnyPicksUpExtraInvocationsTest.java
    index c9112fad8f..f6f4417c4a 100644
    --- a/src/test/java/org/mockitousage/bugs/varargs/VarargsAndAnyObjectPicksUpExtraInvocationsTest.java
    +++ b/src/test/java/org/mockitousage/bugs/varargs/VarargsAndAnyPicksUpExtraInvocationsTest.java
    @@ -4,7 +4,7 @@
      */
     package org.mockitousage.bugs.varargs;
     
    -import static org.mockito.Matchers.*;
    +import static org.mockito.ArgumentMatchers.*;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
     
    @@ -12,7 +12,7 @@
     import org.mockito.Mock;
     import org.mockitoutil.TestBase;
     
    -public class VarargsAndAnyObjectPicksUpExtraInvocationsTest extends TestBase {
    +public class VarargsAndAnyPicksUpExtraInvocationsTest extends TestBase {
         public interface TableBuilder {
             void newRow(String trAttributes, String... cells);
         }
    @@ -20,23 +20,23 @@ public interface TableBuilder {
         @Mock TableBuilder table;
     
         @Test
    -    public void shouldVerifyCorrectlyWithAnyVarargs() {
    +    public void shouldVerifyCorrectlyWithAny() {
             // when
             table.newRow("qux", "foo", "bar", "baz");
             table.newRow("abc", "def");
     
             // then
    -        verify(table, times(2)).newRow(anyString(), (String[]) anyVararg());
    +        verify(table, times(2)).newRow(anyString(), (String[]) any());
         }
     
         @Test
    -    public void shouldVerifyCorrectlyNumberOfInvocationsUsingAnyVarargAndEqualArgument() {
    +    public void shouldVerifyCorrectlyNumberOfInvocationsUsingAnyAndEqualArgument() {
             // when
             table.newRow("x", "foo", "bar", "baz");
             table.newRow("x", "def");
     
             // then
    -        verify(table, times(2)).newRow(eq("x"), (String[]) anyVararg());
    +        verify(table, times(2)).newRow(eq("x"), (String[]) any());
         }
     
         @Test
    diff --git a/src/test/java/org/mockitousage/bugs/varargs/VarargsNotPlayingWithAnyObjectTest.java b/src/test/java/org/mockitousage/bugs/varargs/VarargsNotPlayingWithAnyTest.java
    similarity index 63%
    rename from src/test/java/org/mockitousage/bugs/varargs/VarargsNotPlayingWithAnyObjectTest.java
    rename to src/test/java/org/mockitousage/bugs/varargs/VarargsNotPlayingWithAnyTest.java
    index a77782b1d0..6e11a6a7fd 100644
    --- a/src/test/java/org/mockitousage/bugs/varargs/VarargsNotPlayingWithAnyObjectTest.java
    +++ b/src/test/java/org/mockitousage/bugs/varargs/VarargsNotPlayingWithAnyTest.java
    @@ -5,9 +5,8 @@
     package org.mockitousage.bugs.varargs;
     
     import static org.junit.Assert.assertEquals;
    -import static org.mockito.Mockito.anyObject;
    +import static org.mockito.Mockito.any;
     import static org.mockito.Mockito.anyString;
    -import static org.mockito.Mockito.anyVararg;
     import static org.mockito.Mockito.eq;
     import static org.mockito.Mockito.never;
     import static org.mockito.Mockito.verify;
    @@ -18,7 +17,7 @@
     import org.mockitoutil.TestBase;
     
     // see issue 62
    -public class VarargsNotPlayingWithAnyObjectTest extends TestBase {
    +public class VarargsNotPlayingWithAnyTest extends TestBase {
     
         interface VarargMethod {
             Object run(String... args);
    @@ -27,27 +26,27 @@ interface VarargMethod {
         @Mock VarargMethod mock;
     
         @Test
    -    public void shouldMatchAnyVararg() {
    +    public void shouldMatchAny() {
             mock.run("a", "b");
     
             verify(mock).run(anyString(), anyString());
    -        verify(mock).run((String) anyObject(), (String) anyObject());
    +        verify(mock).run((String) any(), (String) any());
     
    -        verify(mock).run((String[]) anyVararg());
    +        verify(mock).run((String[]) any());
     
             verify(mock, never()).run();
             verify(mock, never()).run(anyString(), eq("f"));
         }
     
         @Test
    -    public void shouldAllowUsingAnyObjectForVarArgs() {
    +    public void shouldAllowUsinganyForVarArgs() {
             mock.run("a", "b");
    -        verify(mock).run((String[]) anyObject());
    +        verify(mock).run((String[]) any());
         }
     
         @Test
    -    public void shouldStubUsingAnyVarargs() {
    -        when(mock.run((String[]) anyVararg())).thenReturn("foo");
    +    public void shouldStubUsingAny() {
    +        when(mock.run((String[]) any())).thenReturn("foo");
     
             assertEquals("foo", mock.run("a", "b"));
         }
    diff --git a/src/test/java/org/mockitousage/configuration/CustomizedAnnotationForSmartMockTest.java b/src/test/java/org/mockitousage/configuration/CustomizedAnnotationForSmartMockTest.java
    deleted file mode 100644
    index b487063c26..0000000000
    --- a/src/test/java/org/mockitousage/configuration/CustomizedAnnotationForSmartMockTest.java
    +++ /dev/null
    @@ -1,65 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.configuration;
    -
    -import static java.lang.annotation.ElementType.FIELD;
    -
    -import static org.junit.Assert.assertEquals;
    -import static org.mockito.Mockito.verify;
    -
    -import java.lang.annotation.Retention;
    -import java.lang.annotation.RetentionPolicy;
    -import java.lang.annotation.Target;
    -import java.lang.reflect.Field;
    -import java.lang.reflect.Modifier;
    -import java.util.Set;
    -
    -import org.junit.Test;
    -import org.mockito.Mockito;
    -import org.mockito.configuration.MockitoConfiguration;
    -import org.mockito.internal.configuration.InjectingAnnotationEngine;
    -import org.mockitousage.IMethods;
    -import org.mockitoutil.TestBase;
    -
    -/**
    - * @see MockitoConfiguration#getAnnotationEngine() for the custom smartmock injection engine
    - */
    -public class CustomizedAnnotationForSmartMockTest extends TestBase {
    -
    -    @SmartMock IMethods smartMock;
    -
    -    @Test
    -    public void shouldUseCustomAnnotation() {
    -        assertEquals(
    -                "SmartMock should return empty String by default", "", smartMock.simpleMethod(1));
    -        verify(smartMock).simpleMethod(1);
    -    }
    -
    -    @Target({FIELD})
    -    @Retention(RetentionPolicy.RUNTIME)
    -    public @interface SmartMock {}
    -
    -    public static class CustomInjectingAnnotationEngine extends InjectingAnnotationEngine {
    -        @Override
    -        protected void onInjection(
    -                Object testClassInstance,
    -                Class clazz,
    -                Set mockDependentFields,
    -                Set mocks) {
    -            for (Field field : clazz.getDeclaredFields()) {
    -                if (field.isAnnotationPresent(SmartMock.class)) {
    -                    field.setAccessible(true);
    -                    try {
    -                        field.set(
    -                                Modifier.isStatic(field.getModifiers()) ? null : testClassInstance,
    -                                Mockito.mock(field.getType(), Mockito.RETURNS_SMART_NULLS));
    -                    } catch (Exception exception) {
    -                        throw new AssertionError(exception.getMessage());
    -                    }
    -                }
    -            }
    -        }
    -    }
    -}
    diff --git a/src/test/java/org/mockitousage/customization/BDDMockitoTest.java b/src/test/java/org/mockitousage/customization/BDDMockitoTest.java
    index 89ed109e5e..db29117be6 100644
    --- a/src/test/java/org/mockitousage/customization/BDDMockitoTest.java
    +++ b/src/test/java/org/mockitousage/customization/BDDMockitoTest.java
    @@ -262,27 +262,11 @@ public void should_pass_for_expected_behavior_that_happened() {
             then(mock).shouldHaveNoMoreInteractions();
         }
     
    -    @Test
    -    public void should_validate_that_mock_did_not_have_any_interactions() {
    -        then(mock).shouldHaveZeroInteractions();
    -    }
    -
         @Test
         public void should_validate_that_mock_had_no_interactions() {
             then(mock).shouldHaveNoInteractions();
         }
     
    -    @Test
    -    public void should_fail_when_mock_had_unwanted_interactions() {
    -        mock.booleanObjectReturningMethod();
    -
    -        try {
    -            then(mock).shouldHaveZeroInteractions();
    -            fail("should have reported this interaction wasn't wanted");
    -        } catch (NoInteractionsWanted expected) {
    -        }
    -    }
    -
         @Test
         public void should_fail_when_mock_had_more_interactions_than_expected() {
             mock.booleanObjectReturningMethod();
    @@ -336,7 +320,7 @@ public void should_pass_fluent_bdd_scenario() {
             person.ride(bike);
     
             then(person).should(times(2)).ride(bike);
    -        then(police).shouldHaveZeroInteractions();
    +        then(police).shouldHaveNoInteractions();
         }
     
         @Test
    diff --git a/src/test/java/org/mockitousage/debugging/NewMockito.java b/src/test/java/org/mockitousage/debugging/NewMockito.java
    deleted file mode 100644
    index 07cb625c95..0000000000
    --- a/src/test/java/org/mockitousage/debugging/NewMockito.java
    +++ /dev/null
    @@ -1,17 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.debugging;
    -
    -import org.mockito.Mockito;
    -import org.mockito.MockitoDebugger;
    -import org.mockito.internal.debugging.MockitoDebuggerImpl;
    -
    -// TODO get rid when debug() finally is out
    -public class NewMockito extends Mockito {
    -
    -    public static MockitoDebugger debug() {
    -        return new MockitoDebuggerImpl();
    -    }
    -}
    diff --git a/src/test/java/org/mockitousage/debugging/StubbingLookupListenerCallbackTest.java b/src/test/java/org/mockitousage/debugging/StubbingLookupListenerCallbackTest.java
    index 5a5783388a..aa22e538a2 100644
    --- a/src/test/java/org/mockitousage/debugging/StubbingLookupListenerCallbackTest.java
    +++ b/src/test/java/org/mockitousage/debugging/StubbingLookupListenerCallbackTest.java
    @@ -94,7 +94,7 @@ public void should_not_call_listener_when_mock_is_not_called() {
             doReturn("java").when(mock).giveMeSomeString("coffee");
     
             // then
    -        verifyZeroInteractions(listener);
    +        verifyNoInteractions(listener);
         }
     
         @Test
    @@ -170,7 +170,7 @@ public void should_clear_listeners() {
             mock.doSomething("foo");
     
             // then
    -        verifyZeroInteractions(listener, listener2);
    +        verifyNoInteractions(listener, listener2);
         }
     
         @Test
    diff --git a/src/test/java/org/mockitousage/examples/use/ExampleTest.java b/src/test/java/org/mockitousage/examples/use/ExampleTest.java
    index ec2f407103..4a068e388c 100644
    --- a/src/test/java/org/mockitousage/examples/use/ExampleTest.java
    +++ b/src/test/java/org/mockitousage/examples/use/ExampleTest.java
    @@ -89,7 +89,7 @@ public void shouldPersistRecalculatedArticle() {
     
             InOrder inOrder = inOrder(mockDatabase, mockCalculator);
     
    -        inOrder.verify(mockCalculator).countNumberOfRelatedArticles((Article) anyObject());
    -        inOrder.verify(mockDatabase, atLeastOnce()).save((Article) anyObject());
    +        inOrder.verify(mockCalculator).countNumberOfRelatedArticles(any());
    +        inOrder.verify(mockDatabase, atLeastOnce()).save(any());
         }
     }
    diff --git a/src/test/java/org/mockitousage/junitrunner/VerboseMockitoRunnerTest.java b/src/test/java/org/mockitousage/junitrunner/VerboseMockitoRunnerTest.java
    deleted file mode 100644
    index d6cfd6ef02..0000000000
    --- a/src/test/java/org/mockitousage/junitrunner/VerboseMockitoRunnerTest.java
    +++ /dev/null
    @@ -1,90 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.junitrunner;
    -
    -import static org.junit.Assert.assertEquals;
    -import static org.junit.Assert.assertTrue;
    -import static org.mockito.Mockito.*;
    -
    -import junit.framework.TestCase;
    -import org.junit.Ignore;
    -import org.junit.Test;
    -import org.junit.runner.JUnitCore;
    -import org.junit.runner.Result;
    -import org.junit.runner.RunWith;
    -import org.mockito.Mock;
    -import org.mockito.internal.exceptions.ExceptionIncludingMockitoWarnings;
    -import org.mockito.runners.VerboseMockitoJUnitRunner;
    -import org.mockitousage.IMethods;
    -import org.mockitoutil.TestBase;
    -
    -// @RunWith(ConsoleSpammingMockitoJUnitRunner.class)
    -@RunWith(VerboseMockitoJUnitRunner.class)
    -// TODO
    -public class VerboseMockitoRunnerTest extends TestBase {
    -
    -    @Mock private IMethods mock;
    -
    -    public static class NoWarnings {
    -
    -        @Test
    -        @Ignore
    -        public void test() {
    -            IMethods mock = mock(IMethods.class);
    -            mock.simpleMethod(1);
    -            mock.otherMethod();
    -
    -            verify(mock).simpleMethod(1);
    -            throw new RuntimeException("boo");
    -        }
    -    }
    -
    -    public static class ContainsWarnings extends TestCase {
    -
    -        public ContainsWarnings() {
    -            super("test");
    -        }
    -
    -        public void testIgnored() {}
    -
    -        public void _test() {
    -            IMethods mock = mock(IMethods.class);
    -
    -            // some stubbing
    -            when(mock.simpleMethod(1)).thenReturn("foo");
    -            when(mock.otherMethod()).thenReturn("foo");
    -            when(mock.booleanObjectReturningMethod()).thenReturn(false);
    -
    -            // stub called with different args:
    -            String ret = mock.simpleMethod(2);
    -
    -            // assertion fails due to stub called with different args
    -            assertEquals("foo", ret);
    -        }
    -    }
    -
    -    public void cleanStackTraces() {
    -        makeStackTracesClean();
    -    }
    -
    -    @Test
    -    @Ignore
    -    public void shouldContainWarnings() throws Exception {
    -        // when
    -        Result result = new JUnitCore().run(new ContainsWarnings());
    -        // then
    -        assertEquals(1, result.getFailures().size());
    -        Throwable exception = result.getFailures().get(0).getException();
    -        assertTrue(exception instanceof ExceptionIncludingMockitoWarnings);
    -    }
    -
    -    @Test
    -    @Ignore
    -    public void shouldNotContainWarnings() throws Exception {
    -        Result result = new JUnitCore().run(NoWarnings.class);
    -        assertEquals(1, result.getFailures().size());
    -        assertEquals("boo", result.getFailures().get(0).getException().getMessage());
    -    }
    -}
    diff --git a/src/test/java/org/mockitousage/matchers/AnyXMatchersAcceptNullsTest.java b/src/test/java/org/mockitousage/matchers/AnyXMatchersAcceptNullsTest.java
    index 4701870a7d..2f93ea1b36 100644
    --- a/src/test/java/org/mockitousage/matchers/AnyXMatchersAcceptNullsTest.java
    +++ b/src/test/java/org/mockitousage/matchers/AnyXMatchersAcceptNullsTest.java
    @@ -5,7 +5,7 @@
     package org.mockitousage.matchers;
     
     import static org.junit.Assert.assertEquals;
    -import static org.mockito.Matchers.*;
    +import static org.mockito.ArgumentMatchers.*;
     import static org.mockito.Mockito.when;
     
     import org.junit.Before;
    @@ -31,29 +31,6 @@ public void shouldAcceptNullsInAnyMatcher() {
             assertEquals(null, mock.forObject(null));
         }
     
    -    @Test
    -    public void shouldAcceptNullsInAnyObjectMatcher() {
    -        when(mock.oneArg((Object) anyObject())).thenReturn("matched");
    -
    -        assertEquals(null, mock.forObject(null));
    -    }
    -
    -    @Test
    -    public void shouldNotAcceptNullInAnyXMatchers() {
    -        when(mock.oneArg(anyString())).thenReturn("0");
    -        when(mock.forList(anyListOf(String.class))).thenReturn("1");
    -        when(mock.forMap(anyMapOf(String.class, String.class))).thenReturn("2");
    -        when(mock.forCollection(anyCollectionOf(String.class))).thenReturn("3");
    -        when(mock.forSet(anySetOf(String.class))).thenReturn("4");
    -
    -        assertEquals(null, mock.oneArg((Object) null));
    -        assertEquals(null, mock.oneArg((String) null));
    -        assertEquals(null, mock.forList(null));
    -        assertEquals(null, mock.forMap(null));
    -        assertEquals(null, mock.forCollection(null));
    -        assertEquals(null, mock.forSet(null));
    -    }
    -
         @Test
         public void shouldNotAcceptNullInAllAnyPrimitiveWrapperMatchers() {
             when(mock.forInteger(anyInt())).thenReturn("0");
    diff --git a/src/test/java/org/mockitousage/matchers/CustomMatcherDoesYieldCCETest.java b/src/test/java/org/mockitousage/matchers/CustomMatcherDoesYieldCCETest.java
    index 540f36a321..66e6a20109 100644
    --- a/src/test/java/org/mockitousage/matchers/CustomMatcherDoesYieldCCETest.java
    +++ b/src/test/java/org/mockitousage/matchers/CustomMatcherDoesYieldCCETest.java
    @@ -5,7 +5,7 @@
     package org.mockitousage.matchers;
     
     import static org.junit.Assert.fail;
    -import static org.mockito.Matchers.argThat;
    +import static org.mockito.ArgumentMatchers.argThat;
     import static org.mockito.Mockito.verify;
     
     import org.junit.Test;
    diff --git a/src/test/java/org/mockitousage/matchers/CustomMatchersTest.java b/src/test/java/org/mockitousage/matchers/CustomMatchersTest.java
    index ddcb32a7b6..c8dc40de2a 100644
    --- a/src/test/java/org/mockitousage/matchers/CustomMatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/CustomMatchersTest.java
    @@ -7,7 +7,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.junit.Assert.assertEquals;
     import static org.junit.Assert.fail;
    -import static org.mockito.Matchers.*;
    +import static org.mockito.ArgumentMatchers.*;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
     
    diff --git a/src/test/java/org/mockitousage/matchers/GenericMatchersTest.java b/src/test/java/org/mockitousage/matchers/GenericMatchersTest.java
    index 83a53bd1ce..c779c5bd4c 100644
    --- a/src/test/java/org/mockitousage/matchers/GenericMatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/GenericMatchersTest.java
    @@ -4,7 +4,7 @@
      */
     package org.mockitousage.matchers;
     
    -import static org.mockito.Matchers.anyObject;
    +import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.Mockito.when;
     
     import java.util.Date;
    @@ -29,7 +29,7 @@ private interface Foo {
         @Test
         public void shouldCompile() {
             when(sorter.convertDate(new Date())).thenReturn("one");
    -        when(sorter.convertDate((Date) anyObject())).thenReturn("two");
    +        when(sorter.convertDate((Date) any())).thenReturn("two");
     
             // following requires warning suppression but allows setting anyList()
             when(sorter.sort(ArgumentMatchers.anyList())).thenReturn(null);
    diff --git a/src/test/java/org/mockitousage/matchers/InvalidUseOfMatchersTest.java b/src/test/java/org/mockitousage/matchers/InvalidUseOfMatchersTest.java
    index 338c072324..ecd77cada4 100644
    --- a/src/test/java/org/mockitousage/matchers/InvalidUseOfMatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/InvalidUseOfMatchersTest.java
    @@ -7,7 +7,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.junit.Assert.fail;
     import static org.mockito.ArgumentMatchers.any;
    -import static org.mockito.Matchers.eq;
    +import static org.mockito.ArgumentMatchers.eq;
     import static org.mockito.Mockito.doNothing;
     import static org.mockito.Mockito.when;
     
    @@ -41,8 +41,8 @@ public void should_detect_wrong_number_of_matchers_when_stubbing() {
         @Test
         public void should_detect_stupid_use_of_matchers_when_verifying() {
             mock.oneArg(true);
    -        eq("that's the stupid way");
    -        eq("of using matchers");
    +        Object ignored = eq("that's the stupid way");
    +        ignored = eq("of using matchers");
             try {
                 Mockito.verify(mock).oneArg(true);
                 fail();
    diff --git a/src/test/java/org/mockitousage/matchers/MatchersMixedWithRawArgumentsTest.java b/src/test/java/org/mockitousage/matchers/MatchersMixedWithRawArgumentsTest.java
    index bea1960fd3..b90b547b67 100644
    --- a/src/test/java/org/mockitousage/matchers/MatchersMixedWithRawArgumentsTest.java
    +++ b/src/test/java/org/mockitousage/matchers/MatchersMixedWithRawArgumentsTest.java
    @@ -4,8 +4,8 @@
      */
     package org.mockitousage.matchers;
     
    -import static org.mockito.Matchers.anyBoolean;
    -import static org.mockito.Matchers.anyString;
    +import static org.mockito.ArgumentMatchers.anyBoolean;
    +import static org.mockito.ArgumentMatchers.anyString;
     import static org.mockito.Mockito.verify;
     
     import org.junit.Ignore;
    @@ -31,7 +31,7 @@ public class MatchersMixedWithRawArgumentsTest extends TestBase {
         // float: max-1
     
         // 1. how objenesis deal with primitive arrays (like byte[])?
    -    // 2. Analisys of all matchers used by R2 project finished before anyObject() and so far proves
    +    // 2. Analisys of all matchers used by R2 project finished before any() and so far proves
         // it's a good idea.
     
         @Ignore("prototyping new feature that allows to avoid eq() matchers when raw args passed")
    diff --git a/src/test/java/org/mockitousage/matchers/MatchersTest.java b/src/test/java/org/mockitousage/matchers/MatchersTest.java
    index 606cc76ec6..c266862977 100644
    --- a/src/test/java/org/mockitousage/matchers/MatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/MatchersTest.java
    @@ -20,7 +20,7 @@
     import static org.mockito.AdditionalMatchers.not;
     import static org.mockito.AdditionalMatchers.or;
     import static org.mockito.ArgumentMatchers.nullable;
    -import static org.mockito.Matchers.eq;
    +import static org.mockito.ArgumentMatchers.eq;
     import static org.mockito.Mockito.any;
     import static org.mockito.Mockito.anyBoolean;
     import static org.mockito.Mockito.anyByte;
    @@ -29,7 +29,6 @@
     import static org.mockito.Mockito.anyFloat;
     import static org.mockito.Mockito.anyInt;
     import static org.mockito.Mockito.anyLong;
    -import static org.mockito.Mockito.anyObject;
     import static org.mockito.Mockito.anyShort;
     import static org.mockito.Mockito.anyString;
     import static org.mockito.Mockito.contains;
    @@ -48,12 +47,12 @@
     
     import java.math.BigDecimal;
     import java.util.ArrayList;
    -import java.util.HashMap;
     import java.util.List;
     import java.util.RandomAccess;
     import java.util.regex.Pattern;
     
     import org.junit.Test;
    +import org.mockito.ArgumentMatchers;
     import org.mockito.Mockito;
     import org.mockito.exceptions.verification.WantedButNotInvoked;
     import org.mockito.exceptions.verification.opentest4j.ArgumentsAreDifferent;
    @@ -284,9 +283,7 @@ public void any_T_matcher() {
             when(mock.oneArg(anyInt())).thenReturn("5");
             when(mock.oneArg(anyLong())).thenReturn("6");
             when(mock.oneArg(anyShort())).thenReturn("7");
    -        when(mock.oneArg((String) anyObject())).thenReturn("8");
    -        when(mock.oneArg(Mockito.anyObject())).thenReturn("9");
    -        when(mock.oneArg(any(RandomAccess.class))).thenReturn("10");
    +        when(mock.oneArg(any(RandomAccess.class))).thenReturn("8");
     
             assertEquals("0", mock.oneArg(true));
             assertEquals("0", mock.oneArg(false));
    @@ -298,12 +295,8 @@ public void any_T_matcher() {
             assertEquals("5", mock.oneArg(1));
             assertEquals("6", mock.oneArg(1L));
             assertEquals("7", mock.oneArg((short) 1));
    -        assertEquals("8", mock.oneArg("Test"));
     
    -        assertEquals("9", mock.oneArg(new Object()));
    -        assertEquals("9", mock.oneArg(new HashMap()));
    -
    -        assertEquals("10", mock.oneArg(new ArrayList()));
    +        assertEquals("8", mock.oneArg(new ArrayList()));
         }
     
         @Test
    @@ -455,14 +448,14 @@ public void null_matcher() {
     
         @Test
         public void null_matcher_for_primitive_wrappers() {
    -        when(mock.forBoolean(isNull(Boolean.class))).thenReturn("ok");
    -        when(mock.forInteger(isNull(Integer.class))).thenReturn("ok");
    -        when(mock.forLong(isNull(Long.class))).thenReturn("ok");
    -        when(mock.forByte(isNull(Byte.class))).thenReturn("ok");
    -        when(mock.forShort(isNull(Short.class))).thenReturn("ok");
    -        when(mock.forCharacter(isNull(Character.class))).thenReturn("ok");
    -        when(mock.forDouble(isNull(Double.class))).thenReturn("ok");
    -        when(mock.forFloat(isNull(Float.class))).thenReturn("ok");
    +        when(mock.forBoolean(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forInteger(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forLong(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forByte(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forShort(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forCharacter(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forDouble(ArgumentMatchers.isNull())).thenReturn("ok");
    +        when(mock.forFloat(ArgumentMatchers.isNull())).thenReturn("ok");
     
             assertEquals("ok", mock.forBoolean(null));
             assertEquals("ok", mock.forInteger(null));
    diff --git a/src/test/java/org/mockitousage/matchers/MoreMatchersTest.java b/src/test/java/org/mockitousage/matchers/MoreMatchersTest.java
    index 825902f7b4..c68d5482dd 100644
    --- a/src/test/java/org/mockitousage/matchers/MoreMatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/MoreMatchersTest.java
    @@ -6,7 +6,7 @@
     
     import static org.assertj.core.api.Assertions.assertThatThrownBy;
     import static org.junit.Assert.assertEquals;
    -import static org.mockito.Matchers.*;
    +import static org.mockito.ArgumentMatchers.*;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
     
    @@ -15,7 +15,6 @@
     import org.assertj.core.api.ThrowableAssert;
     import org.junit.Test;
     import org.mockito.Mock;
    -import org.mockito.Mockito;
     import org.mockito.exceptions.verification.opentest4j.ArgumentsAreDifferent;
     import org.mockitousage.IMethods;
     import org.mockitoutil.TestBase;
    @@ -31,14 +30,6 @@ public void should_help_out_with_unnecessary_casting() {
             assertEquals("string", mock.objectArgMethod("foo"));
         }
     
    -    @Test
    -    public void any_should_be_actual_alias_to_anyObject() {
    -        mock.simpleMethod((Object) null);
    -
    -        verify(mock).simpleMethod(Mockito.any());
    -        verify(mock).simpleMethod(Mockito.anyObject());
    -    }
    -
         @Test
         public void any_class_should_be_actual_alias_to_isA() {
             mock.simpleMethod(new ArrayList());
    @@ -66,65 +57,4 @@ public void call() {
                             })
                     .isInstanceOf(ArgumentsAreDifferent.class);
         }
    -
    -    @Test
    -    public void should_help_out_with_unnecessary_casting_of_lists() {
    -        // Below yields compiler warning:
    -        // when(mock.listArgMethod(anyList())).thenReturn("list");
    -        when(mock.listArgMethod(anyListOf(String.class))).thenReturn("list");
    -
    -        assertEquals("list", mock.listArgMethod(new LinkedList()));
    -        assertEquals("list", mock.listArgMethod(Collections.emptyList()));
    -    }
    -
    -    @Test
    -    public void should_help_out_with_unnecessary_casting_of_sets() {
    -        // Below yields compiler warning:
    -        // when(mock.setArgMethod(anySet())).thenReturn("set");
    -        when(mock.setArgMethod(anySetOf(String.class))).thenReturn("set");
    -
    -        assertEquals("set", mock.setArgMethod(new HashSet()));
    -        assertEquals("set", mock.setArgMethod(Collections.emptySet()));
    -    }
    -
    -    @Test
    -    public void should_help_out_with_unnecessary_casting_of_maps() {
    -        // Below yields compiler warning:
    -        // when(mock.setArgMethod(anySet())).thenReturn("set");
    -        when(mock.forMap(anyMapOf(String.class, String.class))).thenReturn("map");
    -
    -        assertEquals("map", mock.forMap(new HashMap()));
    -        assertEquals("map", mock.forMap(Collections.emptyMap()));
    -    }
    -
    -    @Test
    -    public void should_help_out_with_unnecessary_casting_of_collections() {
    -        // Below yields compiler warning:
    -        // when(mock.setArgMethod(anySet())).thenReturn("set");
    -        when(mock.collectionArgMethod(anyCollectionOf(String.class))).thenReturn("collection");
    -
    -        assertEquals("collection", mock.collectionArgMethod(new ArrayList()));
    -        assertEquals("collection", mock.collectionArgMethod(Collections.emptyList()));
    -    }
    -
    -    @Test
    -    public void should_help_out_with_unnecessary_casting_of_iterables() {
    -        // Below yields compiler warning:
    -        // when(mock.setArgMethod(anySet())).thenReturn("set");
    -        when(mock.iterableArgMethod(anyIterableOf(String.class))).thenReturn("iterable");
    -
    -        assertEquals("iterable", mock.iterableArgMethod(new ArrayList()));
    -        assertEquals("iterable", mock.iterableArgMethod(Collections.emptyList()));
    -    }
    -
    -    @Test
    -    public void should_help_out_with_unnecessary_casting_of_nullity_checks() {
    -        when(mock.objectArgMethod(isNull(LinkedList.class))).thenReturn("string");
    -        when(mock.objectArgMethod(notNull(LinkedList.class))).thenReturn("string");
    -        when(mock.objectArgMethod(isNotNull(LinkedList.class))).thenReturn("string");
    -
    -        assertEquals("string", mock.objectArgMethod(null));
    -        assertEquals("string", mock.objectArgMethod("foo"));
    -        assertEquals("string", mock.objectArgMethod("foo"));
    -    }
     }
    diff --git a/src/test/java/org/mockitousage/matchers/NewMatchersTest.java b/src/test/java/org/mockitousage/matchers/NewMatchersTest.java
    index 6b26311ecb..69ff3c41ef 100644
    --- a/src/test/java/org/mockitousage/matchers/NewMatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/NewMatchersTest.java
    @@ -29,51 +29,51 @@ public void setUp() {
     
         @Test
         public void shouldAllowAnyList() {
    -        when(mock.forList(anyListOf(String.class))).thenReturn("matched");
    +        when(mock.forList(anyList())).thenReturn("matched");
     
             assertEquals("matched", mock.forList(Arrays.asList("x", "y")));
             assertEquals(null, mock.forList(null));
     
    -        verify(mock, times(1)).forList(anyListOf(String.class));
    +        verify(mock, times(1)).forList(anyList());
         }
     
         @Test
         public void shouldAllowAnyCollection() {
    -        when(mock.forCollection(anyCollectionOf(String.class))).thenReturn("matched");
    +        when(mock.forCollection(anyCollection())).thenReturn("matched");
     
             assertEquals("matched", mock.forCollection(Arrays.asList("x", "y")));
             assertEquals(null, mock.forCollection(null));
     
    -        verify(mock, times(1)).forCollection(anyCollectionOf(String.class));
    +        verify(mock, times(1)).forCollection(anyCollection());
         }
     
         @Test
         public void shouldAllowAnyMap() {
    -        when(mock.forMap(anyMapOf(String.class, String.class))).thenReturn("matched");
    +        when(mock.forMap(anyMap())).thenReturn("matched");
     
             assertEquals("matched", mock.forMap(new HashMap()));
             assertEquals(null, mock.forMap(null));
     
    -        verify(mock, times(1)).forMap(anyMapOf(String.class, String.class));
    +        verify(mock, times(1)).forMap(anyMap());
         }
     
         @Test
         public void shouldAllowAnySet() {
    -        when(mock.forSet(anySetOf(String.class))).thenReturn("matched");
    +        when(mock.forSet(anySet())).thenReturn("matched");
     
             assertEquals("matched", mock.forSet(new HashSet()));
             assertEquals(null, mock.forSet(null));
     
    -        verify(mock, times(1)).forSet(anySetOf(String.class));
    +        verify(mock, times(1)).forSet(anySet());
         }
     
         @Test
         public void shouldAllowAnyIterable() {
    -        when(mock.forIterable(anyIterableOf(String.class))).thenReturn("matched");
    +        when(mock.forIterable(anyIterable())).thenReturn("matched");
     
             assertEquals("matched", mock.forIterable(new HashSet()));
             assertEquals(null, mock.forIterable(null));
     
    -        verify(mock, times(1)).forIterable(anyIterableOf(String.class));
    +        verify(mock, times(1)).forIterable(anyIterable());
         }
     }
    diff --git a/src/test/java/org/mockitousage/matchers/ReflectionMatchersTest.java b/src/test/java/org/mockitousage/matchers/ReflectionMatchersTest.java
    index a2d497e586..eac883ca0e 100644
    --- a/src/test/java/org/mockitousage/matchers/ReflectionMatchersTest.java
    +++ b/src/test/java/org/mockitousage/matchers/ReflectionMatchersTest.java
    @@ -4,7 +4,7 @@
      */
     package org.mockitousage.matchers;
     
    -import static org.mockito.Matchers.refEq;
    +import static org.mockito.ArgumentMatchers.refEq;
     import static org.mockito.Mockito.mock;
     import static org.mockito.Mockito.verify;
     
    diff --git a/src/test/java/org/mockitousage/misuse/DescriptiveMessagesOnMisuseTest.java b/src/test/java/org/mockitousage/misuse/DescriptiveMessagesOnMisuseTest.java
    index 196f9d0675..a61837462a 100644
    --- a/src/test/java/org/mockitousage/misuse/DescriptiveMessagesOnMisuseTest.java
    +++ b/src/test/java/org/mockitousage/misuse/DescriptiveMessagesOnMisuseTest.java
    @@ -39,9 +39,6 @@ public void tryDescriptiveMessagesOnMisuse() {
             //        verifyNoMoreInteractions();
             //        verifyNoMoreInteractions(null);
             //        verifyNoMoreInteractions("");
    -        //        verifyZeroInteractions();
    -        //        verifyZeroInteractions(null);
    -        //        verifyZeroInteractions("");
             //
             //        inOrder();
             //        inOrder(null);
    diff --git a/src/test/java/org/mockitousage/misuse/DetectingMisusedMatchersTest.java b/src/test/java/org/mockitousage/misuse/DetectingMisusedMatchersTest.java
    index 04690b9dd9..a4b7294f2f 100644
    --- a/src/test/java/org/mockitousage/misuse/DetectingMisusedMatchersTest.java
    +++ b/src/test/java/org/mockitousage/misuse/DetectingMisusedMatchersTest.java
    @@ -9,7 +9,7 @@
     import static org.junit.Assume.assumeTrue;
     import static org.mockito.Mockito.anyBoolean;
     import static org.mockito.Mockito.anyInt;
    -import static org.mockito.Mockito.anyObject;
    +import static org.mockito.Mockito.any;
     import static org.mockito.Mockito.mock;
     import static org.mockito.Mockito.validateMockitoUsage;
     import static org.mockito.Mockito.verify;
    @@ -39,8 +39,8 @@ public void resetState() {
             super.resetState();
         }
     
    -    private void misplaced_anyObject_argument_matcher() {
    -        Object ignored = anyObject();
    +    private void misplaced_any_argument_matcher() {
    +        Object ignored = any();
         }
     
         private void misplaced_anyInt_argument_matcher() {
    @@ -53,7 +53,7 @@ private void misplaced_anyBoolean_argument_matcher() {
     
         @Test
         public void should_fail_fast_when_argument_matchers_are_abused() {
    -        misplaced_anyObject_argument_matcher();
    +        misplaced_any_argument_matcher();
             try {
                 mock(IMethods.class);
                 fail();
    @@ -68,7 +68,7 @@ public void should_report_argument_locations_when_argument_matchers_misused() {
                 Observer observer = mock(Observer.class);
     
                 misplaced_anyInt_argument_matcher();
    -            misplaced_anyObject_argument_matcher();
    +            misplaced_any_argument_matcher();
                 misplaced_anyBoolean_argument_matcher();
     
                 observer.update(null, null);
    @@ -80,7 +80,7 @@ public void should_report_argument_locations_when_argument_matchers_misused() {
                         .hasMessageContaining(
                                 "DetectingMisusedMatchersTest.misplaced_anyInt_argument_matcher")
                         .hasMessageContaining(
    -                            "DetectingMisusedMatchersTest.misplaced_anyObject_argument_matcher")
    +                            "DetectingMisusedMatchersTest.misplaced_any_argument_matcher")
                         .hasMessageContaining(
                                 "DetectingMisusedMatchersTest.misplaced_anyBoolean_argument_matcher");
             }
    @@ -90,7 +90,7 @@ public void should_report_argument_locations_when_argument_matchers_misused() {
         @Test
         public void shouldSayUnfinishedVerificationButNotInvalidUseOfMatchers() {
             assumeTrue("Does not apply for inline mocks", withFinal.getClass() != WithFinal.class);
    -        verify(withFinal).finalMethod(anyObject());
    +        verify(withFinal).finalMethod(any());
             try {
                 verify(withFinal);
                 fail();
    diff --git a/src/test/java/org/mockitousage/misuse/ExplicitFrameworkValidationTest.java b/src/test/java/org/mockitousage/misuse/ExplicitFrameworkValidationTest.java
    index 3fc1f56973..8e9e7599ef 100644
    --- a/src/test/java/org/mockitousage/misuse/ExplicitFrameworkValidationTest.java
    +++ b/src/test/java/org/mockitousage/misuse/ExplicitFrameworkValidationTest.java
    @@ -5,7 +5,7 @@
     package org.mockitousage.misuse;
     
     import static org.junit.Assert.fail;
    -import static org.mockito.Matchers.anyObject;
    +import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
     
    @@ -46,7 +46,7 @@ public void shouldDetectUnfinishedStubbing() {
     
         @Test
         public void shouldDetectMisplacedArgumentMatcher() {
    -        anyObject();
    +        Object ignored = any();
             try {
                 Mockito.validateMockitoUsage();
                 fail();
    diff --git a/src/test/java/org/mockitousage/misuse/InvalidUsageTest.java b/src/test/java/org/mockitousage/misuse/InvalidUsageTest.java
    index db690b4cfe..ce418bfedb 100644
    --- a/src/test/java/org/mockitousage/misuse/InvalidUsageTest.java
    +++ b/src/test/java/org/mockitousage/misuse/InvalidUsageTest.java
    @@ -31,11 +31,6 @@ public void shouldRequireArgumentsWhenVerifyingNoMoreInteractions() {
             verifyNoMoreInteractions();
         }
     
    -    @Test(expected = MockitoException.class)
    -    public void shouldRequireArgumentsWhenVerifyingZeroInteractions() {
    -        verifyZeroInteractions();
    -    }
    -
         @Test(expected = MockitoException.class)
         public void shouldRequireArgumentsWhenVerifyingNoInteractions() {
             verifyNoInteractions();
    @@ -104,17 +99,6 @@ interface ObjectLikeInterface {
             int hashCode();
         }
     
    -    @Test
    -    public void shouldNotMockObjectMethodsOnInterface() throws Exception {
    -        ObjectLikeInterface inter = mock(ObjectLikeInterface.class);
    -
    -        Object ignored = inter.equals(null);
    -        ignored = inter.toString();
    -        ignored = inter.hashCode();
    -
    -        verifyZeroInteractions(inter);
    -    }
    -
         @Test
         public void shouldNotMockObjectMethodsOnInterfaceVerifyNoInteractions() throws Exception {
             ObjectLikeInterface inter = mock(ObjectLikeInterface.class);
    @@ -126,17 +110,6 @@ public void shouldNotMockObjectMethodsOnInterfaceVerifyNoInteractions() throws E
             verifyNoInteractions(inter);
         }
     
    -    @Test
    -    public void shouldNotMockObjectMethodsOnClass() throws Exception {
    -        Object clazz = mock(ObjectLikeInterface.class);
    -
    -        Object ignored = clazz.equals(null);
    -        ignored = clazz.toString();
    -        ignored = clazz.hashCode();
    -
    -        verifyZeroInteractions(clazz);
    -    }
    -
         @Test
         public void shouldNotMockObjectMethodsOnClassVerifyNoInteractions() throws Exception {
             Object clazz = mock(ObjectLikeInterface.class);
    diff --git a/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java b/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java
    index a0b993dd07..dd5f390a53 100644
    --- a/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java
    +++ b/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java
    @@ -5,13 +5,10 @@
     package org.mockitousage.plugins;
     
     import static org.junit.Assert.assertNotNull;
    -import static org.mockito.Mockito.withSettings;
     
     import org.junit.Test;
     import org.mockito.Mockito;
    -import org.mockito.internal.creation.instance.Instantiator;
     import org.mockito.plugins.AnnotationEngine;
    -import org.mockito.plugins.InstantiatorProvider;
     import org.mockito.plugins.InstantiatorProvider2;
     import org.mockito.plugins.MockMaker;
     import org.mockito.plugins.MockitoLogger;
    @@ -30,19 +27,8 @@ public void provides_built_in_plugins() {
             assertNotNull(plugins.getDefaultPlugin(MockMaker.class));
             assertNotNull(plugins.getDefaultPlugin(StackTraceCleanerProvider.class));
             assertNotNull(plugins.getDefaultPlugin(PluginSwitch.class));
    -        assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider.class));
             assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider2.class));
             assertNotNull(plugins.getDefaultPlugin(AnnotationEngine.class));
             assertNotNull(plugins.getDefaultPlugin(MockitoLogger.class));
         }
    -
    -    @SuppressWarnings("deprecation")
    -    @Test
    -    public void instantiator_provider_backwards_compatibility() {
    -        InstantiatorProvider provider = plugins.getDefaultPlugin(InstantiatorProvider.class);
    -        Instantiator instantiator =
    -                provider.getInstantiator(withSettings().build(MockitoPluginsTest.class));
    -
    -        assertNotNull(instantiator.newInstance(MockitoPluginsTest.class));
    -    }
     }
    diff --git a/src/test/java/org/mockitousage/serialization/AcrossClassLoaderSerializationTest.java b/src/test/java/org/mockitousage/serialization/AcrossClassLoaderSerializationTest.java
    index 2b2106755f..e79895b8c6 100644
    --- a/src/test/java/org/mockitousage/serialization/AcrossClassLoaderSerializationTest.java
    +++ b/src/test/java/org/mockitousage/serialization/AcrossClassLoaderSerializationTest.java
    @@ -11,6 +11,7 @@
     import java.util.List;
     import java.util.concurrent.Callable;
     
    +import net.bytebuddy.ClassFileVersion;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
    @@ -31,6 +32,10 @@ public void reproduce_CCE_by_creating_a_mock_with_IMethods_before() throws Excep
         @Test
         public void check_that_mock_can_be_serialized_in_a_classloader_and_deserialized_in_another()
                 throws Exception {
    +        // No longer supported starting with JDK 16+
    +        if (!ClassFileVersion.ofThisVm().isAtMost(ClassFileVersion.JAVA_V16)) {
    +            return;
    +        }
             byte[] bytes = create_mock_and_serialize_it_in_class_loader_A();
     
             Object the_deserialized_mock = read_stream_and_deserialize_it_in_class_loader_B(bytes);
    diff --git a/src/test/java/org/mockitousage/spies/StubbingSpiesDoesNotYieldNPETest.java b/src/test/java/org/mockitousage/spies/StubbingSpiesDoesNotYieldNPETest.java
    index 89bdd66712..da467887de 100644
    --- a/src/test/java/org/mockitousage/spies/StubbingSpiesDoesNotYieldNPETest.java
    +++ b/src/test/java/org/mockitousage/spies/StubbingSpiesDoesNotYieldNPETest.java
    @@ -4,7 +4,7 @@
      */
     package org.mockitousage.spies;
     
    -import static org.mockito.Matchers.*;
    +import static org.mockito.ArgumentMatchers.*;
     import static org.mockito.Mockito.spy;
     
     import java.util.Collection;
    diff --git a/src/test/java/org/mockitousage/stacktrace/ModellingDescriptiveMessagesTest.java b/src/test/java/org/mockitousage/stacktrace/ModellingDescriptiveMessagesTest.java
    index ba6aed4474..03d99beda9 100644
    --- a/src/test/java/org/mockitousage/stacktrace/ModellingDescriptiveMessagesTest.java
    +++ b/src/test/java/org/mockitousage/stacktrace/ModellingDescriptiveMessagesTest.java
    @@ -158,7 +158,7 @@ public void shouldMentionFinalAndObjectMethodsWhenVerifying() {
     
         @Test
         public void shouldMentionFinalAndObjectMethodsWhenMisplacedArgumentMatcher() {
    -        when(mock.equals(anyObject())).thenReturn(false);
    +        when(mock.equals(any())).thenReturn(false);
         }
     
         @Test
    diff --git a/src/test/java/org/mockitousage/stacktrace/StackTraceFilteringTest.java b/src/test/java/org/mockitousage/stacktrace/StackTraceFilteringTest.java
    index ec3a7335eb..1734e53a5b 100644
    --- a/src/test/java/org/mockitousage/stacktrace/StackTraceFilteringTest.java
    +++ b/src/test/java/org/mockitousage/stacktrace/StackTraceFilteringTest.java
    @@ -9,7 +9,6 @@
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.verifyNoInteractions;
     import static org.mockito.Mockito.verifyNoMoreInteractions;
    -import static org.mockito.Mockito.verifyZeroInteractions;
     import static org.mockito.Mockito.when;
     import static org.mockitoutil.Conditions.firstMethodInStackTrace;
     
    @@ -64,18 +63,6 @@ public void shouldFilterStackTraceOnVerifyNoMoreInteractions() {
             }
         }
     
    -    @Test
    -    public void shouldFilterStackTraceOnVerifyZeroInteractions() {
    -        mock.oneArg(true);
    -        try {
    -            verifyZeroInteractions(mock);
    -            fail();
    -        } catch (NoInteractionsWanted e) {
    -            Assertions.assertThat(e)
    -                    .has(firstMethodInStackTrace("shouldFilterStackTraceOnVerifyZeroInteractions"));
    -        }
    -    }
    -
         @Test
         public void shouldFilterStackTraceOnVerifyNoInteractions() {
             mock.oneArg(true);
    diff --git a/src/test/java/org/mockitousage/stubbing/BasicStubbingTest.java b/src/test/java/org/mockitousage/stubbing/BasicStubbingTest.java
    index 375a204d51..15e4346526 100644
    --- a/src/test/java/org/mockitousage/stubbing/BasicStubbingTest.java
    +++ b/src/test/java/org/mockitousage/stubbing/BasicStubbingTest.java
    @@ -64,7 +64,7 @@ public void should_stubbing_not_be_treated_as_interaction() {
             when(mock.simpleMethod("one")).thenThrow(new RuntimeException());
             doThrow(new RuntimeException()).when(mock).simpleMethod("two");
     
    -        verifyZeroInteractions(mock);
    +        verifyNoInteractions(mock);
         }
     
         @Test
    @@ -85,7 +85,7 @@ public void unfinished_stubbing_cleans_up_the_state() {
             }
     
             // anything that can cause state validation
    -        verifyZeroInteractions(mock);
    +        verifyNoInteractions(mock);
         }
     
         @Test
    diff --git a/src/test/java/org/mockitousage/verification/AtMostXVerificationTest.java b/src/test/java/org/mockitousage/verification/AtMostXVerificationTest.java
    index 47c78f72ec..f6c08ac8bd 100644
    --- a/src/test/java/org/mockitousage/verification/AtMostXVerificationTest.java
    +++ b/src/test/java/org/mockitousage/verification/AtMostXVerificationTest.java
    @@ -22,6 +22,7 @@
     import org.mockito.exceptions.base.MockitoException;
     import org.mockito.exceptions.verification.MoreThanAllowedActualInvocations;
     import org.mockito.exceptions.verification.NoInteractionsWanted;
    +import org.mockito.verification.VerificationMode;
     import org.mockitoutil.TestBase;
     
     public class AtMostXVerificationTest extends TestBase {
    @@ -115,6 +116,13 @@ public void shouldDetectUnverifiedInMarkInteractionsAsVerified() throws Exceptio
             }
         }
     
    +    @Test
    +    public void should_return_formatted_output_from_toString_method() {
    +        VerificationMode atMost = atMost(3);
    +
    +        assertThat(atMost).hasToString("Wanted invocations count: at most 3");
    +    }
    +
         private void undesiredInteraction() {
             mock.add("");
         }
    diff --git a/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java b/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java
    index f424fab706..b0c4b2d236 100644
    --- a/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java
    +++ b/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java
    @@ -261,11 +261,6 @@ public void shouldFailOnVerifyNoMoreInteractions() {
             }
         }
     
    -    @Test(expected = NoInteractionsWanted.class)
    -    public void shouldFailOnVerifyZeroInteractions() {
    -        verifyZeroInteractions(mockOne);
    -    }
    -
         @Test(expected = NoInteractionsWanted.class)
         public void shouldFailOnVerifyNoInteractions() {
             verifyNoInteractions(mockOne);
    diff --git a/src/test/java/org/mockitousage/verification/CustomVerificationTest.java b/src/test/java/org/mockitousage/verification/CustomVerificationTest.java
    deleted file mode 100644
    index 766bb1d4a5..0000000000
    --- a/src/test/java/org/mockitousage/verification/CustomVerificationTest.java
    +++ /dev/null
    @@ -1,74 +0,0 @@
    -/*
    - * Copyright (c) 2007 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.verification;
    -
    -import static org.junit.Assert.fail;
    -import static org.mockito.Mockito.verify;
    -
    -import org.junit.Test;
    -import org.mockito.Mock;
    -import org.mockito.exceptions.base.MockitoAssertionError;
    -import org.mockito.internal.invocation.InvocationMatcher;
    -import org.mockito.internal.verification.api.VerificationData;
    -import org.mockito.invocation.Invocation;
    -import org.mockito.verification.VerificationMode;
    -import org.mockitousage.IMethods;
    -import org.mockitoutil.TestBase;
    -
    -public class CustomVerificationTest extends TestBase {
    -
    -    @Mock IMethods mock;
    -
    -    @Test
    -    public void custom_verification_with_old_api() {
    -        // given:
    -        mock.simpleMethod("a", 10);
    -
    -        // expect:
    -        verify(mock, ignoreParametersUsingOldApi()).simpleMethod();
    -
    -        try {
    -            verify(mock, ignoreParametersUsingOldApi()).otherMethod();
    -            fail();
    -        } catch (MockitoAssertionError e) {
    -        }
    -    }
    -
    -    // Old api still supported, see https://github.com/mockito/mockito/issues/730
    -    private VerificationMode ignoreParametersUsingOldApi() {
    -        return new VerificationMode() {
    -            public void verify(VerificationData data) {
    -                // use old api
    -                InvocationMatcher target = data.getWanted();
    -
    -                // sanity check the new api
    -                if (data.getTarget() != target) {
    -                    throw new RuntimeException("Sanity check");
    -                }
    -
    -                // look for the relevant invocation and exit if found
    -                for (Invocation invocation : data.getAllInvocations()) {
    -                    if (target.getInvocation()
    -                            .getMethod()
    -                            .getName()
    -                            .equals(invocation.getMethod().getName())) {
    -                        return;
    -                    }
    -                }
    -
    -                // verification failed!
    -                throw new MockitoAssertionError(
    -                        "Expected method with name: "
    -                                + target
    -                                + " not found in:\n"
    -                                + data.getAllInvocations());
    -            }
    -
    -            public VerificationMode description(String description) {
    -                return this;
    -            }
    -        };
    -    }
    -}
    diff --git a/src/test/java/org/mockitousage/verification/DescriptiveMessagesWhenVerificationFailsTest.java b/src/test/java/org/mockitousage/verification/DescriptiveMessagesWhenVerificationFailsTest.java
    index 94f660284c..bae7c31df7 100644
    --- a/src/test/java/org/mockitousage/verification/DescriptiveMessagesWhenVerificationFailsTest.java
    +++ b/src/test/java/org/mockitousage/verification/DescriptiveMessagesWhenVerificationFailsTest.java
    @@ -180,26 +180,6 @@ public void should_print_first_unexpected_invocation() {
             }
         }
     
    -    @Test
    -    public void should_print_first_unexpected_invocation_when_verifying_zero_interactions() {
    -        mock.twoArgumentMethod(1, 2);
    -        mock.threeArgumentMethod(1, "2", "3");
    -
    -        try {
    -            verifyZeroInteractions(mock);
    -            fail();
    -        } catch (NoInteractionsWanted e) {
    -            String expected = "\n" + "No interactions wanted here:" + "\n" + "-> at";
    -
    -            assertThat(e).hasMessageContaining(expected);
    -
    -            String expectedCause =
    -                    "\n" + "But found this interaction on mock '" + mock + "':" + "\n" + "-> at";
    -
    -            assertThat(e).hasMessageContaining(expectedCause);
    -        }
    -    }
    -
         @Test
         public void should_print_first_unexpected_invocation_when_verifying_no_interactions() {
             mock.twoArgumentMethod(1, 2);
    diff --git a/src/test/java/org/mockitousage/verification/NoMoreInteractionsVerificationTest.java b/src/test/java/org/mockitousage/verification/NoMoreInteractionsVerificationTest.java
    index 367975dc4a..72c75a909b 100644
    --- a/src/test/java/org/mockitousage/verification/NoMoreInteractionsVerificationTest.java
    +++ b/src/test/java/org/mockitousage/verification/NoMoreInteractionsVerificationTest.java
    @@ -50,29 +50,6 @@ public void shouldVerifyWhenWantedNumberOfInvocationsUsed() throws Exception {
             verifyNoMoreInteractions(mock);
         }
     
    -    @Test
    -    public void shouldVerifyNoInteractionsAsManyTimesAsYouWant() throws Exception {
    -        verifyNoMoreInteractions(mock);
    -        verifyNoMoreInteractions(mock);
    -
    -        verifyZeroInteractions(mock);
    -        verifyZeroInteractions(mock);
    -
    -        verifyNoInteractions(mock);
    -        verifyNoInteractions(mock);
    -    }
    -
    -    @Test
    -    public void shouldFailZeroInteractionsVerification() throws Exception {
    -        mock.clear();
    -
    -        try {
    -            verifyZeroInteractions(mock);
    -            fail();
    -        } catch (NoInteractionsWanted e) {
    -        }
    -    }
    -
         @Test
         public void shouldFailNoMoreInteractionsVerification() throws Exception {
             mock.clear();
    @@ -136,7 +113,7 @@ public void shouldVerifyOneMockButFailOnOther() throws Exception {
     
             verifyNoMoreInteractions(list);
             try {
    -            verifyZeroInteractions(map);
    +            verifyNoInteractions(map);
                 fail();
             } catch (NoInteractionsWanted e) {
             }
    diff --git a/src/test/java/org/mockitousage/verification/OnlyVerificationTest.java b/src/test/java/org/mockitousage/verification/OnlyVerificationTest.java
    index 02015e0e2a..94eafe612c 100644
    --- a/src/test/java/org/mockitousage/verification/OnlyVerificationTest.java
    +++ b/src/test/java/org/mockitousage/verification/OnlyVerificationTest.java
    @@ -4,8 +4,9 @@
      */
     package org.mockitousage.verification;
     
    +import static org.assertj.core.api.Assertions.assertThat;
     import static org.junit.Assert.fail;
    -import static org.mockito.Matchers.anyInt;
    +import static org.mockito.ArgumentMatchers.anyInt;
     import static org.mockito.Mockito.only;
     import static org.mockito.Mockito.verify;
     
    @@ -15,6 +16,7 @@
     import org.mockito.Mock;
     import org.mockito.exceptions.verification.NoInteractionsWanted;
     import org.mockito.exceptions.verification.WantedButNotInvoked;
    +import org.mockito.verification.VerificationMode;
     import org.mockitoutil.TestBase;
     
     public class OnlyVerificationTest extends TestBase {
    @@ -85,4 +87,11 @@ public void shouldVerifyMethodWasInvokedExclusivelyWhenTwoMocksInUse() {
             verify(mock, only()).clear();
             verify(mock2, only()).get(0);
         }
    +
    +    @Test
    +    public void should_return_formatted_output_from_toString_method() {
    +        VerificationMode only = only();
    +
    +        assertThat(only).hasToString("Wanted invocations count: 1 and no other method invoked");
    +    }
     }
    diff --git a/src/test/java/org/mockitousage/verification/PrintingVerboseTypesWithArgumentsTest.java b/src/test/java/org/mockitousage/verification/PrintingVerboseTypesWithArgumentsTest.java
    index 42f644d2a9..472e18475c 100644
    --- a/src/test/java/org/mockitousage/verification/PrintingVerboseTypesWithArgumentsTest.java
    +++ b/src/test/java/org/mockitousage/verification/PrintingVerboseTypesWithArgumentsTest.java
    @@ -7,7 +7,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.junit.Assert.fail;
     import static org.mockito.ArgumentMatchers.any;
    -import static org.mockito.Matchers.eq;
    +import static org.mockito.ArgumentMatchers.eq;
     import static org.mockito.Mockito.mock;
     import static org.mockito.Mockito.verify;
     
    diff --git a/src/test/java/org/mockitousage/verification/VerificationOnMultipleMocksUsingMatchersTest.java b/src/test/java/org/mockitousage/verification/VerificationOnMultipleMocksUsingMatchersTest.java
    index a543d38988..77e7e46ec5 100644
    --- a/src/test/java/org/mockitousage/verification/VerificationOnMultipleMocksUsingMatchersTest.java
    +++ b/src/test/java/org/mockitousage/verification/VerificationOnMultipleMocksUsingMatchersTest.java
    @@ -29,10 +29,10 @@ public void shouldVerifyUsingMatchers() throws Exception {
             map.put("test", 100);
             map.put("test two", 200);
     
    -        verify(list).add(anyObject());
    +        verify(list).add(any());
             verify(list).add(anyInt(), eq("test two"));
     
    -        verify(map, times(2)).put(anyObject(), anyObject());
    +        verify(map, times(2)).put(any(), any());
             verify(map).put(eq("test two"), eq(200));
     
             verifyNoMoreInteractions(list, map);
    @@ -55,10 +55,9 @@ public void shouldVerifyMultipleMocks() throws Exception {
             verify(list, times(1)).add("two");
             verify(list, times(0)).add("three");
     
    -        verify(map, times(2)).put(anyObject(), anyInt());
    +        verify(map, times(2)).put(any(), anyInt());
     
             verifyNoMoreInteractions(list, map);
    -        verifyZeroInteractions(set);
             verifyNoInteractions(set);
         }
     }
    diff --git a/src/test/java/org/mockitousage/verification/VerificationUsingMatchersTest.java b/src/test/java/org/mockitousage/verification/VerificationUsingMatchersTest.java
    index 85d37dd924..6e916b7124 100644
    --- a/src/test/java/org/mockitousage/verification/VerificationUsingMatchersTest.java
    +++ b/src/test/java/org/mockitousage/verification/VerificationUsingMatchersTest.java
    @@ -7,14 +7,18 @@
     import static org.junit.Assert.assertEquals;
     import static org.junit.Assert.assertNotSame;
     import static org.junit.Assert.fail;
    -import static org.mockito.AdditionalMatchers.*;
    -import static org.mockito.Matchers.*;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
    +import static org.mockito.ArgumentMatchers.same;
    +import static org.mockito.ArgumentMatchers.anyInt;
    +import static org.mockito.ArgumentMatchers.isA;
    +import static org.mockito.ArgumentMatchers.contains;
    +import static org.mockito.AdditionalMatchers.geq;
    +import static org.mockito.AdditionalMatchers.leq;
    +import static org.mockito.AdditionalMatchers.and;
     
     import org.junit.Before;
     import org.junit.Test;
    -import org.mockito.Matchers;
     import org.mockito.Mockito;
     import org.mockito.exceptions.verification.WantedButNotInvoked;
     import org.mockito.exceptions.verification.opentest4j.ArgumentsAreDifferent;
    @@ -68,8 +72,7 @@ public void shouldVerifyUsingMixedMatchers() {
     
             try {
                 verify(mock)
    -                    .threeArgumentMethod(
    -                            and(geq(7), leq(10)), isA(String.class), Matchers.contains("123"));
    +                    .threeArgumentMethod(and(geq(7), leq(10)), isA(String.class), contains("123"));
                 fail();
             } catch (ArgumentsAreDifferent e) {
             }
    @@ -78,8 +81,7 @@ public void shouldVerifyUsingMixedMatchers() {
     
             try {
                 verify(mock)
    -                    .threeArgumentMethod(
    -                            and(geq(7), leq(10)), isA(String.class), Matchers.contains("123"));
    +                    .threeArgumentMethod(and(geq(7), leq(10)), isA(String.class), contains("123"));
                 fail();
             } catch (ArgumentsAreDifferent e) {
             }
    @@ -88,16 +90,13 @@ public void shouldVerifyUsingMixedMatchers() {
     
             try {
                 verify(mock)
    -                    .threeArgumentMethod(
    -                            and(geq(7), leq(10)), isA(String.class), Matchers.contains("123"));
    +                    .threeArgumentMethod(and(geq(7), leq(10)), isA(String.class), contains("123"));
                 fail();
             } catch (ArgumentsAreDifferent e) {
             }
     
             mock.threeArgumentMethod(8, "", "123");
     
    -        verify(mock)
    -                .threeArgumentMethod(
    -                        and(geq(7), leq(10)), isA(String.class), Matchers.contains("123"));
    +        verify(mock).threeArgumentMethod(and(geq(7), leq(10)), isA(String.class), contains("123"));
         }
     }
    diff --git a/src/test/java/org/mockitousage/verification/VerificationWithAfterTest.java b/src/test/java/org/mockitousage/verification/VerificationWithAfterTest.java
    index 4fb65530b1..0d3f40be44 100644
    --- a/src/test/java/org/mockitousage/verification/VerificationWithAfterTest.java
    +++ b/src/test/java/org/mockitousage/verification/VerificationWithAfterTest.java
    @@ -6,6 +6,7 @@
     
     import static java.util.concurrent.TimeUnit.MILLISECONDS;
     
    +import static org.assertj.core.api.Assertions.assertThat;
     import static org.assertj.core.api.Assertions.assertThatThrownBy;
     import static org.mockito.Mockito.after;
     import static org.mockito.Mockito.verify;
    @@ -22,7 +23,9 @@
     import org.mockito.exceptions.verification.MoreThanAllowedActualInvocations;
     import org.mockito.exceptions.verification.NoInteractionsWanted;
     import org.mockito.exceptions.verification.TooManyActualInvocations;
    +import org.mockito.internal.verification.DummyVerificationMode;
     import org.mockito.junit.MockitoRule;
    +import org.mockito.verification.VerificationMode;
     import org.mockitousage.IMethods;
     import org.mockitoutil.Stopwatch;
     import org.mockitoutil.async.AsyncTesting;
    @@ -301,4 +304,29 @@ public void call() {
             // using generous number to avoid timing issues
             watch.assertElapsedTimeIsLessThan(2000, MILLISECONDS);
         }
    +
    +    @Test
    +    public void should_return_formatted_output_from_toString_when_created_with_factory_method() {
    +        VerificationMode after = after(3);
    +
    +        assertThat(after).hasToString("Wanted after 3 ms: [Wanted invocations count: 1]");
    +    }
    +
    +    @Test
    +    public void should_return_formatted_output_from_toString_using_wrapped_verification_mode() {
    +        org.mockito.verification.After after =
    +                new org.mockito.verification.After(10, new DummyVerificationMode());
    +
    +        assertThat(after).hasToString("Wanted after 10 ms: [Dummy verification mode]");
    +    }
    +
    +    @Test
    +    public void
    +            should_return_formatted_output_from_toString_when_chaining_other_verification_mode() {
    +        VerificationMode afterAndOnly = after(5).only();
    +
    +        assertThat(afterAndOnly)
    +                .hasToString(
    +                        "Wanted after 5 ms: [Wanted invocations count: 1 and no other method invoked]");
    +    }
     }
    diff --git a/src/test/java/org/mockitousage/verification/VerificationWithTimeoutTest.java b/src/test/java/org/mockitousage/verification/VerificationWithTimeoutTest.java
    index ee876e49f8..b51aafd980 100644
    --- a/src/test/java/org/mockitousage/verification/VerificationWithTimeoutTest.java
    +++ b/src/test/java/org/mockitousage/verification/VerificationWithTimeoutTest.java
    @@ -4,6 +4,7 @@
      */
     package org.mockitousage.verification;
     
    +import static org.assertj.core.api.Assertions.assertThat;
     import static org.mockito.Mockito.after;
     import static org.mockito.Mockito.timeout;
     import static org.mockito.Mockito.verify;
    @@ -21,7 +22,10 @@
     import org.junit.Test;
     import org.mockito.Mock;
     import org.mockito.exceptions.verification.TooFewActualInvocations;
    +import org.mockito.internal.verification.DummyVerificationMode;
     import org.mockito.junit.MockitoRule;
    +import org.mockito.verification.Timeout;
    +import org.mockito.verification.VerificationMode;
     import org.mockitousage.IMethods;
     import org.mockitoutil.Stopwatch;
     import org.mockitoutil.async.AsyncTesting;
    @@ -172,6 +176,31 @@ public void should_verify_with_only() {
             verify(mock, timeout(100).only()).oneArg('c');
         }
     
    +    @Test
    +    public void should_return_formatted_output_from_toString_when_created_with_factory_method() {
    +        VerificationMode timeout = timeout(7);
    +
    +        assertThat(timeout).hasToString("Wanted after at most 7 ms: [Wanted invocations count: 1]");
    +    }
    +
    +    @Test
    +    public void should_return_formatted_output_from_toString_using_wrapped_verification_mode() {
    +        VerificationMode timeoutAndAtLeastOnce = new Timeout(9, new DummyVerificationMode());
    +
    +        assertThat(timeoutAndAtLeastOnce)
    +                .hasToString("Wanted after at most 9 ms: [Dummy verification mode]");
    +    }
    +
    +    @Test
    +    public void
    +            should_return_formatted_output_from_toString_when_chaining_other_verification_mode() {
    +        VerificationMode timeoutAndOnly = timeout(7).only();
    +
    +        assertThat(timeoutAndOnly)
    +                .hasToString(
    +                        "Wanted after at most 7 ms: [Wanted invocations count: 1 and no other method invoked]");
    +    }
    +
         @Test
         @Ignore("not testable, probably timeout().only() does not make sense")
         public void should_verify_with_only_and_fail() {
    diff --git a/src/test/java/org/mockitoutil/SimpleSerializationUtil.java b/src/test/java/org/mockitoutil/SimpleSerializationUtil.java
    index 65fe8421a1..fd336e0348 100644
    --- a/src/test/java/org/mockitoutil/SimpleSerializationUtil.java
    +++ b/src/test/java/org/mockitoutil/SimpleSerializationUtil.java
    @@ -6,7 +6,12 @@
     
     import static org.junit.Assert.assertNotNull;
     
    -import java.io.*;
    +import java.io.ByteArrayInputStream;
    +import java.io.ByteArrayOutputStream;
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.io.ObjectInputStream;
    +import java.io.ObjectOutputStream;
     
     public abstract class SimpleSerializationUtil {
     
    diff --git a/subprojects/android/android.gradle b/subprojects/android/android.gradle
    index 8f86eabb98..4cbd7dd38d 100644
    --- a/subprojects/android/android.gradle
    +++ b/subprojects/android/android.gradle
    @@ -3,8 +3,8 @@ description = "Mockito for Android"
     apply from: "$rootDir/gradle/java-library.gradle"
     
     dependencies {
    -    compile project.rootProject
    -    compile libraries.bytebuddyandroid
    +    api project.rootProject
    +    implementation libraries.bytebuddyandroid
     }
     
     tasks.javadoc.enabled = false
    diff --git a/subprojects/deprecatedPluginsTest/deprecatedPluginsTest.gradle b/subprojects/deprecatedPluginsTest/deprecatedPluginsTest.gradle
    deleted file mode 100644
    index d685a4dc0e..0000000000
    --- a/subprojects/deprecatedPluginsTest/deprecatedPluginsTest.gradle
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -apply from: "$rootDir/gradle/dependencies.gradle"
    -
    -apply plugin: 'java'
    -description = "End-to-end tests for deprecated Mockito plugins."
    -
    -dependencies {
    -    testCompile project(":")
    -    testCompile libraries.junit4
    -}
    diff --git a/subprojects/deprecatedPluginsTest/src/test/java/org/mockitousage/plugins/DeprecatedInstantiatorProviderTest.java b/subprojects/deprecatedPluginsTest/src/test/java/org/mockitousage/plugins/DeprecatedInstantiatorProviderTest.java
    deleted file mode 100644
    index 2ccd170362..0000000000
    --- a/subprojects/deprecatedPluginsTest/src/test/java/org/mockitousage/plugins/DeprecatedInstantiatorProviderTest.java
    +++ /dev/null
    @@ -1,46 +0,0 @@
    -/*
    - * Copyright (c) 2018 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.plugins;
    -
    -import org.junit.Test;
    -import org.mockito.Mockito;
    -import org.mockito.creation.instance.InstantiationException;
    -import org.mockito.exceptions.base.MockitoException;
    -import org.mockito.plugins.InstantiatorProvider;
    -
    -import static java.util.Arrays.asList;
    -import static org.junit.Assert.assertEquals;
    -import static org.junit.Assert.assertNotNull;
    -import static org.mockito.Mockito.mock;
    -
    -public class DeprecatedInstantiatorProviderTest {
    -
    -    @Test
    -    public void provides_default_instance_for_deprecated_plugin() {
    -        InstantiatorProvider plugin = Mockito.framework().getPlugins().getDefaultPlugin(InstantiatorProvider.class);
    -        assertNotNull(plugin);
    -    }
    -
    -    @SuppressWarnings("CheckReturnValue")
    -    @Test
    -    public void uses_custom_instantiator_provider() {
    -        MyDeprecatedInstantiatorProvider.invokedFor.remove();
    -        mock(DeprecatedInstantiatorProviderTest.class);
    -        assertEquals(MyDeprecatedInstantiatorProvider.invokedFor.get(), asList(DeprecatedInstantiatorProviderTest.class));
    -    }
    -
    -    @SuppressWarnings("CheckReturnValue")
    -    @Test(expected = InstantiationException.class)
    -    public void exception_while_instantiating() throws Throwable {
    -        MyDeprecatedInstantiatorProvider.shouldExcept.set(true);
    -        try {
    -            mock(DeprecatedInstantiatorProviderTest.class);
    -        } catch (MockitoException e) {
    -            throw e.getCause();
    -        } finally {
    -            MyDeprecatedInstantiatorProvider.shouldExcept.remove();
    -        }
    -    }
    -}
    diff --git a/subprojects/deprecatedPluginsTest/src/test/java/org/mockitousage/plugins/MyDeprecatedInstantiatorProvider.java b/subprojects/deprecatedPluginsTest/src/test/java/org/mockitousage/plugins/MyDeprecatedInstantiatorProvider.java
    deleted file mode 100644
    index a15dc41a77..0000000000
    --- a/subprojects/deprecatedPluginsTest/src/test/java/org/mockitousage/plugins/MyDeprecatedInstantiatorProvider.java
    +++ /dev/null
    @@ -1,34 +0,0 @@
    -/*
    - * Copyright (c) 2018 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.plugins;
    -
    -import org.mockito.Mockito;
    -import org.mockito.internal.creation.instance.InstantiationException;
    -import org.mockito.internal.creation.instance.Instantiator;
    -import org.mockito.mock.MockCreationSettings;
    -import org.mockito.plugins.InstantiatorProvider;
    -
    -import java.util.LinkedList;
    -import java.util.List;
    -
    -@SuppressWarnings("deprecation")
    -public class MyDeprecatedInstantiatorProvider implements InstantiatorProvider {
    -    static ThreadLocal shouldExcept = new ThreadLocal<>();
    -    static ThreadLocal> invokedFor = new ThreadLocal<>();
    -
    -    @Override
    -    public Instantiator getInstantiator(MockCreationSettings settings) {
    -        if (shouldExcept.get() != null) {
    -            throw new InstantiationException(null, null);
    -        }
    -
    -        if (invokedFor.get() == null) {
    -            invokedFor.set(new LinkedList<>());
    -        }
    -        invokedFor.get().add(settings.getTypeToMock());
    -
    -        return Mockito.framework().getPlugins().getDefaultPlugin(InstantiatorProvider.class).getInstantiator(settings);
    -    }
    -}
    diff --git a/subprojects/deprecatedPluginsTest/src/test/resources/mockito-extensions/org.mockito.plugins.InstantiatorProvider b/subprojects/deprecatedPluginsTest/src/test/resources/mockito-extensions/org.mockito.plugins.InstantiatorProvider
    deleted file mode 100644
    index 2c038d27b6..0000000000
    --- a/subprojects/deprecatedPluginsTest/src/test/resources/mockito-extensions/org.mockito.plugins.InstantiatorProvider
    +++ /dev/null
    @@ -1 +0,0 @@
    -org.mockitousage.plugins.MyDeprecatedInstantiatorProvider
    diff --git a/subprojects/errorprone/errorprone.gradle b/subprojects/errorprone/errorprone.gradle
    index f547d2ee28..e3ef7a7b77 100644
    --- a/subprojects/errorprone/errorprone.gradle
    +++ b/subprojects/errorprone/errorprone.gradle
    @@ -7,11 +7,11 @@ dependencies {
         compileOnly libraries.autoservice
         annotationProcessor libraries.autoservice
     
    -    compile project.rootProject
    -    compile libraries.errorprone
    +    implementation project.rootProject
    +    implementation libraries.errorprone
     
    -    testCompile 'junit:junit:4.13-beta-1'
    -    testCompile libraries.errorproneTestApi
    +    testImplementation 'junit:junit:4.13-beta-1'
    +    testImplementation libraries.errorproneTestApi
     }
     
     test {
    diff --git a/subprojects/extTest/extTest.gradle b/subprojects/extTest/extTest.gradle
    index 61c26c1d67..af9ce66c08 100644
    --- a/subprojects/extTest/extTest.gradle
    +++ b/subprojects/extTest/extTest.gradle
    @@ -8,14 +8,14 @@ repositories {
     }
     
     dependencies {
    -    testCompile project.rootProject
    -    testCompile project(":junit-jupiter")
    -    testCompile project(path: ':', configuration: 'testUtil')
    -    testCompile libraries.junit4
    -    testCompile libraries.assertj
    -    testCompile libraries.junitJupiterApi
    -    testRuntime libraries.junitJupiterEngine
    -    testRuntime libraries.junitVintageEngine
    +    testImplementation project.rootProject
    +    testImplementation project(":junit-jupiter")
    +    testImplementation project(path: ':', configuration: 'testUtil')
    +    testImplementation libraries.junit4
    +    testImplementation libraries.assertj
    +    testImplementation libraries.junitJupiterApi
    +    testRuntimeOnly libraries.junitJupiterEngine
    +    testRuntimeOnly libraries.junitVintageEngine
     }
     
     tasks.withType(Test) {
    diff --git a/subprojects/extTest/src/test/java/org/mockitousage/plugins/instantiator/MyInstantiatorProvider.java b/subprojects/extTest/src/test/java/org/mockitousage/plugins/instantiator/MyInstantiatorProvider.java
    deleted file mode 100644
    index 628c0fcc89..0000000000
    --- a/subprojects/extTest/src/test/java/org/mockitousage/plugins/instantiator/MyInstantiatorProvider.java
    +++ /dev/null
    @@ -1,17 +0,0 @@
    -/*
    - * Copyright (c) 2018 Mockito contributors
    - * This program is made available under the terms of the MIT License.
    - */
    -package org.mockitousage.plugins.instantiator;
    -
    -import org.mockito.internal.creation.instance.Instantiator;
    -import org.mockito.mock.MockCreationSettings;
    -import org.mockito.plugins.InstantiatorProvider;
    -
    -@SuppressWarnings("deprecation")
    -public class MyInstantiatorProvider implements InstantiatorProvider {
    -    @Override
    -    public Instantiator getInstantiator(MockCreationSettings settings) {
    -        throw new RuntimeException("Should never be called as there is InstantiatorProvider2 plugin");
    -    }
    -}
    diff --git a/subprojects/extTest/src/test/resources/mockito-extensions/org.mockito.plugins.InstantiatorProvider b/subprojects/extTest/src/test/resources/mockito-extensions/org.mockito.plugins.InstantiatorProvider
    deleted file mode 100644
    index 68bb9b8365..0000000000
    --- a/subprojects/extTest/src/test/resources/mockito-extensions/org.mockito.plugins.InstantiatorProvider
    +++ /dev/null
    @@ -1 +0,0 @@
    -org.mockitousage.plugins.instantiator.MyInstantiatorProvider
    diff --git a/subprojects/groovyTest/groovyTest.gradle b/subprojects/groovyTest/groovyTest.gradle
    index eceb4cdf79..4b86c87260 100644
    --- a/subprojects/groovyTest/groovyTest.gradle
    +++ b/subprojects/groovyTest/groovyTest.gradle
    @@ -5,7 +5,7 @@ description = "Integration test for using Mockito from Groovy."
     apply from: "$rootDir/gradle/dependencies.gradle"
     
     dependencies {
    -    testCompile project(":")
    -    testCompile libraries.groovy
    -    testCompile libraries.junit4
    +    testImplementation project(":")
    +    testImplementation libraries.groovy
    +    testImplementation libraries.junit4
     }
    diff --git a/subprojects/inline/inline.gradle b/subprojects/inline/inline.gradle
    index 9d9b39d6c7..d1f9214580 100644
    --- a/subprojects/inline/inline.gradle
    +++ b/subprojects/inline/inline.gradle
    @@ -3,8 +3,8 @@ description = "Mockito preconfigured inline mock maker (intermediate and to be s
     apply from: "$rootDir/gradle/java-library.gradle"
     
     dependencies {
    -    compile project.rootProject
    -    testCompile libraries.junit4
    +    api project.rootProject
    +    testImplementation libraries.junit4
     }
     
     tasks.javadoc.enabled = false
    diff --git a/subprojects/inline/src/test/java/org/mockitoinline/EnumMockingTest.java b/subprojects/inline/src/test/java/org/mockitoinline/EnumMockingTest.java
    new file mode 100644
    index 0000000000..a418aab7a4
    --- /dev/null
    +++ b/subprojects/inline/src/test/java/org/mockitoinline/EnumMockingTest.java
    @@ -0,0 +1,33 @@
    +/*
    + * Copyright (c) 2021 Mockito contributors
    + * This program is made available under the terms of the MIT License.
    + */
    +package org.mockitoinline;
    +
    +import org.junit.Test;
    +import org.mockito.Mockito;
    +
    +import static org.hamcrest.CoreMatchers.*;
    +import static org.hamcrest.MatcherAssert.assertThat;
    +
    +public class EnumMockingTest {
    +
    +    @Test
    +    public void testMockEnum() {
    +        Animal a = Mockito.mock(Animal.class);
    +        assertThat(a, not(equalTo(Animal.CAT)));
    +        assertThat(a.sound(), nullValue(String.class));
    +        assertThat(a.name(), nullValue(String.class));
    +    }
    +
    +    enum Animal {
    +        CAT {
    +            @Override
    +            public String sound() {
    +                return "meow";
    +            }
    +        };
    +
    +        public abstract String sound();
    +    }
    +}
    diff --git a/subprojects/junit-jupiter/junit-jupiter.gradle b/subprojects/junit-jupiter/junit-jupiter.gradle
    index 6e24b6a861..99f63e75d5 100644
    --- a/subprojects/junit-jupiter/junit-jupiter.gradle
    +++ b/subprojects/junit-jupiter/junit-jupiter.gradle
    @@ -1,5 +1,3 @@
    -import aQute.bnd.gradle.BundleTaskConvention
    -import aQute.bnd.gradle.FileSetRepositoryConvention
     import aQute.bnd.gradle.Resolve
     
     description = "Mockito JUnit 5 support"
    @@ -8,11 +6,11 @@ apply from: "$rootDir/gradle/java-library.gradle"
     apply plugin: 'biz.aQute.bnd.builder'
     
     dependencies {
    -    compile project.rootProject
    +    api project.rootProject
         implementation libraries.junitJupiterApi
    -    testCompile libraries.assertj
    -    testCompile libraries.junitPlatformLauncher
    -    testRuntime libraries.junitJupiterEngine
    +    testImplementation libraries.assertj
    +    testImplementation libraries.junitPlatformLauncher
    +    testRuntimeOnly libraries.junitJupiterEngine
     }
     
     tasks.withType(Test) {
    @@ -21,26 +19,26 @@ tasks.withType(Test) {
     
     jar {
         classpath = project.configurations.runtimeClasspath
    -    bnd(
    -        'Bundle-Name': 'Mockito Extension Library for JUnit 5.',
    -        'Bundle-SymbolicName': 'org.mockito.junit-jupiter',
    -        'Bundle-Version': "\${version_cleanup;${project.version}}",
    -        '-versionpolicy': '[${version;==;${@}},${version;+;${@}})',
    -        'Export-Package': "org.mockito.junit.jupiter.*;version=${version}",
    -        '-removeheaders': 'Private-Package',
    -        'Automatic-Module-Name': 'org.mockito.junit.jupiter',
    -        '-noextraheaders': 'true',
    -        '-export-apiguardian': 'org.mockito.internal.*'
    -    )
    +    bundle {
    +        bnd(
    +            'Bundle-Name': 'Mockito Extension Library for JUnit 5.',
    +            'Bundle-SymbolicName': 'org.mockito.junit-jupiter',
    +            'Bundle-Version': "\${version_cleanup;${project.version}}",
    +            '-versionpolicy': '[${version;==;${@}},${version;+;${@}})',
    +            'Export-Package': "org.mockito.junit.jupiter.*;version=${version}",
    +            '-removeheaders': 'Private-Package',
    +            'Automatic-Module-Name': 'org.mockito.junit.jupiter',
    +            '-noextraheaders': 'true',
    +            '-export-apiguardian': 'org.mockito.internal.*'
    +        )
    +    }
     }
     
    -def osgiPropertiesFile = file("$buildDir/verifyOSGiProperties.bndrun")
    -
     // Bnd's Resolve task uses a properties file for its configuration. This
     // task writes out the properties necessary for it to verify the OSGi
     // metadata.
    -tasks.register('osgiProperties', WriteProperties) {
    -  outputFile = osgiPropertiesFile
    +def osgiProperties = tasks.register('osgiProperties', WriteProperties) {
    +  outputFile = layout.getBuildDirectory().file("verifyOSGiProperties.bndrun")
       property('-standalone', true)
       property('-runee', "JavaSE-${targetCompatibility}")
       property('-runrequires', 'osgi.identity;filter:="(osgi.identity=org.mockito.junit-jupiter)"')
    @@ -49,12 +47,12 @@ tasks.register('osgiProperties', WriteProperties) {
     // Bnd's Resolve task is what verifies that a jar can be used in OSGi and
     // that its metadata is valid. If the metadata is invalid this task will
     // fail.
    -tasks.register('verifyOSGi', Resolve) {
    -  dependsOn(osgiProperties)
    -  setBndrun(osgiPropertiesFile)
    +def verifyOSGi = tasks.register('verifyOSGi', Resolve) {
    +  getBndrun().fileProvider(osgiProperties.map { it.outputFile })
    +  getOutputBndrun().set(layout.getBuildDirectory().file("resolvedOSGiProperties.bndrun"))
       reportOptional = false
     }
     
    -tasks.check {
    +tasks.named('check') {
       dependsOn(verifyOSGi)
     }
    diff --git a/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java b/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java
    index c2cf37d5fe..220b7f4509 100644
    --- a/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java
    +++ b/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java
    @@ -21,9 +21,9 @@
     import org.junit.jupiter.api.extension.ParameterResolutionException;
     import org.junit.jupiter.api.extension.ParameterResolver;
     import org.mockito.Mock;
    -import org.mockito.MockedStatic;
     import org.mockito.Mockito;
     import org.mockito.MockitoSession;
    +import org.mockito.ScopedMock;
     import org.mockito.internal.configuration.MockAnnotationProcessor;
     import org.mockito.internal.configuration.plugins.Plugins;
     import org.mockito.internal.session.MockitoSessionLoggerAdapter;
    @@ -181,7 +181,7 @@ private Optional retrieveAnnotationFromTestClasses(final Extens
         @Override
         @SuppressWarnings("unchecked")
         public void afterEach(ExtensionContext context) {
    -        context.getStore(MOCKITO).remove(MOCKS, Set.class).forEach(mock -> ((MockedStatic) mock).closeOnDemand());
    +        context.getStore(MOCKITO).remove(MOCKS, Set.class).forEach(mock -> ((ScopedMock) mock).closeOnDemand());
             context.getStore(MOCKITO).remove(SESSION, MockitoSession.class)
                     .finishMocking(context.getExecutionException().orElse(null));
         }
    @@ -200,7 +200,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte
                 parameter.getType(),
                 parameter::getParameterizedType,
                 parameter.getName());
    -        if (mock instanceof MockedStatic) {
    +        if (mock instanceof ScopedMock) {
                 context.getStore(MOCKITO).get(MOCKS, Set.class).add(mock);
             }
             return mock;
    diff --git a/subprojects/junitJupiterExtensionTest/junitJupiterExtensionTest.gradle.kts b/subprojects/junitJupiterExtensionTest/junitJupiterExtensionTest.gradle.kts
    index ad78a43b1f..98d44d43f6 100644
    --- a/subprojects/junitJupiterExtensionTest/junitJupiterExtensionTest.gradle.kts
    +++ b/subprojects/junitJupiterExtensionTest/junitJupiterExtensionTest.gradle.kts
    @@ -7,11 +7,11 @@ plugins {
     description = "End-to-end tests for automatic registration of MockitoExtension."
     
     dependencies {
    -    testCompile(project(":junit-jupiter"))
    -    testCompile(library("assertj"))
    -    testCompile(library("junitPlatformLauncher"))
    -    testCompile(library("junitJupiterApi"))
    -    testRuntime(library("junitJupiterEngine"))
    +    testImplementation(project(":junit-jupiter"))
    +    testImplementation(library("assertj"))
    +    testImplementation(library("junitPlatformLauncher"))
    +    testImplementation(library("junitJupiterApi"))
    +    testRuntimeOnly(library("junitJupiterEngine"))
     }
     
     tasks.named("test") {
    diff --git a/subprojects/junitJupiterInlineMockMakerExtensionTest/junitJupiterInlineMockMakerExtensionTest.gradle.kts b/subprojects/junitJupiterInlineMockMakerExtensionTest/junitJupiterInlineMockMakerExtensionTest.gradle.kts
    index 4bf7e47ee9..442c64f0e9 100644
    --- a/subprojects/junitJupiterInlineMockMakerExtensionTest/junitJupiterInlineMockMakerExtensionTest.gradle.kts
    +++ b/subprojects/junitJupiterInlineMockMakerExtensionTest/junitJupiterInlineMockMakerExtensionTest.gradle.kts
    @@ -7,11 +7,11 @@ plugins {
     description = "End-to-end tests for automatic registration of MockitoExtension with the inline mock maker."
     
     dependencies {
    -    testCompile(project(":junit-jupiter"))
    -    testCompile(library("assertj"))
    -    testCompile(library("junitPlatformLauncher"))
    -    testCompile(library("junitJupiterApi"))
    -    testRuntime(library("junitJupiterEngine"))
    +    testImplementation(project(":junit-jupiter"))
    +    testImplementation(library("assertj"))
    +    testImplementation(library("junitPlatformLauncher"))
    +    testImplementation(library("junitJupiterApi"))
    +    testRuntimeOnly(library("junitJupiterEngine"))
     }
     
     tasks.named("test") {
    diff --git a/subprojects/junitJupiterInlineMockMakerExtensionTest/src/test/java/org/mockitousage/CloseOnDemandTest.java b/subprojects/junitJupiterInlineMockMakerExtensionTest/src/test/java/org/mockitousage/CloseOnDemandTest.java
    new file mode 100644
    index 0000000000..cfb66cf96a
    --- /dev/null
    +++ b/subprojects/junitJupiterInlineMockMakerExtensionTest/src/test/java/org/mockitousage/CloseOnDemandTest.java
    @@ -0,0 +1,41 @@
    +/*
    + * Copyright (c) 2021 Mockito contributors
    + * This program is made available under the terms of the MIT License.
    + */
    +package org.mockitousage;
    +
    +import org.junit.jupiter.api.Test;
    +import org.junit.jupiter.api.extension.ExtendWith;
    +import org.mockito.Mock;
    +import org.mockito.MockedConstruction;
    +import org.mockito.MockedStatic;
    +import org.mockito.junit.jupiter.MockitoExtension;
    +
    +import static org.junit.jupiter.api.Assertions.assertNotNull;
    +
    +/**
    + * Tests to assert that ScopedMock mocks are properly closed on scope exit.
    + */
    +@ExtendWith(MockitoExtension.class)
    +class CloseOnDemandTest {
    +
    +    @Test
    +    void create_mocked_static_1(@Mock MockedStatic mockedStatic) {
    +        assertNotNull(mockedStatic);
    +    }
    +
    +    @Test
    +    void create_mocked_static_2(@Mock MockedStatic mockedStatic) {
    +        assertNotNull(mockedStatic);
    +    }
    +
    +    @Test
    +    void create_mocked_construction_1(@Mock MockedConstruction mockConstruction) {
    +        assertNotNull(mockConstruction);
    +    }
    +
    +    @Test
    +    void create_mocked_construction_2(@Mock MockedConstruction mockConstruction) {
    +        assertNotNull(mockConstruction);
    +    }
    +}
    diff --git a/subprojects/junitJupiterParallelTest/junitJupiterParallelTest.gradle b/subprojects/junitJupiterParallelTest/junitJupiterParallelTest.gradle
    index 6da4f3b4d7..5db1c32702 100644
    --- a/subprojects/junitJupiterParallelTest/junitJupiterParallelTest.gradle
    +++ b/subprojects/junitJupiterParallelTest/junitJupiterParallelTest.gradle
    @@ -7,7 +7,7 @@ apply plugin: "java"
     dependencies {
         testImplementation libraries.junitJupiterApi
         testImplementation project(":junit-jupiter")
    -    testRuntime libraries.junitJupiterEngine
    +    testRuntimeOnly libraries.junitJupiterEngine
     }
     
     test {
    diff --git a/subprojects/kotlinReleaseCoroutinesTest/kotlinReleaseCoroutinesTest.gradle b/subprojects/kotlinReleaseCoroutinesTest/kotlinReleaseCoroutinesTest.gradle
    index d3c809ff5e..a8512591ce 100644
    --- a/subprojects/kotlinReleaseCoroutinesTest/kotlinReleaseCoroutinesTest.gradle
    +++ b/subprojects/kotlinReleaseCoroutinesTest/kotlinReleaseCoroutinesTest.gradle
    @@ -18,9 +18,9 @@ repositories {
     }
     
     dependencies {
    -    testCompile project(":")
    -    testCompile libraries.junit4
    +    testImplementation project(":")
    +    testImplementation libraries.junit4
     
    -    testCompile libraries.kotlin.stdlib
    -    testCompile libraries.kotlin.coroutines
    +    testImplementation libraries.kotlin.stdlib
    +    testImplementation libraries.kotlin.coroutines
     }
    diff --git a/subprojects/kotlinTest/kotlinTest.gradle b/subprojects/kotlinTest/kotlinTest.gradle
    index 01dee6b43d..55c8e8036f 100644
    --- a/subprojects/kotlinTest/kotlinTest.gradle
    +++ b/subprojects/kotlinTest/kotlinTest.gradle
    @@ -8,9 +8,9 @@ description = "Kotlin tests for Mockito."
     apply from: "$rootDir/gradle/dependencies.gradle"
     
     dependencies {
    -    testCompile project(":")
    -    testCompile libraries.junit4
    +    testImplementation project(":")
    +    testImplementation libraries.junit4
     
    -    testCompile libraries.kotlin.stdlib
    -    testCompile libraries.kotlin.coroutines
    +    testImplementation libraries.kotlin.stdlib
    +    testImplementation libraries.kotlin.coroutines
     }
    diff --git a/subprojects/memory-test/memory-test.gradle b/subprojects/memory-test/memory-test.gradle
    index a53d479a0c..a7df279a31 100644
    --- a/subprojects/memory-test/memory-test.gradle
    +++ b/subprojects/memory-test/memory-test.gradle
    @@ -6,14 +6,13 @@ description = "Test suite memory usage of Mockito"
     apply from: "$rootDir/gradle/dependencies.gradle"
     
     dependencies {
    -    compile project.rootProject
    -    testCompile libraries.junit4
    -    testCompile libraries.assertj
    +    implementation project.rootProject
    +    testImplementation libraries.junit4
    +    testImplementation libraries.assertj
     }
     
     tasks.javadoc.enabled = false
     
     test {
         maxHeapSize = "128m"
    -    jvmArgs = ["-XX:MaxPermSize=128m"]
     }
    diff --git a/subprojects/module-test/module-test.gradle b/subprojects/module-test/module-test.gradle
    index 2373407c34..3be8730cc6 100644
    --- a/subprojects/module-test/module-test.gradle
    +++ b/subprojects/module-test/module-test.gradle
    @@ -11,9 +11,9 @@ description = "Test suite for Java 9 modules with Mockito"
     apply from: "$rootDir/gradle/dependencies.gradle"
     
     dependencies {
    -    compile project.rootProject
    -    testCompile libraries.junit4
    -    testCompile libraries.assertj
    +    implementation project.rootProject
    +    testImplementation libraries.junit4
    +    testImplementation libraries.assertj
     }
     
     tasks.javadoc.enabled = false
    diff --git a/subprojects/osgi-test/osgi-test-bundles.gradle b/subprojects/osgi-test/osgi-test-bundles.gradle
    index bcecd725eb..49ba81b70a 100644
    --- a/subprojects/osgi-test/osgi-test-bundles.gradle
    +++ b/subprojects/osgi-test/osgi-test-bundles.gradle
    @@ -17,9 +17,9 @@ sourceSets {
     }
     
     dependencies {
    -    testBundleCompile project.rootProject
    -    testBundleCompile libraries.junit4
    -    testBundleCompile sourceSets.otherBundle.output
    +    testBundleImplementation project.rootProject
    +    testBundleImplementation libraries.junit4
    +    testBundleImplementation sourceSets.otherBundle.output
     }
     
     import aQute.bnd.gradle.Bundle
    diff --git a/subprojects/osgi-test/osgi-test.gradle b/subprojects/osgi-test/osgi-test.gradle
    index 8ebcc042f3..3689333d1e 100644
    --- a/subprojects/osgi-test/osgi-test.gradle
    +++ b/subprojects/osgi-test/osgi-test.gradle
    @@ -8,10 +8,10 @@ apply from: "osgi-test-bundles.gradle"
     description = "Test suite for OSGi framework with Mockito"
     
     dependencies {
    -    testCompile libraries.junit4
    -    testCompile libraries.osgi
    +    testImplementation libraries.junit4
    +    testImplementation libraries.osgi
     
    -    testRuntime libraries.equinox
    +    testRuntimeOnly libraries.equinox
     }
     
     tasks.javadoc.enabled = false
    diff --git a/subprojects/proxy/proxy.gradle b/subprojects/proxy/proxy.gradle
    new file mode 100644
    index 0000000000..e96f51b9a2
    --- /dev/null
    +++ b/subprojects/proxy/proxy.gradle
    @@ -0,0 +1,10 @@
    +description = "Mockito preconfigured proxy mock mock maker (to support interfaces without code generation)"
    +
    +apply from: "$rootDir/gradle/java-library.gradle"
    +
    +dependencies {
    +    implementation project.rootProject
    +    testImplementation libraries.junit4
    +}
    +
    +tasks.javadoc.enabled = false
    diff --git a/subprojects/proxy/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker b/subprojects/proxy/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker
    new file mode 100644
    index 0000000000..d71325d9a6
    --- /dev/null
    +++ b/subprojects/proxy/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker
    @@ -0,0 +1 @@
    +mock-maker-proxy
    diff --git a/subprojects/proxy/src/test/java/org/mockitoproxy/MocksTest.java b/subprojects/proxy/src/test/java/org/mockitoproxy/MocksTest.java
    new file mode 100644
    index 0000000000..81e55f4817
    --- /dev/null
    +++ b/subprojects/proxy/src/test/java/org/mockitoproxy/MocksTest.java
    @@ -0,0 +1,119 @@
    +/*
    + * Copyright (c) 2021 Mockito contributors
    + * This program is made available under the terms of the MIT License.
    + */
    +package org.mockitoproxy;
    +
    +import org.hamcrest.CoreMatchers;
    +import org.junit.Test;
    +import org.mockito.Mockito;
    +import org.mockito.exceptions.base.MockitoException;
    +
    +import java.io.ByteArrayOutputStream;
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.lang.reflect.Proxy;
    +
    +import static org.hamcrest.CoreMatchers.instanceOf;
    +import static org.hamcrest.CoreMatchers.is;
    +import static org.hamcrest.MatcherAssert.assertThat;
    +import static org.junit.Assert.fail;
    +import static org.mockito.Mockito.verify;
    +import static org.mockito.Mockito.when;
    +
    +public class MocksTest {
    +
    +    @Test
    +    public void can_create_mock_interface() {
    +        SomeInterface mock = Mockito.mock(SomeInterface.class);
    +        assertThat(mock, instanceOf(Proxy.class));
    +
    +        when(mock.m()).thenReturn("value");
    +
    +        assertThat(mock.m(), is("value"));
    +
    +        verify(mock).m();
    +    }
    +
    +    @Test
    +    public void can_create_mock_object() {
    +        Object mock = Mockito.mock(Object.class);
    +        assertThat(mock, instanceOf(Proxy.class));
    +
    +        when(mock.toString()).thenReturn("value");
    +
    +        assertThat(mock.toString(), is("value"));
    +    }
    +
    +    @Test
    +    public void can_call_default_method_if_available() {
    +        SomeInterface mock = Mockito.mock(SomeInterface.class);
    +        assertThat(mock, instanceOf(Proxy.class));
    +
    +        when(mock.d()).thenCallRealMethod();
    +
    +        assertThat(mock.d(), is("default"));
    +
    +        verify(mock).d();
    +    }
    +
    +    @Test
    +    public void cannot_call_default_method_if_not_available() {
    +        SomeInterface mock = Mockito.mock(SomeInterface.class);
    +        assertThat(mock, instanceOf(Proxy.class));
    +
    +        try {
    +            when(mock.m()).thenCallRealMethod();
    +            fail("Expected failure when requesting real method for non-default method");
    +        } catch (MockitoException e) {
    +            assertThat(e.getMessage(), CoreMatchers.containsString("real method"));
    +        }
    +    }
    +
    +    @Test
    +    public void can_create_mock_different_class_loader() throws Exception {
    +        ClassLoader loader = new ClassLoader(null) {
    +            @Override
    +            public Class findClass(String name) throws ClassNotFoundException {
    +                if (name.startsWith(MocksTest.class.getPackage().getName())) {
    +                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    +                    try (InputStream inputStream = MocksTest.class.getClassLoader()
    +                        .getResourceAsStream(name.replace('.', '/') + ".class")) {
    +                        int length;
    +                        byte[] buffer = new byte[1024];
    +                        while ((length = inputStream.read(buffer)) != -1) {
    +                            outputStream.write(buffer, 0, length);
    +                        }
    +                    } catch (IOException e) {
    +                        throw new AssertionError(e);
    +                    }
    +                    byte[] classFile = outputStream.toByteArray();
    +                    return defineClass(name, classFile, 0, classFile.length);
    +                }
    +                return super.loadClass(name);
    +            }
    +        };
    +
    +
    +        Object mock = Mockito.mock(Class.forName(SomeInterface.class.getName(), true, loader));
    +        assertThat(mock, instanceOf(Proxy.class));
    +
    +        when(mock.toString()).thenReturn("value");
    +
    +        assertThat(mock.toString(), is("value"));
    +    }
    +
    +    @Test(expected = MockitoException.class)
    +    public void cannot_create_mock_of_non_object_class() {
    +        Number number = Mockito.mock(Number.class);
    +    }
    +
    +    public interface SomeInterface {
    +
    +        Object m();
    +
    +        default Object d() {
    +            return "default";
    +        }
    +    }
    +}