mima icon indicating copy to clipboard operation
mima copied to clipboard

Cryptic error when ScalaSig in input classfile is incomplete (since 0.9.0)

Open alexarchambault opened this issue 2 years ago • 2 comments

In coursier-interface, bumping sbt-mima to 0.9.0 or higher (including the latest 1.1.0) makes mimaReportBinaryIssues crash with an ArrayIndexOutOfBoundsException:

sbt:coursier-interface> interface/mimaReportBinaryIssues
[error] stack trace is suppressed; run last interface / mimaReportBinaryIssues for the full output
[error] (interface / mimaReportBinaryIssues) java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 8443

(full stack trace in details below)

This looks similar to https://github.com/lightbend/mima/issues/659, but seems to still be a problem.

sbt:coursier-interface> interface/mimaReportBinaryIssues
[error] stack trace is suppressed; run last interface / mimaReportBinaryIssues for the full output
[error] (interface / mimaReportBinaryIssues) java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 8443
[error] Total time: 1 s, completed 11 juil. 2022 à 10:16:50
sbt:coursier-interface> last interface / mimaReportBinaryIssues
[debug] adding packages from /Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/interface/0.0.2/interface-0.0.2.jar: coursierapi
[debug] adding packages from /Users/alexandre/projects/coursier-interface/interface/target/scala-2.13/classes: coursierapi, coursier
[debug] [old version in: Definitions(classPath = /Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/interface/0.0.2/interface-0.0.2.jar:/Users/alexandre/projects/coursier-interface/interface/target/scala-2.13/classes:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier_2.13/2.1.0-M6-28-gbad85693f/coursier_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-jvm_2.13/2.1.0-M6-28-gbad85693f/coursier-jvm_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils-coursierapi/0.3.2/windows-jni-utils-coursierapi-0.3.2.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.13/2.12.4/jsoniter-scala-core_2.13-2.12.4.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.6/scala-reflect-2.13.6.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-core_2.13/2.1.0-M6-28-gbad85693f/coursier-core_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.13/2.1.0-M6-28-gbad85693f/coursier-cache_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/alexarchambault/argonaut-shapeless_6.2_2.13/1.2.0/argonaut-shapeless_6.2_2.13-1.2.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-env_2.13/2.1.0-M6-28-gbad85693f/coursier-env_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils/0.3.3/windows-jni-utils-0.3.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/concurrent-reference-hash-map/1.1.0/concurrent-reference-hash-map-1.1.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.13/2.0.1/scala-xml_2.13-2.0.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-util_2.13/2.1.0-M6-28-gbad85693f/coursier-util_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/4.2.7/plexus-archiver-4.2.7.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/2.1.1/plexus-container-default-2.1.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.3/windows-ansi-0.0.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/argonaut/argonaut_2.13/6.2.5/argonaut_2.13-6.2.5.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.3/shapeless_2.13-2.3.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.6.0/scala-collection-compat_2.13-2.6.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.4.1/plexus-utils-3.4.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/3.2.0/plexus-io-3.2.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/iq80/snappy/snappy/0.4/snappy-0.4.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/tukaani/xz/1.9/xz-1.9.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/apache/xbean/xbean-reflect/3.7/xbean-reflect-3.7.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.18/jansi-1.18.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar:jrt:/)]
[debug] [new version in: Definitions(classPath = /Users/alexandre/projects/coursier-interface/interface/target/scala-2.13/classes:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier_2.13/2.1.0-M6-28-gbad85693f/coursier_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-jvm_2.13/2.1.0-M6-28-gbad85693f/coursier-jvm_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils-coursierapi/0.3.2/windows-jni-utils-coursierapi-0.3.2.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.13/2.12.4/jsoniter-scala-core_2.13-2.12.4.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.6/scala-reflect-2.13.6.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-core_2.13/2.1.0-M6-28-gbad85693f/coursier-core_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.13/2.1.0-M6-28-gbad85693f/coursier-cache_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/alexarchambault/argonaut-shapeless_6.2_2.13/1.2.0/argonaut-shapeless_6.2_2.13-1.2.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-env_2.13/2.1.0-M6-28-gbad85693f/coursier-env_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils/0.3.3/windows-jni-utils-0.3.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/concurrent-reference-hash-map/1.1.0/concurrent-reference-hash-map-1.1.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.13/2.0.1/scala-xml_2.13-2.0.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-util_2.13/2.1.0-M6-28-gbad85693f/coursier-util_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/4.2.7/plexus-archiver-4.2.7.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/2.1.1/plexus-container-default-2.1.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.3/windows-ansi-0.0.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/argonaut/argonaut_2.13/6.2.5/argonaut_2.13-6.2.5.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.3/shapeless_2.13-2.3.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.6.0/scala-collection-compat_2.13-2.6.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.4.1/plexus-utils-3.4.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/3.2.0/plexus-io-3.2.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/iq80/snappy/snappy/0.4/snappy-0.4.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/tukaani/xz/1.9/xz-1.9.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/apache/xbean/xbean-reflect/3.7/xbean-reflect-3.7.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.18/jansi-1.18.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar:jrt:/)]
[debug] classpath: /Users/alexandre/projects/coursier-interface/interface/target/scala-2.13/classes:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier_2.13/2.1.0-M6-28-gbad85693f/coursier_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-jvm_2.13/2.1.0-M6-28-gbad85693f/coursier-jvm_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils-coursierapi/0.3.2/windows-jni-utils-coursierapi-0.3.2.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.13/2.12.4/jsoniter-scala-core_2.13-2.12.4.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.6/scala-reflect-2.13.6.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.8/scala-library-2.13.8.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-core_2.13/2.1.0-M6-28-gbad85693f/coursier-core_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.13/2.1.0-M6-28-gbad85693f/coursier-cache_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/alexarchambault/argonaut-shapeless_6.2_2.13/1.2.0/argonaut-shapeless_6.2_2.13-1.2.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-env_2.13/2.1.0-M6-28-gbad85693f/coursier-env_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils/0.3.3/windows-jni-utils-0.3.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/concurrent-reference-hash-map/1.1.0/concurrent-reference-hash-map-1.1.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.13/2.0.1/scala-xml_2.13-2.0.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-util_2.13/2.1.0-M6-28-gbad85693f/coursier-util_2.13-2.1.0-M6-28-gbad85693f.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/4.2.7/plexus-archiver-4.2.7.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/2.1.1/plexus-container-default-2.1.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.3/windows-ansi-0.0.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/argonaut/argonaut_2.13/6.2.5/argonaut_2.13-6.2.5.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.3/shapeless_2.13-2.3.3.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.6.0/scala-collection-compat_2.13-2.6.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.4.1/plexus-utils-3.4.1.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/3.2.0/plexus-io-3.2.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/iq80/snappy/snappy/0.4/snappy-0.4.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/tukaani/xz/1.9/xz-1.9.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/apache/xbean/xbean-reflect/3.7/xbean-reflect-3.7.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.18/jansi-1.18.jar:/Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar:jrt:/
[debug] traversing package 
[debug] traversing package coursierapi
[debug] analyzing class Cache
[debug] analyzing class Credentials
[debug] analyzing class Dependency
[debug] analyzing class Fetch
[debug] analyzing class IvyRepository
[debug] analyzing class Logger
[debug] analyzing class MavenRepository
[debug] analyzing class Module
[debug] analyzing class Repository
[debug] analyzing class ScalaVersion
[debug] analyzing class SimpleLogger
[debug] traversing package coursierapi.error
[debug] analyzing class CoursierError
[debug] analyzing class DownloadingArtifactsError
[debug] analyzing class FetchError
[debug] analyzing class MultipleResolutionError
[debug] analyzing class ResolutionError
[debug] analyzing class SimpleResolutionError
[debug] traversing package coursierapi.shaded
[debug] traversing package coursierapi.shaded.coursier
[error] java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 8443
[error] 	at com.typesafe.tools.mima.core.BytesReader.getChar(BufferReader.scala:13)
[error] 	at com.typesafe.tools.mima.core.BufferReader.nextChar(BufferReader.scala:36)
[error] 	at com.typesafe.tools.mima.core.ClassfileParser.parsePickle(ClassfileParser.scala:132)
[error] 	at com.typesafe.tools.mima.core.ClassfileParser.$anonfun$parseClassAttributes$2(ClassfileParser.scala:64)
[error] 	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] 	at com.typesafe.tools.mima.core.BufferReader.atIndex(BufferReader.scala:47)
[error] 	at com.typesafe.tools.mima.core.ClassfileParser.parseClassAttributes(ClassfileParser.scala:64)
[error] 	at com.typesafe.tools.mima.core.ClassfileParser.com$typesafe$tools$mima$core$ClassfileParser$$parseClass(ClassfileParser.scala:20)
[error] 	at com.typesafe.tools.mima.core.ClassfileParser$.parseInPlace(ClassfileParser.scala:171)
[error] 	at com.typesafe.tools.mima.core.ConcreteClassInfo.afterLoading(ClassInfo.scala:44)
[error] 	at com.typesafe.tools.mima.core.ClassInfo.flags(ClassInfo.scala:77)
[error] 	at com.typesafe.tools.mima.core.InfoLike.isPublic(InfoLike.scala:14)
[error] 	at com.typesafe.tools.mima.core.PackageInfo.isAccessible$1(PackageInfo.scala:81)
[error] 	at com.typesafe.tools.mima.core.PackageInfo.$anonfun$accessibleClasses$1(PackageInfo.scala:75)
[error] 	at com.typesafe.tools.mima.core.PackageInfo.$anonfun$accessibleClasses$1$adapted(PackageInfo.scala:75)
[error] 	at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:515)
[error] 	at scala.collection.Iterator.foreach(Iterator.scala:943)
[error] 	at scala.collection.Iterator.foreach$(Iterator.scala:943)
[error] 	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
[error] 	at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:62)
[error] 	at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:53)
[error] 	at scala.collection.immutable.Set$SetBuilderImpl.$plus$plus$eq(Set.scala:381)
[error] 	at scala.collection.immutable.Set$SetBuilderImpl.$plus$plus$eq(Set.scala:329)
[error] 	at scala.collection.TraversableOnce.to(TraversableOnce.scala:366)
[error] 	at scala.collection.TraversableOnce.to$(TraversableOnce.scala:364)
[error] 	at scala.collection.AbstractIterator.to(Iterator.scala:1431)
[error] 	at scala.collection.TraversableOnce.toSet(TraversableOnce.scala:360)
[error] 	at scala.collection.TraversableOnce.toSet$(TraversableOnce.scala:360)
[error] 	at scala.collection.AbstractIterator.toSet(Iterator.scala:1431)
[error] 	at com.typesafe.tools.mima.core.PackageInfo.loop$1(PackageInfo.scala:75)
[error] 	at com.typesafe.tools.mima.core.PackageInfo.accessibleClasses$lzycompute(PackageInfo.scala:88)
[error] 	at com.typesafe.tools.mima.core.PackageInfo.accessibleClasses(PackageInfo.scala:73)
[error] 	at com.typesafe.tools.mima.lib.analyze.Analyzer$.analyze(Analyzer.scala:12)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.traversePackages(MiMaLib.scala:25)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.$anonfun$traversePackages$2(MiMaLib.scala:27)
[error] 	at scala.collection.immutable.Stream.flatMap(Stream.scala:489)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.traversePackages(MiMaLib.scala:25)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.$anonfun$traversePackages$2(MiMaLib.scala:27)
[error] 	at scala.collection.immutable.Stream.flatMap(Stream.scala:493)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.traversePackages(MiMaLib.scala:25)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.$anonfun$traversePackages$2(MiMaLib.scala:27)
[error] 	at scala.collection.immutable.Stream.flatMap(Stream.scala:489)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.traversePackages(MiMaLib.scala:25)
[error] 	at com.typesafe.tools.mima.lib.MiMaLib.collectProblems(MiMaLib.scala:38)
[error] 	at com.typesafe.tools.mima.plugin.SbtMima$.checkBC$1(SbtMima.scala:24)
[error] 	at com.typesafe.tools.mima.plugin.SbtMima$.runMima(SbtMima.scala:27)
[error] 	at com.typesafe.tools.mima.plugin.MimaPlugin$.$anonfun$binaryIssuesFinder$5(MimaPlugin.scala:99)
[error] 	at scala.collection.Iterator$$anon$10.next(Iterator.scala:461)
[error] 	at scala.collection.Iterator.foreach(Iterator.scala:943)
[error] 	at scala.collection.Iterator.foreach$(Iterator.scala:943)
[error] 	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
[error] 	at com.typesafe.tools.mima.plugin.MimaPlugin$.$anonfun$projectSettings$1(MimaPlugin.scala:26)
[error] 	at com.typesafe.tools.mima.plugin.MimaPlugin$.$anonfun$projectSettings$1$adapted(MimaPlugin.scala:25)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] 	at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] 	at sbt.Execute.work(Execute.scala:291)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] 	at java.base/java.lang.Thread.run(Thread.java:834)
[error] (interface / mimaReportBinaryIssues) java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 8443

alexarchambault avatar Jul 11 '22 08:07 alexarchambault

(Dale's attention is largely elsewhere these days, so I'm not sure if a fix is likely unless one is submitted.)

SethTisue avatar Jul 19 '22 00:07 SethTisue

@alexarchambault I looked into this

the first thing I determined is that it fails even if mimaPreviousArtifacts is restricted to only have the 1.0.6 JAR. Probably any version would do, but let's use the most recent — I wanted to rule out that it was just something peculiar about one of the very old JARs.

And, I discovered by adding a little more debugging output to MiMa, the class it's choking on is coursierapi.shaded.coursier.PlatformResolve (probably it chokes on others as well, but that's one)

The .shaded. interested me and made me wonder if the shading was somehow the culprit. And indeed, I think the problem here is that classifies in interface-1.0.6.jar are malformed. Perhaps it has to do with the ProGuard config used to generate it.

The malformedness is also apparent without involving MiMa at all. If I run /usr/local/scala/scala-2.13.8/bin/scala -classpath ~/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/interface/1.0.6/interface-1.0.6.jar, then:

Welcome to Scala 2.13.8 (OpenJDK 64-Bit Server VM, Java 17.0.4.1).
Type in expressions for evaluation. Or try :help.

scala> classOf[coursierapi.shaded.coursier.PlatformResolve]
java.lang.AssertionError: assertion failed: 
  No RuntimeVisibleAnnotations in classfile with ScalaSignature attribute: package object coursier
     while compiling: <console>
        during phase: globalPhase=typer, enteringPhase=parser
     library version: version 2.13.8
    compiler version: version 2.13.8
  reconstructed args: -deprecation -feature -Wconf:cat=feature:w -Wconf:cat=deprecation:w -Wconf:cat=deprecation:ws -Wconf:cat=feature:ws -Wconf:cat=optimizer:ws -classpath /Users/tisue/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/interface/1.0.6/interface-1.0.6.jar

  last tree to typer: Ident(coursierapi)
       tree position: line 1 of <console>
            tree tpe: coursierapi.type
              symbol: final package coursierapi
   symbol definition: final package coursierapi (a ModuleSymbol)
      symbol package: <none>
       symbol owners: package coursierapi
           call site: class $iw in package $line3

== Source file context for tree position ==

     1 classOf[coursierapi.shaded.coursier.PlatformResolve]
     2 
	at scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:171)
	at scala.tools.nsc.symtab.classfile.ClassfileParser.unpickleOrParseInnerClasses(ClassfileParser.scala:1200)
...

and so on.

So the classfile parser in Scala 2 is giving a better error message ("No RuntimeVisibleAnnotations in classfile with ScalaSignature attribute") than MiMa does, and sure, that's a deficiency in MiMa. But it appears to me that the root cause of your troubles is that ProGuard is emitting classfiles that don't have complete Scala 2 pickles in them.

Perhaps it would help if you added -keepattributes RuntimeVisibleAnnotations to your ProGuard config, something like that?

SethTisue avatar Sep 16 '22 02:09 SethTisue