Skip to content

Commit 46a561c

Browse files
committed
Decrease usage of deprecated elements
1 parent 3c4beb0 commit 46a561c

File tree

10 files changed

+26
-60
lines changed

10 files changed

+26
-60
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ The library has independent developers, release cycle and versioning from core m
4141
If you're in Scala 2.12 you'll probably want to add the compiler flag `-Ypartial-unification`, if you don't you risk some compile errors when trying to stub complex types using the idiomatic syntax
4242

4343
## Notes for 2.0.0
44-
We dropped support for Scala 2.11 and Java 8, as Mockito 5 dropped support for Java 8.
44+
We dropped support for Scala 2.11 and Java 8, as Mockito 5 dropped support for Java 8.
45+
Java 11 is now the minimum supported version.
4546

4647
## Notes for 1.13.6
4748

build.sbt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import scala.io.Source
21
import scala.language.postfixOps
3-
import sbt.io.Using
42

53
val currentScalaVersion = "2.13.16"
64

@@ -48,7 +46,8 @@ lazy val commonSettings =
4846
case _ =>
4947
Seq("org.scala-lang.modules" %% "scala-parallel-collections" % "1.2.0")
5048
}
51-
}
49+
},
50+
libraryDependencies += "org.scala-lang.modules" %% "scala-collection-compat" % "2.13.0"
5251
)
5352

5453
lazy val publishSettings = Seq(
@@ -154,8 +153,6 @@ lazy val core = (project in file("core"))
154153
name := "mockito-scala",
155154
libraryDependencies ++= Dependencies.commonLibraries,
156155
libraryDependencies ++= Dependencies.scalaReflection.value,
157-
// TODO remove when we remove the deprecated classes in org.mockito.integrations.Dependencies.scalatest
158-
libraryDependencies += Dependencies.scalatest % "provided",
159156
// include the macro classes and resources in the main jar
160157
Compile / packageBin / mappings ++= (macroSub / Compile / packageBin / mappings).value,
161158
// include the macro sources in the main source jar

common/src/main/scala/org/mockito/MockitoAPI.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ import org.mockito.internal.util.reflection.LenientCopyTool
2424
import org.mockito.internal.{ ValueClassExtractor, ValueClassWrapper }
2525
import org.mockito.invocation.{ Invocation, InvocationContainer, InvocationOnMock, MockHandler }
2626
import org.mockito.mock.MockCreationSettings
27+
import org.mockito.quality.Strictness
2728
import org.mockito.stubbing._
2829
import org.mockito.verification.{ VerificationAfterDelay, VerificationMode, VerificationWithTimeout }
2930
import org.scalactic.{ Equality, Prettifier }
30-
import scala.collection.JavaConverters._
31+
32+
import scala.jdk.CollectionConverters._
3133
import scala.reflect.ClassTag
3234
import scala.reflect.runtime.universe.WeakTypeTag
3335

@@ -543,7 +545,7 @@ private[mockito] trait MockitoEnhancer extends MockCreator {
543545

544546
def spy[T <: AnyRef: ClassTag: WeakTypeTag](realObj: T, lenient: Boolean = false)(implicit $pt: Prettifier): T = {
545547
def mockSettings: MockSettings = Mockito.withSettings().defaultAnswer(CALLS_REAL_METHODS).spiedInstance(realObj)
546-
val settings = if (lenient) mockSettings.lenient() else mockSettings
548+
val settings = if (lenient) mockSettings.strictness(Strictness.LENIENT) else mockSettings
547549
mock[T](settings)
548550
}
549551

@@ -645,7 +647,7 @@ object LeniencySettings {
645647
}
646648

647649
val lenientStubs: LeniencySettings = new LeniencySettings {
648-
override def apply(settings: MockSettings): MockSettings = settings.lenient()
650+
override def apply(settings: MockSettings): MockSettings = settings.strictness(Strictness.LENIENT)
649651
}
650652
}
651653

common/src/main/scala/org/mockito/ReflectionUtils.scala

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,13 @@ import ru.vyarus.java.generics.resolver.GenericsResolver
99

1010
import scala.reflect.ClassTag
1111
import scala.reflect.internal.Symbols
12-
import scala.util.{ Failure, Success, Try => uTry }
12+
import scala.util.{ Try => uTry }
1313
import scala.util.control.NonFatal
1414

1515
object ReflectionUtils {
1616
import scala.reflect.runtime.{ universe => ru }
1717
import ru._
1818

19-
private val JavaVersion: Int =
20-
System.getProperty("java.version").split("\\.") match {
21-
case Array("1", v, _*) => v.toInt // Java 8 style: 1.8.x
22-
case Array(v, _*) => v.toInt // Java 9+ style: 11.x, 17.x, etc.
23-
}
24-
2519
implicit def symbolToMethodSymbol(sym: Symbol): Symbols#MethodSymbol = sym.asInstanceOf[Symbols#MethodSymbol]
2620

2721
private val mirror = runtimeMirror(getClass.getClassLoader)
@@ -120,39 +114,6 @@ object ReflectionUtils {
120114
}
121115

122116
def setFinalStatic(field: Field, newValue: AnyRef): Unit =
123-
if (JavaVersion < 17)
124-
setFinalStatic17Minus(field, newValue)
125-
else
126-
setFinalStatic17Plus(field, newValue)
127-
128-
private def setFinalStatic17Minus(field: Field, newValue: AnyRef): Unit = {
129-
val clazz = classOf[java.lang.Class[_]]
130-
field.setAccessible(true)
131-
val modifiersField: Field = uTry(clazz.getDeclaredField("modifiers")) match {
132-
case Success(modifiers) => modifiers
133-
case Failure(e) =>
134-
uTry {
135-
val getDeclaredFields0 = clazz.getDeclaredMethod("getDeclaredFields0", classOf[Boolean])
136-
val accessibleBeforeSet: Boolean = getDeclaredFields0.isAccessible
137-
getDeclaredFields0.setAccessible(true)
138-
val declaredFields: Array[Field] = getDeclaredFields0
139-
.invoke(classOf[Field], java.lang.Boolean.FALSE)
140-
.asInstanceOf[Array[Field]]
141-
getDeclaredFields0.setAccessible(accessibleBeforeSet)
142-
declaredFields.find("modifiers" == _.getName).get
143-
} match {
144-
case Success(modifiers) => modifiers
145-
case Failure(ex) =>
146-
e.addSuppressed(ex)
147-
throw e
148-
}
149-
}
150-
modifiersField.setAccessible(true)
151-
modifiersField.setInt(field, field.getModifiers & ~Modifier.FINAL)
152-
field.set(null, newValue)
153-
}
154-
155-
private def setFinalStatic17Plus(field: Field, newValue: AnyRef): Unit =
156117
try {
157118
// Try to get Unsafe instance (works with both sun.misc.Unsafe and jdk.internal.misc.Unsafe)
158119
val unsafeClass: Class[_] =
@@ -171,6 +132,9 @@ object ReflectionUtils {
171132
val staticFieldOffsetMethod = unsafeClass.getMethod("staticFieldOffset", classOf[Field])
172133
val putObjectMethod = unsafeClass.getMethod("putObject", classOf[Object], classOf[Long], classOf[Object])
173134

135+
// Make the field accessible
136+
field.setAccessible(true)
137+
174138
// Get base and offset for the field
175139
val base: Object = staticFieldBaseMethod.invoke(unsafe, field)
176140
val offset: Long = staticFieldOffsetMethod.invoke(unsafe, field).asInstanceOf[Long]

common/src/main/scala/org/mockito/internal/handler/ScalaMockHandler.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import org.mockito.mock.MockCreationSettings
1414
import org.scalactic.Prettifier
1515
import org.scalactic.TripleEquals._
1616

17-
import scala.collection.JavaConverters._
17+
import scala.collection.compat._
18+
import scala.jdk.CollectionConverters._
1819

1920
class ScalaMockHandler[T](mockSettings: MockCreationSettings[T], methodsToProcess: Seq[(Method, Set[Int])])(implicit $pt: Prettifier) extends MockHandlerImpl[T](mockSettings) {
2021
override def handle(invocation: Invocation): AnyRef =
@@ -43,17 +44,17 @@ class ScalaMockHandler[T](mockSettings: MockCreationSettings[T], methodsToProces
4344
.collectFirst {
4445
case (mtd, indices) if method === mtd =>
4546
val argumentMatcherStorage = mockingProgress().getArgumentMatcherStorage
46-
val matchers = argumentMatcherStorage.pullLocalizedMatchers().asScala.toIterator
47+
val matchers = argumentMatcherStorage.pullLocalizedMatchers().asScala.iterator
4748
val matchersWereUsed = matchers.nonEmpty
4849
def reportMatcher(): Unit = if (matchers.nonEmpty) argumentMatcherStorage.reportMatcher(matchers.next().getMatcher)
4950
def reportMatchers(varargs: Iterable[_]): Unit =
5051
if (matchersWereUsed && varargs.nonEmpty) {
5152
def reportAsEqTo(): Unit = varargs.map(EqTo(_)).foreach(argumentMatcherStorage.reportMatcher(_))
5253
val matcher = matchers.next().getMatcher
5354
matcher match {
54-
case EqTo(value: Array[_]) if varargs.sameElements(value) => reportAsEqTo()
55-
case EqTo(value) if varargs == value => reportAsEqTo()
56-
case other =>
55+
case EqTo(value: Array[_]) if varargs.iterator.sameElements(value.iterator) => reportAsEqTo()
56+
case EqTo(value) if varargs == value => reportAsEqTo()
57+
case other =>
5758
argumentMatcherStorage.reportMatcher(other)
5859
varargs.drop(1).foreach(_ => reportMatcher())
5960
}

common/src/main/scala/org/mockito/internal/invocation/ScalaInvocation.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import org.mockito.invocation.{ Invocation, Location, StubInfo }
1313
import org.mockito.matchers.EqTo
1414
import org.scalactic.Prettifier
1515

16-
import scala.collection.JavaConverters._
16+
import scala.jdk.CollectionConverters._
1717

1818
class ScalaInvocation(
1919
val mockRef: MockReference[AnyRef],

common/src/main/scala/org/mockito/stubbing/ReturnsSmartNulls.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.mockito.internal.exceptions.Reporter.smartNullPointerException
77
import org.mockito.internal.stubbing.defaultanswers.ReturnsMoreEmptyValues
88
import org.mockito.internal.util.ObjectMethodsGuru.isToStringMethod
99
import org.mockito.invocation.{ InvocationOnMock, Location }
10+
import org.mockito.quality.Strictness
1011

1112
object ReturnsSmartNulls extends DefaultAnswer {
1213
val delegate = new ReturnsMoreEmptyValues
@@ -16,7 +17,7 @@ object ReturnsSmartNulls extends DefaultAnswer {
1617
val returnType = invocation.returnType
1718

1819
if (!returnType.isPrimitive && !isFinal(returnType.getModifiers) && classOf[Object] != returnType)
19-
Some(mock(returnType, withSettings.defaultAnswer(ThrowsSmartNullPointer(invocation)).lenient()))
20+
Some(mock(returnType, withSettings.defaultAnswer(ThrowsSmartNullPointer(invocation)).strictness(Strictness.LENIENT)))
2021
else
2122
None
2223
}

core/src/main/scala/org/mockito/MockitoScalaSession.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.mockito.session.MockitoSessionLogger
1111
import org.scalactic.Equality
1212
import org.scalactic.TripleEquals._
1313

14-
import scala.collection.JavaConverters._
14+
import scala.jdk.CollectionConverters._
1515
import scala.collection.mutable
1616

1717
class MockitoScalaSession(name: String, strictness: Strictness, logger: MockitoSessionLogger) {

macro/src/main/scala/org/mockito/captor/Captor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.mockito.{ clazz, ArgumentCaptor }
99
import org.scalactic.Equality
1010
import org.scalactic.TripleEquals._
1111

12-
import scala.collection.JavaConverters._
12+
import scala.jdk.CollectionConverters._
1313
import scala.reflect.ClassTag
1414
import scala.reflect.macros.blackbox
1515
import scala.util.{ Failure, Try }

scalatest/src/main/scala/org/mockito/scalatest/ResetMocksAfterEachTestBase.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import org.mockito.stubbing.DefaultAnswer
66
import org.mockito.{ MockCreator, MockSettings }
77
import org.scalactic.Prettifier
88

9-
import scala.collection.JavaConverters._
9+
import scala.jdk.CollectionConverters._
1010
import scala.reflect.ClassTag
1111
import scala.reflect.runtime.universe.WeakTypeTag
1212

1313
/**
14-
* It automatically resets each mock after a each test is run, useful when we need to pass the mocks to some framework once at the beginning of the test suite
14+
* It automatically resets each mock after each test is run, useful when we need to pass the mocks to some framework once at the beginning of the test suite
1515
*
1616
* Just mix-in after your favourite suite, i.e. {{{class MyTest extends PlaySpec with MockitoSugar with ResetMocksAfterEachTest}}}
1717
*/

0 commit comments

Comments
 (0)