Bug#845606: The Bytecode Should Not Be Targeting Java 1.2

Emmanuel Bourg ebourg at apache.org
Wed Jan 18 10:43:04 UTC 2017


Le 15/01/2017 à 16:26, Miguel Landaeta a écrit :

> It's probably too late to object this change since it's about to enter
> testing but I suspect this change could trigger FTBFS in libasm-java
> reverse dependencies.

We still have two weeks before the final freeze to examine this actually.

I got another look and I think the root issue is the change I made in
asm/5.1-1 when I replaced asm-all.jar by a symlink to asm-debug-all.jar.
I assumed that asm-all was simply a version of the jar stripped from its
debug symbols, and since our policy recommends to keep these symbols I
decided to remove the jar and save a few kilobytes in the package.

But this is slightly more subtle, the classes in asm-all.jar (and the
other non debug jars) are bytecode processed, the generic signatures are
stripped and the class format is changed from 49 (Java 5) to 46 (Java
1.2). So the jars aren't strictly source compatible.

For example jitescript depends on asm-all, and in FieldDefinition it
uses the org.objectweb.asm.tree.FieldNode class which contains a
visibleAnnotations public field [1] of type List<AnnotationNode>
(stripped to List in asm-all.jar). FieldDefinition puts a type
incompatible with AnnotationNode in this list, so the compilation fails
with asm-debug-all, but not asm-all (I reported this upstream [2]).

The case of android-toolchain-jack is another example of a source
incompatibility. Here the org.objectweb.asm.tree.analysis.Analyzer class
is used with a generic parameter [3], so the code can only build with
asm-debug-all and not asm-all.

So the right solution would be to install both asm-all.jar (shrunk) and
asm-debug-all.jar (normal) to satisfy all needs and match the upstream
distribution. We may refine this and modify the shrinking process to
preserve the debug symbols, what matters is to package two jars with and
without generics.

Emmanuel Bourg

[1]
https://anonscm.debian.org/cgit/pkg-java/asm.git/tree/src/org/objectweb/asm/tree/FieldNode.java?h=upstream/5.2#n77
[2] https://github.com/qmx/jitescript/issues/15
[3]
https://gitlab.com/seamlik/debianpkg_android-toolchain-jack/blob/master/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java#L196



More information about the pkg-java-maintainers mailing list