Skip to content

Commit 198c315

Browse files
authored
track non-scala classes (to avoid introspecting them again) (#578)
1 parent c372ad0 commit 198c315

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

build.sbt

+3
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ git.remoteRepo := "[email protected]:FasterXML/jackson-module-scala.git"
138138

139139
mimaBinaryIssueFilters ++= Seq(
140140
ProblemFilters.exclude[ReversedMissingMethodProblem]("com.fasterxml.jackson.module.scala.util.ClassW.isScalaObject"),
141+
ProblemFilters.exclude[ReversedMissingMethodProblem]("com.fasterxml.jackson.module.scala.util.ClassW.extendsScalaClass"),
141142
ProblemFilters.exclude[IncompatibleResultTypeProblem]("com.fasterxml.jackson.module.scala.deser.UntypedObjectDeserializerResolver.findBeanDeserializer"),
142143
ProblemFilters.exclude[MissingClassProblem]("com.fasterxml.jackson.module.scala.deser.UntypedObjectDeserializer*"),
143144
ProblemFilters.exclude[DirectMissingMethodProblem]("com.fasterxml.jackson.module.scala.introspect.BeanIntrospector.apply"),
@@ -152,6 +153,8 @@ mimaBinaryIssueFilters ++= Seq(
152153
ProblemFilters.exclude[ReversedMissingMethodProblem]("com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospectorModule.registerReferencedValueType"),
153154
ProblemFilters.exclude[ReversedMissingMethodProblem]("com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospectorModule.getRegisteredReferencedValueType"),
154155
ProblemFilters.exclude[DirectMissingMethodProblem]("com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospector#ScalaValueInstantiator.this"),
156+
ProblemFilters.exclude[ReversedMissingMethodProblem]("com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospectorModule._scalaTypeCache"),
157+
ProblemFilters.exclude[ReversedMissingMethodProblem]("com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospectorModule._scalaTypeCache_="),
155158
ProblemFilters.exclude[DirectMissingMethodProblem]("com.fasterxml.jackson.module.scala.deser.NumberDeserializers.BigIntClass"),
156159
ProblemFilters.exclude[DirectMissingMethodProblem]("com.fasterxml.jackson.module.scala.deser.NumberDeserializers.BigDecimalClass"),
157160
ProblemFilters.exclude[IncompatibleResultTypeProblem]("com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer.deserialize"),

project/plugins.sbt

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
99

1010
addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.6.3")
1111

12-
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.8.1")
12+
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.0")
1313

1414
addSbtPlugin("com.codecommit" % "sbt-github-actions" % "0.14.2")
1515

src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala

+15-2
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,18 @@ object ScalaAnnotationIntrospector extends NopAnnotationIntrospector with ValueI
168168
}
169169

170170
private def _descriptorFor(clz: Class[_]): Option[BeanDescriptor] = {
171-
if (clz.extendsScalaClass(true) || clz.hasSignature) {
172-
val key = new ClassKey(clz)
171+
val key = new ClassKey(clz)
172+
val isScala = {
173+
Option(ScalaAnnotationIntrospectorModule._scalaTypeCache.get(key)) match {
174+
case Some(result) => result
175+
case _ => {
176+
val result = clz.extendsScalaClass(true) || clz.hasSignature
177+
ScalaAnnotationIntrospectorModule._scalaTypeCache.put(key, result)
178+
result
179+
}
180+
}
181+
}
182+
if (isScala) {
173183
Option(ScalaAnnotationIntrospectorModule._descriptorCache.get(key)) match {
174184
case Some(result) => Some(result)
175185
case _ => {
@@ -230,6 +240,9 @@ trait ScalaAnnotationIntrospectorModule extends JacksonModule {
230240
private[introspect] var _descriptorCache: LookupCache[ClassKey, BeanDescriptor] =
231241
new LRUMap[ClassKey, BeanDescriptor](16, 100)
232242

243+
private[introspect] var _scalaTypeCache: LookupCache[ClassKey, Boolean] =
244+
new LRUMap[ClassKey, Boolean](16, 100)
245+
233246
private[introspect] val overrideMap = MutableMap[Class[_], ClassOverrides]()
234247

235248
/**

0 commit comments

Comments
 (0)