Source code analysis: calls to wrapper class constructors

Dan Smith daniel.smith at oracle.com
Sat Oct 24 01:20:36 UTC 2020


One more data-gathering exercise: I took a closer look at some popular Maven projects to see how they've evolved in their use of wrapper constructors.

-----

junit:junit
< 4.12 (<2014): many problems in junit.framework.Assert & org.junit.Assert
4.12-4.13 (2014-2020): a few problems in junit.framework.Assert
4.13.1 (2020): fixed

org.ow2.asm:asm
< 6.0 (<2017): many problems in org.objectweb.asm.ClassReader & Opcodes
6.0 (2017): problem in org.objectweb.asm.Opcodes
6.1+ (2018+): no problems

commons-lang:commons-lang & org.apache.commons:commons-lang3
< 3.0 (<2011): many problems
3.0 (2011): many problems
3.1+ (2011+): fixed

com.fasterxml.jackson.core:jackson-databind
< 2.9.0 (<2017): one call in com.fasterxml.jackson.databind.deser.std.NumberDeserializers
2.9.0+ (2017+): fixed

javax.xml.bind:jaxb-api
1.0 (2006): two problems
2.0+ (2006+): fixed

Log4j (log4j:log4j & org.apache.logging.log4j:log4j-core)
< 2.0 (<2014): multiple problems
2.0+ (2014+): no issues

org.mockito:mockito-core
< 2.1.0 (<2016): many problems, including in repackaged ASM
2.1.0+ (2016+): fixed

org.scala-lang:scala-library
< 2.8.0 (<2010): problems in scala.Console$, scala.Predef$, scala.mobile.Code, scala.runtime.BoxesUtility
2.8.0-2.9.3 (2010-2013): one issue, scala.actors.threadpool.locks.ReentrantReadWriteLock
2.10.0+ (2012+): fixed

org.hibernate:hibernate-core
< 4.0 (<2011): many, many, problems
4.0.0-5.4.22 (2011-2020): a few problems
6.0.0+ (not yet released): fixed

ch.qos.logback:logback-classic
< 1.0.7 (<2012): lots of problems
1.0.7+ (2012): fixed

org.clojure
< 1.10.0 (<2018): repackages ASM, a few other problems
1.1.0.0+ (2018+): fixed

com.google.code.gson
< 1.4 (<2010): problems in com.google.gson.DefaultInstanceCreators & JsonParser
1.4+ (2010+): fixed

org.jetbrains.kotlin:kotlin-stdlib
< 1.3.0 (<2018): no problems
1.3.0+ (2018+): new problems in kotlin.coroutines.jvm.internal.Boxing

No problems:
org.junit.jupiter:junit-jupiter-api (earliest release 2017)
com.google.guava:guava (earliest release 2011)
org.apache.commons.commons-collections4 (earliest release 2013)
com.fasterxml.jackson.core:jackson-core (earliest release 2012)
org.slf4j:slf4j-api (earliest release 2006)
org.slf4j:slf4j-log4j12 (earliest release 2006)
org.apache.logging.log4j:log4j-core (earliest release 2014)
commons-io:commons-io (earliest release 2005)
javax.servlet:javax.servlet-api (earliest release 2011)
org.apache.httpcomponents:httpclient (earliest release 2009)

-----

It does seem like the deprecation warnings introduced in 9 are working—lots of projects have responded by changing their code.

A few cases worth special attention:

- JUnit 4 was only very recently fixed (and it's in maintenance mode, must clients use 4.11 or 4.12, not 4.13)

- Hibernate still has problems until its coming 6.0 release

- Kotlin added (!) some constructor calls in 2018, and they're still there

- Clojure and ASM were fixed pretty recently

Still, it's a positive sign that only one of these projects is making wrapper constructor calls in its latest sources.



More information about the valhalla-spec-observers mailing list