Completed
Details
Assignee
Stuart HallowayStuart HallowayReporter
Alexander YakushevAlexander YakushevApproval
OkPatch
CodePriority
MajorAffects versions
Fix versions
Details
Details
Assignee
Stuart Halloway
Stuart HallowayReporter
Alexander Yakushev
Alexander YakushevApproval
Ok
Patch
Code
Priority

Affects versions
Fix versions
Created February 8, 2015 at 10:42 AM
Updated July 31, 2015 at 4:28 PM
Resolved July 31, 2015 at 4:28 PM
When proxy is used to extend abstract classes (e.g. java.io.Writer), the bytecode it produces include the call to non-existing super methods. For example, here's decompiled method from clojure/pprint/column_writer.clj:
As you can see on the last line, super.close() tries to call a non-defined method (because close() is abstract in Writer).
This hasn't been an issue anywhere until Android 5.0 came out. Its bytecode optimizer is very aggressive and rejects such code. Google guys claim that it is a bug in their code, which they already fixed[1]. Still I wonder if having faulty bytecode, that is not valid by Java standards, might cause issues in future (not only on Android, but in other enviroments too).
[1] https://code.google.com/p/android/issues/detail?id=80687