diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bc0694a891..51a396ed01 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,7 +29,7 @@ jobs:
# Definition of the build matrix
strategy:
matrix:
- java: [8, 11, 17]
+ java: [11, 17]
mock-maker: ['mock-maker-default', 'mock-maker-inline']
# All build steps
@@ -48,11 +48,11 @@ jobs:
java-version: ${{ matrix.java }}
- name: 3. Validate Gradle wrapper
- if: matrix.java == 8 && matrix.mock-maker == 'mock-maker-default' # SINGLE-MATRIX-JOB
+ if: matrix.java == 11 && matrix.mock-maker == 'mock-maker-default' # SINGLE-MATRIX-JOB
uses: gradle/wrapper-validation-action@v1.0.5 # https://github.com/gradle/wrapper-validation-action
- name: 4. Build and check reproducibility of artifacts (single job only)
- if: matrix.java == 8 && matrix.mock-maker == 'mock-maker-default' # SINGLE-MATRIX-JOB
+ if: matrix.java == 11 && matrix.mock-maker == 'mock-maker-default' # SINGLE-MATRIX-JOB
run: ./check_reproducibility.sh
- name: 5. Spotless check (single job only). Run './gradlew spotlessApply' locally if this job fails.
diff --git a/build.gradle b/build.gradle
index 8ec866b947..b49b1fb24f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,7 +24,7 @@ plugins {
id 'eclipse'
id 'com.github.ben-manes.versions' version '0.44.0'
id 'biz.aQute.bnd.builder' version '6.3.1'
- id 'ru.vyarus.animalsniffer' version '1.5.2'
+ id 'ru.vyarus.animalsniffer' version '1.6.0'
}
description = 'Mockito mock objects library core API and implementation'
@@ -52,10 +52,8 @@ allprojects { proj ->
mavenCentral()
google()
}
- if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_11)) {
- plugins.withId('java') {
- proj.apply from: "$rootDir/gradle/errorprone.gradle"
- }
+ plugins.withId('java') {
+ proj.apply from: "$rootDir/gradle/errorprone.gradle"
}
tasks.withType(JavaCompile) {
//I don't believe those warnings add value given modern IDEs
@@ -66,7 +64,7 @@ allprojects { proj ->
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
options.addStringOption('charSet', 'UTF-8')
- options.setSource('8')
+ options.setSource('11')
}
tasks.withType(AbstractArchiveTask) {
@@ -107,6 +105,15 @@ dependencies {
animalsniffer {
sourceSets = [sourceSets.main]
annotation = 'org.mockito.internal.SuppressSignatureCheck'
+ // See please https://github.com/mojohaus/animal-sniffer/issues/172
+ ignore += [
+ 'java.lang.instrument.Instrumentation',
+ 'java.lang.invoke.MethodHandle',
+ 'java.lang.invoke.MethodHandles$Lookup',
+ 'java.lang.StackWalker',
+ 'java.lang.StackWalker$StackFrame',
+ 'java.lang.StackWalker$Option'
+ ]
}
spotless {
diff --git a/gradle.properties b/gradle.properties
index 3ccf4c9a66..ad11ad8da0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,6 +4,7 @@ org.gradle.caching=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 \
-XX:+IgnoreUnrecognizedVMOptions \
--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
+ --add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
diff --git a/gradle/errorprone.gradle b/gradle/errorprone.gradle
index 1d9cf7428e..d7d551432f 100644
--- a/gradle/errorprone.gradle
+++ b/gradle/errorprone.gradle
@@ -1,12 +1,6 @@
apply plugin: "net.ltgt.errorprone"
-if (JavaVersion.current() == JavaVersion.VERSION_1_8) {
- dependencies {
- errorproneJavac("com.google.errorprone:javac:9+181-r4173-1")
- }
-}
-
dependencies {
errorprone libraries.errorprone
}
diff --git a/gradle/java-library.gradle b/gradle/java-library.gradle
index b5949b76fe..5e91b74443 100644
--- a/gradle/java-library.gradle
+++ b/gradle/java-library.gradle
@@ -14,8 +14,8 @@ generatePomFileForJavaLibraryPublication.doLast {
assert pom.name == archivesBaseName
}
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
+sourceCompatibility = 11
+targetCompatibility = 11
test {
include "**/*Test.class"
diff --git a/gradle/mockito-core/java-8-docs/package-list b/gradle/mockito-core/java-8-docs/package-list
deleted file mode 100644
index 351c186855..0000000000
--- a/gradle/mockito-core/java-8-docs/package-list
+++ /dev/null
@@ -1,217 +0,0 @@
-java.applet
-java.awt
-java.awt.color
-java.awt.datatransfer
-java.awt.dnd
-java.awt.event
-java.awt.font
-java.awt.geom
-java.awt.im
-java.awt.im.spi
-java.awt.image
-java.awt.image.renderable
-java.awt.print
-java.beans
-java.beans.beancontext
-java.io
-java.lang
-java.lang.annotation
-java.lang.instrument
-java.lang.invoke
-java.lang.management
-java.lang.ref
-java.lang.reflect
-java.math
-java.net
-java.nio
-java.nio.channels
-java.nio.channels.spi
-java.nio.charset
-java.nio.charset.spi
-java.nio.file
-java.nio.file.attribute
-java.nio.file.spi
-java.rmi
-java.rmi.activation
-java.rmi.dgc
-java.rmi.registry
-java.rmi.server
-java.security
-java.security.acl
-java.security.cert
-java.security.interfaces
-java.security.spec
-java.sql
-java.text
-java.text.spi
-java.time
-java.time.chrono
-java.time.format
-java.time.temporal
-java.time.zone
-java.util
-java.util.concurrent
-java.util.concurrent.atomic
-java.util.concurrent.locks
-java.util.function
-java.util.jar
-java.util.logging
-java.util.prefs
-java.util.regex
-java.util.spi
-java.util.stream
-java.util.zip
-javax.accessibility
-javax.activation
-javax.activity
-javax.annotation
-javax.annotation.processing
-javax.crypto
-javax.crypto.interfaces
-javax.crypto.spec
-javax.imageio
-javax.imageio.event
-javax.imageio.metadata
-javax.imageio.plugins.bmp
-javax.imageio.plugins.jpeg
-javax.imageio.spi
-javax.imageio.stream
-javax.jws
-javax.jws.soap
-javax.lang.model
-javax.lang.model.element
-javax.lang.model.type
-javax.lang.model.util
-javax.management
-javax.management.loading
-javax.management.modelmbean
-javax.management.monitor
-javax.management.openmbean
-javax.management.relation
-javax.management.remote
-javax.management.remote.rmi
-javax.management.timer
-javax.naming
-javax.naming.directory
-javax.naming.event
-javax.naming.ldap
-javax.naming.spi
-javax.net
-javax.net.ssl
-javax.print
-javax.print.attribute
-javax.print.attribute.standard
-javax.print.event
-javax.rmi
-javax.rmi.CORBA
-javax.rmi.ssl
-javax.script
-javax.security.auth
-javax.security.auth.callback
-javax.security.auth.kerberos
-javax.security.auth.login
-javax.security.auth.spi
-javax.security.auth.x500
-javax.security.cert
-javax.security.sasl
-javax.sound.midi
-javax.sound.midi.spi
-javax.sound.sampled
-javax.sound.sampled.spi
-javax.sql
-javax.sql.rowset
-javax.sql.rowset.serial
-javax.sql.rowset.spi
-javax.swing
-javax.swing.border
-javax.swing.colorchooser
-javax.swing.event
-javax.swing.filechooser
-javax.swing.plaf
-javax.swing.plaf.basic
-javax.swing.plaf.metal
-javax.swing.plaf.multi
-javax.swing.plaf.nimbus
-javax.swing.plaf.synth
-javax.swing.table
-javax.swing.text
-javax.swing.text.html
-javax.swing.text.html.parser
-javax.swing.text.rtf
-javax.swing.tree
-javax.swing.undo
-javax.tools
-javax.transaction
-javax.transaction.xa
-javax.xml
-javax.xml.bind
-javax.xml.bind.annotation
-javax.xml.bind.annotation.adapters
-javax.xml.bind.attachment
-javax.xml.bind.helpers
-javax.xml.bind.util
-javax.xml.crypto
-javax.xml.crypto.dom
-javax.xml.crypto.dsig
-javax.xml.crypto.dsig.dom
-javax.xml.crypto.dsig.keyinfo
-javax.xml.crypto.dsig.spec
-javax.xml.datatype
-javax.xml.namespace
-javax.xml.parsers
-javax.xml.soap
-javax.xml.stream
-javax.xml.stream.events
-javax.xml.stream.util
-javax.xml.transform
-javax.xml.transform.dom
-javax.xml.transform.sax
-javax.xml.transform.stax
-javax.xml.transform.stream
-javax.xml.validation
-javax.xml.ws
-javax.xml.ws.handler
-javax.xml.ws.handler.soap
-javax.xml.ws.http
-javax.xml.ws.soap
-javax.xml.ws.spi
-javax.xml.ws.spi.http
-javax.xml.ws.wsaddressing
-javax.xml.xpath
-org.ietf.jgss
-org.omg.CORBA
-org.omg.CORBA.DynAnyPackage
-org.omg.CORBA.ORBPackage
-org.omg.CORBA.TypeCodePackage
-org.omg.CORBA.portable
-org.omg.CORBA_2_3
-org.omg.CORBA_2_3.portable
-org.omg.CosNaming
-org.omg.CosNaming.NamingContextExtPackage
-org.omg.CosNaming.NamingContextPackage
-org.omg.Dynamic
-org.omg.DynamicAny
-org.omg.DynamicAny.DynAnyFactoryPackage
-org.omg.DynamicAny.DynAnyPackage
-org.omg.IOP
-org.omg.IOP.CodecFactoryPackage
-org.omg.IOP.CodecPackage
-org.omg.Messaging
-org.omg.PortableInterceptor
-org.omg.PortableInterceptor.ORBInitInfoPackage
-org.omg.PortableServer
-org.omg.PortableServer.CurrentPackage
-org.omg.PortableServer.POAManagerPackage
-org.omg.PortableServer.POAPackage
-org.omg.PortableServer.ServantLocatorPackage
-org.omg.PortableServer.portable
-org.omg.SendingContext
-org.omg.stub.java.rmi
-org.w3c.dom
-org.w3c.dom.bootstrap
-org.w3c.dom.events
-org.w3c.dom.ls
-org.w3c.dom.views
-org.xml.sax
-org.xml.sax.ext
-org.xml.sax.helpers
diff --git a/gradle/mockito-core/java-8-docs/element-list b/gradle/mockito-core/java-docs/element-list
similarity index 57%
rename from gradle/mockito-core/java-8-docs/element-list
rename to gradle/mockito-core/java-docs/element-list
index 351c186855..4cfabf8fdf 100644
--- a/gradle/mockito-core/java-8-docs/element-list
+++ b/gradle/mockito-core/java-docs/element-list
@@ -1,28 +1,14 @@
-java.applet
-java.awt
-java.awt.color
-java.awt.datatransfer
-java.awt.dnd
-java.awt.event
-java.awt.font
-java.awt.geom
-java.awt.im
-java.awt.im.spi
-java.awt.image
-java.awt.image.renderable
-java.awt.print
-java.beans
-java.beans.beancontext
+module:java.base
java.io
java.lang
java.lang.annotation
-java.lang.instrument
java.lang.invoke
-java.lang.management
+java.lang.module
java.lang.ref
java.lang.reflect
java.math
java.net
+java.net.spi
java.nio
java.nio.channels
java.nio.channels.spi
@@ -31,17 +17,11 @@ java.nio.charset.spi
java.nio.file
java.nio.file.attribute
java.nio.file.spi
-java.rmi
-java.rmi.activation
-java.rmi.dgc
-java.rmi.registry
-java.rmi.server
java.security
java.security.acl
java.security.cert
java.security.interfaces
java.security.spec
-java.sql
java.text
java.text.spi
java.time
@@ -55,73 +35,63 @@ java.util.concurrent.atomic
java.util.concurrent.locks
java.util.function
java.util.jar
-java.util.logging
-java.util.prefs
java.util.regex
java.util.spi
java.util.stream
java.util.zip
-javax.accessibility
-javax.activation
-javax.activity
-javax.annotation
-javax.annotation.processing
javax.crypto
javax.crypto.interfaces
javax.crypto.spec
+javax.net
+javax.net.ssl
+javax.security.auth
+javax.security.auth.callback
+javax.security.auth.login
+javax.security.auth.spi
+javax.security.auth.x500
+javax.security.cert
+module:java.compiler
+javax.annotation.processing
+javax.lang.model
+javax.lang.model.element
+javax.lang.model.type
+javax.lang.model.util
+javax.tools
+module:java.datatransfer
+java.awt.datatransfer
+module:java.desktop
+java.applet
+java.awt
+java.awt.color
+java.awt.desktop
+java.awt.dnd
+java.awt.event
+java.awt.font
+java.awt.geom
+java.awt.im
+java.awt.im.spi
+java.awt.image
+java.awt.image.renderable
+java.awt.print
+java.beans
+java.beans.beancontext
+javax.accessibility
javax.imageio
javax.imageio.event
javax.imageio.metadata
javax.imageio.plugins.bmp
javax.imageio.plugins.jpeg
+javax.imageio.plugins.tiff
javax.imageio.spi
javax.imageio.stream
-javax.jws
-javax.jws.soap
-javax.lang.model
-javax.lang.model.element
-javax.lang.model.type
-javax.lang.model.util
-javax.management
-javax.management.loading
-javax.management.modelmbean
-javax.management.monitor
-javax.management.openmbean
-javax.management.relation
-javax.management.remote
-javax.management.remote.rmi
-javax.management.timer
-javax.naming
-javax.naming.directory
-javax.naming.event
-javax.naming.ldap
-javax.naming.spi
-javax.net
-javax.net.ssl
javax.print
javax.print.attribute
javax.print.attribute.standard
javax.print.event
-javax.rmi
-javax.rmi.CORBA
-javax.rmi.ssl
-javax.script
-javax.security.auth
-javax.security.auth.callback
-javax.security.auth.kerberos
-javax.security.auth.login
-javax.security.auth.spi
-javax.security.auth.x500
-javax.security.cert
-javax.security.sasl
javax.sound.midi
javax.sound.midi.spi
javax.sound.sampled
javax.sound.sampled.spi
-javax.sql
-javax.sql.rowset
-javax.sql.rowset.serial
-javax.sql.rowset.spi
javax.swing
javax.swing.border
javax.swing.colorchooser
@@ -140,26 +110,64 @@ javax.swing.text.html.parser
javax.swing.text.rtf
javax.swing.tree
javax.swing.undo
-javax.tools
-javax.transaction
+module:java.instrument
+java.lang.instrument
+module:java.logging
+java.util.logging
+module:java.management
+java.lang.management
+javax.management
+javax.management.loading
+javax.management.modelmbean
+javax.management.monitor
+javax.management.openmbean
+javax.management.relation
+javax.management.remote
+javax.management.timer
+module:java.management.rmi
+javax.management.remote.rmi
+module:java.naming
+javax.naming
+javax.naming.directory
+javax.naming.event
+javax.naming.ldap
+javax.naming.spi
+module:java.net.http
+java.net.http
+module:java.prefs
+java.util.prefs
+module:java.rmi
+java.rmi
+java.rmi.activation
+java.rmi.dgc
+java.rmi.registry
+java.rmi.server
+javax.rmi.ssl
+module:java.scripting
+javax.script
+module:java.se
+module:java.security.jgss
+javax.security.auth.kerberos
+org.ietf.jgss
+module:java.security.sasl
+javax.security.sasl
+module:java.smartcardio
+javax.smartcardio
+module:java.sql
+java.sql
+javax.sql
+module:java.sql.rowset
+javax.sql.rowset
+javax.sql.rowset.serial
+javax.sql.rowset.spi
+module:java.transaction.xa
javax.transaction.xa
+module:java.xml
javax.xml
-javax.xml.bind
-javax.xml.bind.annotation
-javax.xml.bind.annotation.adapters
-javax.xml.bind.attachment
-javax.xml.bind.helpers
-javax.xml.bind.util
-javax.xml.crypto
-javax.xml.crypto.dom
-javax.xml.crypto.dsig
-javax.xml.crypto.dsig.dom
-javax.xml.crypto.dsig.keyinfo
-javax.xml.crypto.dsig.spec
+javax.xml.catalog
javax.xml.datatype
javax.xml.namespace
javax.xml.parsers
-javax.xml.soap
javax.xml.stream
javax.xml.stream.events
javax.xml.stream.util
@@ -169,49 +177,106 @@ javax.xml.transform.sax
javax.xml.transform.stax
javax.xml.transform.stream
javax.xml.validation
-javax.xml.ws
-javax.xml.ws.handler
-javax.xml.ws.handler.soap
-javax.xml.ws.http
-javax.xml.ws.soap
-javax.xml.ws.spi
-javax.xml.ws.spi.http
-javax.xml.ws.wsaddressing
javax.xml.xpath
-org.ietf.jgss
-org.omg.CORBA
-org.omg.CORBA.DynAnyPackage
-org.omg.CORBA.ORBPackage
-org.omg.CORBA.TypeCodePackage
-org.omg.CORBA.portable
-org.omg.CORBA_2_3
-org.omg.CORBA_2_3.portable
-org.omg.CosNaming
-org.omg.CosNaming.NamingContextExtPackage
-org.omg.CosNaming.NamingContextPackage
-org.omg.Dynamic
-org.omg.DynamicAny
-org.omg.DynamicAny.DynAnyFactoryPackage
-org.omg.DynamicAny.DynAnyPackage
-org.omg.IOP
-org.omg.IOP.CodecFactoryPackage
-org.omg.IOP.CodecPackage
-org.omg.Messaging
-org.omg.PortableInterceptor
-org.omg.PortableInterceptor.ORBInitInfoPackage
-org.omg.PortableServer
-org.omg.PortableServer.CurrentPackage
-org.omg.PortableServer.POAManagerPackage
-org.omg.PortableServer.POAPackage
-org.omg.PortableServer.ServantLocatorPackage
-org.omg.PortableServer.portable
-org.omg.SendingContext
-org.omg.stub.java.rmi
org.w3c.dom
org.w3c.dom.bootstrap
org.w3c.dom.events
org.w3c.dom.ls
+org.w3c.dom.ranges
+org.w3c.dom.traversal
org.w3c.dom.views
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers
+module:java.xml.crypto
+javax.xml.crypto
+javax.xml.crypto.dom
+javax.xml.crypto.dsig
+javax.xml.crypto.dsig.dom
+javax.xml.crypto.dsig.keyinfo
+javax.xml.crypto.dsig.spec
+module:jdk.accessibility
+com.sun.java.accessibility.util
+module:jdk.attach
+com.sun.tools.attach
+com.sun.tools.attach.spi
+module:jdk.charsets
+module:jdk.compiler
+com.sun.source.doctree
+com.sun.source.tree
+com.sun.source.util
+com.sun.tools.javac
+module:jdk.crypto.cryptoki
+module:jdk.crypto.ec
+module:jdk.dynalink
+jdk.dynalink
+jdk.dynalink.beans
+jdk.dynalink.linker
+jdk.dynalink.linker.support
+jdk.dynalink.support
+module:jdk.editpad
+module:jdk.hotspot.agent
+module:jdk.httpserver
+com.sun.net.httpserver
+com.sun.net.httpserver.spi
+module:jdk.jartool
+com.sun.jarsigner
+jdk.security.jarsigner
+module:jdk.javadoc
+com.sun.javadoc
+com.sun.tools.javadoc
+jdk.javadoc.doclet
+module:jdk.jcmd
+module:jdk.jconsole
+com.sun.tools.jconsole
+module:jdk.jdeps
+module:jdk.jdi
+com.sun.jdi
+com.sun.jdi.connect
+com.sun.jdi.connect.spi
+com.sun.jdi.event
+com.sun.jdi.request
+module:jdk.jdwp.agent
+module:jdk.jfr
+jdk.jfr
+jdk.jfr.consumer
+module:jdk.jlink
+module:jdk.jshell
+jdk.jshell
+jdk.jshell.execution
+jdk.jshell.spi
+jdk.jshell.tool
+module:jdk.jsobject
+netscape.javascript
+module:jdk.jstatd
+module:jdk.localedata
+module:jdk.management
+com.sun.management
+module:jdk.management.agent
+module:jdk.management.jfr
+jdk.management.jfr
+module:jdk.naming.dns
+module:jdk.naming.rmi
+module:jdk.net
+jdk.net
+jdk.nio
+module:jdk.pack
+module:jdk.rmic
+module:jdk.scripting.nashorn
+jdk.nashorn.api.scripting
+jdk.nashorn.api.tree
+module:jdk.sctp
+com.sun.nio.sctp
+module:jdk.security.auth
+com.sun.security.auth
+com.sun.security.auth.callback
+com.sun.security.auth.login
+com.sun.security.auth.module
+module:jdk.security.jgss
+com.sun.security.jgss
+module:jdk.xml.dom
+org.w3c.dom.css
+org.w3c.dom.html
+org.w3c.dom.stylesheets
+org.w3c.dom.xpath
+module:jdk.zipfs
diff --git a/gradle/mockito-core/javadoc.gradle b/gradle/mockito-core/javadoc.gradle
index b4334b1b2a..9a995ec45d 100644
--- a/gradle/mockito-core/javadoc.gradle
+++ b/gradle/mockito-core/javadoc.gradle
@@ -1,10 +1,6 @@
//It seems the gradle javadoc task works file by file and as such disable some features of javadoc tool
//such as link to packages, https://groups.google.com/d/msg/gradle-dev/R83dy_6PHMc/bgw0cUTMFAAJ
-
-// In this directory we keep two copies of the `package-list` file for java 8 api docs:
-// - as `package-list` for Java 9+
-// - as `element-list` for java 8
-def java8DocsDir = 'gradle/mockito-core/java-8-docs'
+def javaDocsDir = 'gradle/mockito-core/java-docs'
javadoc {
description "Creates javadoc html for Mockito API."
@@ -44,8 +40,8 @@ javadoc {
options.noIndex = false
options.noNavBar = false
options.noTree = false
- options.links('https://junit.org/junit4/javadoc/4.12/')
- options.linksOffline('https://docs.oracle.com/javase/8/docs/api/', java8DocsDir)
+ options.links('https://junit.org/junit4/javadoc/4.13.2/')
+ options.linksOffline('https://docs.oracle.com/en/java/javase/11/docs/api/', javaDocsDir)
options.bottom("""
diff --git a/gradle/root/coverage.gradle b/gradle/root/coverage.gradle
index 87d0d7da01..cd48775763 100644
--- a/gradle/root/coverage.gradle
+++ b/gradle/root/coverage.gradle
@@ -5,21 +5,13 @@ task mockitoCoverage(type: JacocoReport) {
if (currentProject.name in ['android']) {
return
}
- // We only run these tests on Java 9+
- if (currentProject.name in ['module-test'] && !JavaVersion.current().isJava9Compatible()) {
- return
- }
- // We only run these tests on Java 8
- if (currentProject.name in ['errorprone'] && JavaVersion.current().isJava9Compatible()) {
- return
- }
plugins.withId("java") {
mockitoCoverage.sourceSets currentProject.sourceSets.main
apply plugin: "jacoco"
jacoco {
- toolVersion = '0.8.7'
+ toolVersion = '0.8.8'
if (currentProject != rootProject) { //already automatically enhanced in mockito main project as "java" plugin was applied before
applyTo test
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 313149df98..54b604b4f7 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -17,13 +17,8 @@ include("inline",
"memory-test",
"junitJupiterParallelTest",
"osgi-test",
- "bom")
-
-if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_11)) {
- include("errorprone")
-} else {
- logger.info("Not including errorprone, which requires minimum JDK 11+")
-}
+ "bom",
+ "errorprone")
if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17) && (System.getenv("ANDROID_SDK_ROOT") != null || File(".local.properties").exists())) {
include("androidTest")
diff --git a/src/main/java/org/mockito/internal/debugging/Java8LocationImpl.java b/src/main/java/org/mockito/internal/debugging/Java8LocationImpl.java
deleted file mode 100644
index e8ee387c0a..0000000000
--- a/src/main/java/org/mockito/internal/debugging/Java8LocationImpl.java
+++ /dev/null
@@ -1,59 +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.io.Serializable;
-
-import org.mockito.internal.exceptions.stacktrace.StackTraceFilter;
-import org.mockito.invocation.Location;
-
-class Java8LocationImpl implements Location, Serializable {
-
- private static final long serialVersionUID = -9054861157390980624L;
- // Limit the amount of objects being created, as this class is heavily instantiated:
- private static final StackTraceFilter stackTraceFilter = new StackTraceFilter();
-
- private String stackTraceLine;
- private String sourceFile;
-
- public Java8LocationImpl(Throwable stackTraceHolder, boolean isInline) {
- this(stackTraceFilter, stackTraceHolder, isInline);
- }
-
- private Java8LocationImpl(
- StackTraceFilter stackTraceFilter, Throwable stackTraceHolder, boolean isInline) {
- computeStackTraceInformation(stackTraceFilter, stackTraceHolder, isInline);
- }
-
- @Override
- public String toString() {
- return stackTraceLine;
- }
-
- /**
- * Eagerly compute the stacktrace line from the stackTraceHolder. Storing the Throwable is
- * memory-intensive for tests that have large stacktraces and have a lot of invocations on
- * mocks.
- */
- private void computeStackTraceInformation(
- StackTraceFilter stackTraceFilter, Throwable stackTraceHolder, boolean isInline) {
- StackTraceElement filtered = stackTraceFilter.filterFirst(stackTraceHolder, isInline);
-
- // there are corner cases where exception can have a null or empty stack trace
- // for example, a custom exception can override getStackTrace() method
- if (filtered == null) {
- this.stackTraceLine = "-> at <>";
- this.sourceFile = "";
- } else {
- this.stackTraceLine = "-> at " + filtered;
- this.sourceFile = filtered.getFileName();
- }
- }
-
- @Override
- public String getSourceFile() {
- return sourceFile;
- }
-}
diff --git a/src/main/java/org/mockito/internal/debugging/LocationFactory.java b/src/main/java/org/mockito/internal/debugging/LocationFactory.java
index daafddedaf..6232689155 100644
--- a/src/main/java/org/mockito/internal/debugging/LocationFactory.java
+++ b/src/main/java/org/mockito/internal/debugging/LocationFactory.java
@@ -24,26 +24,13 @@ private interface Factory {
}
private static Factory createLocationFactory() {
- try {
- Class.forName("java.lang.StackWalker");
- return new Java9PlusLocationFactory();
- } catch (ClassNotFoundException e) {
- return new Java8LocationFactory();
- }
+ return new LocationFactoryImpl();
}
- private static final class Java8LocationFactory implements Factory {
- @Override
- public Location create(boolean inline) {
- return new Java8LocationImpl(new Throwable(), inline);
- }
- }
-
- private static final class Java9PlusLocationFactory implements Factory {
-
+ private static final class LocationFactoryImpl implements Factory {
@Override
public Location create(boolean inline) {
- return new Java9PlusLocationImpl(inline);
+ return new LocationImpl(inline);
}
}
}
diff --git a/src/main/java/org/mockito/internal/debugging/Java9PlusLocationImpl.java b/src/main/java/org/mockito/internal/debugging/LocationImpl.java
similarity index 55%
rename from src/main/java/org/mockito/internal/debugging/Java9PlusLocationImpl.java
rename to src/main/java/org/mockito/internal/debugging/LocationImpl.java
index 219835513e..f9852dfae8 100644
--- a/src/main/java/org/mockito/internal/debugging/Java9PlusLocationImpl.java
+++ b/src/main/java/org/mockito/internal/debugging/LocationImpl.java
@@ -12,28 +12,22 @@
import org.mockito.invocation.Location;
import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
+import java.lang.StackWalker.Option;
+import java.lang.StackWalker.StackFrame;
import java.util.Collections;
import java.util.List;
-import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-class Java9PlusLocationImpl implements Location, Serializable {
+class LocationImpl implements Location, Serializable {
private static final long serialVersionUID = 2954388321980069195L;
private static final String UNEXPECTED_ERROR_SUFFIX =
"\nThis is unexpected and is likely due to a change in either Java's StackWalker or Reflection APIs."
+ "\nIt's worth trying to upgrade to a newer version of Mockito, or otherwise to file a bug report.";
- private static final String STACK_WALKER = "java.lang.StackWalker";
- private static final String STACK_FRAME = STACK_WALKER + "$StackFrame";
- private static final String OPTION = STACK_WALKER + "$Option";
- private static final String SHOW_REFLECT_FRAMES = "SHOW_REFLECT_FRAMES";
-
/**
* This is an unfortunate buffer. Inside StackWalker, a buffer is created, which is resized by
* doubling. The resizing also allocates a tonne of StackFrame elements. If we traverse more than
@@ -43,12 +37,7 @@ class Java9PlusLocationImpl implements Location, Serializable {
*/
private static final int BUFFER_SIZE = 16;
- private static final Class> stackWalkerClazz = clazz(STACK_WALKER);
- private static final Class> stackFrameClazz = clazz(STACK_FRAME);
- private static final Class> optionClazz = clazz(OPTION);
-
- private static final Object stackWalker = stackWalker();
- private static final Method walk = walk();
+ private static final StackWalker STACK_WALKER = stackWalker();
private static final String PREFIX = "-> at ";
@@ -62,7 +51,7 @@ class Java9PlusLocationImpl implements Location, Serializable {
* per element). By assigning these Functions and Predicates to variables, we can
* avoid the memory allocation.
*/
- private static final Function