JDK6 backwards compatible AutoCloseable from a libraries perspective
Rémi Forax
forax at univ-mlv.fr
Mon Feb 7 05:40:46 PST 2011
Le 07/02/2011 14:10, Michael Bien a écrit :
> Hello everyone,
>
> I would like to support the new try-with-resource feature in jocl while
> staying backwards compatible with JDK5/6. The problem is that
> AutoCloseable resides in java.lang which means i have no chance to load
> the class if i would ship it for jdk5 backwards compatibility.
>
> Providing two builds for JOCL is not what i would like to do just to be
> able to be upwards compatible.
>
> any ideas what i could do in this situation?
>
> best regards,
> michael
You need to:
Create a jocl internal equivalent to java.lang.AutoClosable, let say
jocl.lang.AutoClosable,
this class should extends java.lang.AutoClosable.
modify you managed classes to implements jocl.lang.AutoClosable.
compile with javac -source 7 -target 7
Now you have a 1.7 compatible version.
The trick is to downgrade the classfiles to have a 1.5 compatible version.
For this use a bytecode rewriter tools like ASM [1] to change a just
some bits
in the classfiles.
modify the classfile of jocl.lang.AutoClosable to don't inherits from
java.lang.AutoClosable anymore.
downgrade the classfiles major version number from 51 (V1_7) to 49 (V1_5)
In fact, there is a way to avoid to create jocl.lang.AutoClosable, you can
analyze the bytecode to detect call to AutoClosable.close() and replace it
by the type of the variable infered using the same algorithm as the
verifier does.
ASM package org.objectweb.asm.analysis already provides this analysis.
Rémi
[1] http://asm.ow2.org/
More information about the coin-dev
mailing list