Annotation with type, type lost to a string
GoogleCodeExporter opened this issue · comments
Take this class that is using jackson databinding :
package com.example.android.apis.annotations;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonSubTypes(
{
@com.fasterxml.jackson.annotation.JsonSubTypes.Type(name="subObject", value=MrSubObject.class)
}
)
@JsonTypeInfo(defaultImpl=MrObject.class, include=JsonTypeInfo.As.PROPERTY,
property="type", use=JsonTypeInfo.Id.NAME, visible=true)
public class MrObject
{
}
Compile it and dex it (like any android build), running dex2jar will produce a
class where type information has been replaced by string :
package com.example.android.apis.annotations;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
@JsonSubTypes({@com.fasterxml.jackson.annotation.JsonSubTypes.Type(name="subObje
ct", value="Lcom/example/android/apis/annotations/MrSubObject;")})
@JsonTypeInfo(defaultImpl="Lcom/example/android/apis/annotations/MrObject;",
include=JsonTypeInfo.As.PROPERTY, property="type", use=JsonTypeInfo.Id.NAME,
visible=true)
public class MrObject
{
}
At android runtime you will get :
E/AndroidRuntime(19667): Caused by: java.lang.IllegalStateException: Expected
18 but was 17
E/AndroidRuntime(19667): at
com.android.dex.EncodedValueReader.checkType(EncodedValueReader.java:283)
E/AndroidRuntime(19667): at
com.android.dex.EncodedValueReader.readType(EncodedValueReader.java:183)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:723)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:692)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:718)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:705)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:692)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.annotationSetToAnnotations(AnnotationAccess.jav
a:662)
E/AndroidRuntime(19667): at
libcore.reflect.AnnotationAccess.getDeclaredAnnotations(AnnotationAccess.java:16
2)
E/AndroidRuntime(19667): at
java.lang.Class.getDeclaredAnnotations(Class.java:858)
E/AndroidRuntime(19667): at
com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveClassAnnotations
(Unknown Source)
Reproduction with dex2jar-0.0.9.15
Original issue reported on code.google.com by emmanuel...@gmail.com
on 20 Mar 2014 at 1:33
[deleted comment]
[deleted comment]
[deleted comment]
The last build works fine.
Thanks, that was fast !
Original comment by emmanuel...@gmail.com
on 20 Mar 2014 at 3:31