2016-07-27 1 views
2

Lors de la modification de la classe com.google.common.collect.ImmutableMultimap$Values à partir de Google Guava, j'obtiens une exception IllegalArgumentException de ByteBuddy.ByteBuddy: java.lang.IllegalArgumentException: Impossible de joindre une variable non définie: V

La classe interne est une sous-classe de com.google.common.collect.ImmutableCollection dont la méthode ImmutableList<E> createAsList() provoque le problème.

Stacktrace:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot attach undefined variable: V 
at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor$ForAttachment.onTypeVariable(TypeDescription.java:1973) 
at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor$ForAttachment.onTypeVariable(TypeDescription.java:1896) 
at net.bytebuddy.description.type.TypeDescription$Generic$OfTypeVariable$Symbolic.accept(TypeDescription.java:5551) 
at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor.onParameterizedType(TypeDescription.java:1857) 
at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor$ForAttachment.onParameterizedType(TypeDescription.java:1896) 
at net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType.accept(TypeDescription.java:5017) 
at net.bytebuddy.dynamic.Transformer$ForMethod$TransformedMethod.getReturnType(Transformer.java:377) 
at net.bytebuddy.description.method.MethodDescription$AbstractBase.asTypeToken(MethodDescription.java:685) 
at net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Prepared$Entry.resolveBridgeTypes(MethodRegistry.java:916) 
at net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Prepared.compile(MethodRegistry.java:778) 
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$RedefinitionClassVisitor.visit(TypeWriter.java:3281) 
at net.bytebuddy.jar.asm.ClassReader.accept(Unknown Source) 
at net.bytebuddy.jar.asm.ClassReader.accept(Unknown Source) 
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:3018) 
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:1617) 
at net.bytebuddy.dynamic.scaffold.inline.RebaseDynamicTypeBuilder.make(RebaseDynamicTypeBuilder.java:198) 
at net.bytebuddy.dynamic.scaffold.inline.AbstractInliningDynamicTypeBuilder.make(AbstractInliningDynamicTypeBuilder.java:90) 
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:2566) 
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:2668) 
at cl.InnerClassLoader.loadClass(InnerClassLoader.java:187) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at test.Stuff.<init>(Stuff.java:15) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
at java.lang.Class.newInstance(Class.java:438) 
at test.Main.main(Main.java:15) 

J'ai créé un exemple déclenchement de la question ici: https://github.com/erikhakansson/bytebuddytest Le test a été modifié à partir d'un test plus tôt, je devais donc il pourrait y avoir des ordures là-dedans. Pour tester, exécutez simplement mvn clean install, puis exécutez le pot résultant. Très probablement, je fais quelque chose de mal, mais je ne peux pas comprendre quoi, alors s'il vous plaît aider! :)

Répondre

2

Vous avez trouvé un bug dans Byte Buddy. J'ai résolu ce problème (anciennement incorrect dans la version 1.6.14) dans Byte Buddy 1.4.17.

+0

Ah, je vois. Tout ce que je peux faire en attendant pour contourner le problème? – erikh

+0

La nouvelle version a été publié hier soir, donc je recommanderais de mettre à jour. –

+0

Malheureusement, j'ai la même erreur avec la nouvelle version. Serait-ce un autre problème? J'ai mis à jour le repo lié pour utiliser la nouvelle version. – erikh