smallrye / jandex

Java Annotation Indexer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.