IllegalStateException: Missing in reference table while indexing guava
MikeEdgar opened this issue · comments
The error varies by version, but the stack trace is the same -
$ java -jar ~/.m2/repository/io/smallrye/jandex/3.0.0/jandex-3.0.0.jar ~/.m2/repository/com/google/guava/guava/29.0-jre/guava-29.0-jre.jar
java.lang.IllegalStateException: Missing in reference table: @Nullable K
at org.jboss.jandex.IndexWriterV2$ReferenceTable.getReferenceEntry(IndexWriterV2.java:128)
at org.jboss.jandex.IndexWriterV2$ReferenceTable.positionOf(IndexWriterV2.java:134)
at org.jboss.jandex.IndexWriterV2.positionOf(IndexWriterV2.java:520)
at org.jboss.jandex.IndexWriterV2.writeTypeTargetFields(IndexWriterV2.java:429)
at org.jboss.jandex.IndexWriterV2.writeTypeTarget(IndexWriterV2.java:403)
at org.jboss.jandex.IndexWriterV2.writeAnnotationTarget(IndexWriterV2.java:380)
at org.jboss.jandex.IndexWriterV2.writeAnnotation(IndexWriterV2.java:361)
at org.jboss.jandex.IndexWriterV2.writeReferenceOrFull(IndexWriterV2.java:818)
at org.jboss.jandex.IndexWriterV2.writeAnnotations(IndexWriterV2.java:782)
at org.jboss.jandex.IndexWriterV2.writeMethodEntry(IndexWriterV2.java:355)
at org.jboss.jandex.IndexWriterV2.writeMethodTable(IndexWriterV2.java:292)
at org.jboss.jandex.IndexWriterV2.write(IndexWriterV2.java:214)
at org.jboss.jandex.IndexWriter.write(IndexWriter.java:102)
at org.jboss.jandex.IndexWriter.write(IndexWriter.java:66)
at org.jboss.jandex.JarIndexer.createJarIndex(JarIndexer.java:197)
at org.jboss.jandex.JarIndexer.createJarIndex(JarIndexer.java:88)
at org.jboss.jandex.Main.getIndex(Main.java:88)
at org.jboss.jandex.Main.execute(Main.java:68)
at org.jboss.jandex.Main.main(Main.java:53)
The android
variant of guava does not seem to be affected:
$ java -jar ~/.m2/repository/io/smallrye/jandex/3.0.0/jandex-3.0.0.jar ~/.m2/repository/com/google/guava/guava/29.0-android/guava-29.0-android.jar
Wrote /home/michael/.m2/repository/com/google/guava/guava/29.0-android/guava-29.0-android-jar.idx in 0.5280 seconds (1899 classes, 28 annotations, 4571 instances, 17761 class usages, 502380 bytes)
Ah, I thought I did pretty comprehensive testing, but apparently I missed some cases. Let me take a look, thanks for the report!
Okay, the reproducer took me a while to minimize, it apparently requires a deeper inheritance hierarchy. This class and all its nested classes, when indexed, reproduce the problem:
class Reproducer<T> {
class Foo {
void foo(@MyAnnotation("same") T value) {
}
}
class Bar extends Foo {
void bar(@MyAnnotation("same") T value) {
}
}
class Baz extends Bar {
void baz(@MyAnnotation("same") T value) {
}
}
}
(Where @MyAnnotation
has a @Target
that includes TYPE_USE
.)
This should be fixed in main
now. Feel free to do some testing with a snapshot, because I need to fix one more issue before releasing 3.0.1.
I'll take a look, thank you for the quick fix 👍
edit: Looks good with a smoke test of the guava Jar. The andoid jar index even shrank.
3.0.0
:
guava-29.0-android-jar.idx in 0.5280 seconds (1899 classes, 28 annotations, 4571 instances, 17761 class usages, 502380 bytes)
3.0.1-SNAPSHOT
:
guava-29.0-android-jar.idx in 0.5560 seconds (1899 classes, 28 annotations, 4571 instances, 17761 class usages, 499812 bytes)
That's funny. I spent a few minutes searching for the difference and found this document: https://docs.google.com/document/d/1NYGbfz56C0Oh4IGymXjeQUVK4FcRiqDbpc4vGLnDMrY/edit Apparently the -android
flavor of Guava omits some methods, which would explain the index size difference.
FYI I've released 3.0.1 earlier today.