proxy creates bytecode that calls super methods of abstract classes

Description

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

Environment

Everywhere, but so far relevant only on Android 5.0

Status

Assignee

Stuart Halloway

Reporter

Alexander Yakushev

Labels

None

Approval

Ok

Patch

Code

Fix versions

Affects versions

Release 1.6

Priority

Major
Configure