You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by hu...@apache.org on 2007/10/29 14:12:34 UTC
svn commit: r589617 - in /struts: site/src/site/xdoc/ struts2/trunk/
struts2/trunk/api/ struts2/trunk/apps/ struts2/trunk/apps/blank/
struts2/trunk/apps/mailreader/ struts2/trunk/apps/portlet/
struts2/trunk/apps/showcase/ struts2/trunk/assembly/ struts...
Author: husted
Date: Mon Oct 29 06:12:30 2007
New Revision: 589617
URL: http://svn.apache.org/viewvc?rev=589617&view=rev
Log:
WW-1715 Update POMs and backport for 2.1.1-SNAPSHOT.
Modified:
struts/site/src/site/xdoc/downloads.xml
struts/struts2/trunk/api/pom.xml
struts/struts2/trunk/apps/blank/pom.xml
struts/struts2/trunk/apps/mailreader/pom.xml
struts/struts2/trunk/apps/pom.xml
struts/struts2/trunk/apps/portlet/pom.xml
struts/struts2/trunk/apps/showcase/pom.xml
struts/struts2/trunk/assembly/pom.xml
struts/struts2/trunk/backport/LICENSE.txt
struts/struts2/trunk/backport/readme.html
struts/struts2/trunk/backport/translate.bat
struts/struts2/trunk/core/pom.xml
struts/struts2/trunk/plugins/codebehind/pom.xml
struts/struts2/trunk/plugins/config-browser/pom.xml
struts/struts2/trunk/plugins/dojo/pom.xml
struts/struts2/trunk/plugins/jasperreports/pom.xml
struts/struts2/trunk/plugins/jfreechart/pom.xml
struts/struts2/trunk/plugins/jsf/pom.xml
struts/struts2/trunk/plugins/pell-multipart/pom.xml
struts/struts2/trunk/plugins/plexus/pom.xml
struts/struts2/trunk/plugins/pom.xml
struts/struts2/trunk/plugins/portlet/pom.xml
struts/struts2/trunk/plugins/sitegraph/pom.xml
struts/struts2/trunk/plugins/sitemesh/pom.xml
struts/struts2/trunk/plugins/spring/pom.xml
struts/struts2/trunk/plugins/struts1/pom.xml
struts/struts2/trunk/plugins/tiles/pom.xml
struts/struts2/trunk/pom.xml
Modified: struts/site/src/site/xdoc/downloads.xml
URL: http://svn.apache.org/viewvc/struts/site/src/site/xdoc/downloads.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/site/src/site/xdoc/downloads.xml (original)
+++ struts/site/src/site/xdoc/downloads.xml Mon Oct 29 06:12:30 2007
@@ -119,6 +119,9 @@
<a href="http://struts.apache.org/2.0.9/index.html">Struts 2.0.9</a>
</li>
<li>
+ <a href="http://struts.apache.org/2.0.8/index.html">Struts 2.0.8</a>
+ </li>
+ <li>
<a href="http://struts.apache.org/2.0.6/index.html">Struts 2.0.6</a>
</li>
<li>
Modified: struts/struts2/trunk/api/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/api/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/api/pom.xml (original)
+++ struts/struts2/trunk/api/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-parent</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-api</artifactId>
Modified: struts/struts2/trunk/apps/blank/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/blank/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/apps/blank/pom.xml (original)
+++ struts/struts2/trunk/apps/blank/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-apps</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-blank</artifactId>
Modified: struts/struts2/trunk/apps/mailreader/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/mailreader/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/apps/mailreader/pom.xml (original)
+++ struts/struts2/trunk/apps/mailreader/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-apps</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-mailreader</artifactId>
Modified: struts/struts2/trunk/apps/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/apps/pom.xml (original)
+++ struts/struts2/trunk/apps/pom.xml Mon Oct 29 06:12:30 2007
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-parent</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-apps</artifactId>
Modified: struts/struts2/trunk/apps/portlet/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/apps/portlet/pom.xml (original)
+++ struts/struts2/trunk/apps/portlet/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-apps</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-portlet</artifactId>
Modified: struts/struts2/trunk/apps/showcase/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/apps/showcase/pom.xml (original)
+++ struts/struts2/trunk/apps/showcase/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-apps</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-showcase</artifactId>
Modified: struts/struts2/trunk/assembly/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/assembly/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/assembly/pom.xml (original)
+++ struts/struts2/trunk/assembly/pom.xml Mon Oct 29 06:12:30 2007
@@ -33,7 +33,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-parent</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<scm>
Modified: struts/struts2/trunk/backport/LICENSE.txt
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/backport/LICENSE.txt?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/backport/LICENSE.txt (original)
+++ struts/struts2/trunk/backport/LICENSE.txt Mon Oct 29 06:12:30 2007
@@ -1,6 +1,3 @@
- Retrotranslator: a Java bytecode transformer that translates Java classes
- compiled with JDK 5.0 into classes that can be run on JVM 1.4.
-
Copyright (c) 2005 - 2007 Taras Puchko
All rights reserved.
Modified: struts/struts2/trunk/backport/readme.html
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/backport/readme.html?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/backport/readme.html (original)
+++ struts/struts2/trunk/backport/readme.html Mon Oct 29 06:12:30 2007
@@ -3,57 +3,62 @@
<head>
<title>Retrotranslator</title>
</head>
-
<body>
<table border="0" width="98%">
<tr>
<td><h2>Retrotranslator</h2></td>
- <td width="125" align="left"><a href="http://sourceforge.net"><img
+ <td width="125"><a href="http://sourceforge.net"><img
src="http://sflogo.sourceforge.net/sflogo.php?group_id=153566&type=2"
width="125" height="37" border="0" alt="SourceForge.net Logo"/></a>
</td>
+ <td width="10">
+ </td>
+ <td width="127"><a href="http://www.jetbrains.com/idea/"><img
+ src="http://www.jetbrains.com/idea/opensource/img/banners/idea125x37_white.gif"
+ width="127" height="37" border="0" alt="The best Java IDE"/></a>
+ </td>
</tr>
</table>
-
<h4>Contents</h4>
<ol>
<li><a href="#what">What is Retrotranslator?</a></li>
<li><a href="#features">What Java 5 features are supported?</a></li>
<li><a href="#commandline">How to use Retrotranslator from a command line?</a></li>
+ <li><a href="#jarfile">How to produce a JAR file compatible with J2SE 1.4?</a></li>
<li><a href="#ant">How to use Retrotranslator from Apache Ant or Maven?</a></li>
<li><a href="#idea">How to use Retrotranslator from IntelliJ IDEA?</a></li>
<li><a href="#jit">How to use Just-in-Time Retrotranslator?</a></li>
- <li><a href="#supported">What Java 5 classes and methods are supported?</a></li>
- <li><a href="#extension">How to write an extension for Retrotranslator?</a></li>
+ <li><a href="#supported">What API is supported on J2SE 1.4?</a></li>
+ <li><a href="#extension">How to write an extension?</a></li>
<li><a href="#limitations">What are the limitations?</a></li>
<li><a href="#alternative">Alternative tools</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#license">License</a></li>
</ol>
-
<h4><a name="what">What is Retrotranslator?</a></h4>
-<a href="http://sourceforge.net/projects/retrotranslator">Retrotranslator</a> is a Java bytecode transformer
-that translates Java classes compiled with JDK 5.0 into classes that can be run on JVM 1.4.
-It is a free, open-source tool based on the <a href="http://asm.objectweb.org/">ASM bytecode manipulation framework</a>
-and concurrency utilities
-<a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php">backported to Java 1.4</a>.
+<p>
+ Retrotranslator is a tool that makes Java applications compatible with various versions of the Java platform.
+ It supports all Java 5 language features and a significant part of Java 5 API on J2SE 1.4. In other Java
+ environments only the Java 5 language features that does not require new API are supported.
+ Retrotranslator is based on the <a href="http://asm.objectweb.org/">ASM</a> bytecode manipulation framework and the
+ <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php">backport</a> of concurrency utilities.
+</p>
<h4><a name="features">What Java 5 features are supported?</a></h4>
<ul>
- <li>Generics (generic types)</li>
- <li>Annotations (metadata)</li>
+ <li>Generics</li>
+ <li>Annotations</li>
<li>Reflection on generics and annotations</li>
- <li>Typesafe enums (enumerated types)</li>
+ <li>Typesafe enums</li>
<li>Autoboxing/unboxing</li>
- <li>Enhanced for loop (for-each loop)</li>
- <li>Varargs (variable arguments)</li>
+ <li>Enhanced for loop</li>
+ <li>Varargs</li>
<li>Covariant return types</li>
<li>Formatted output</li>
<li>Static import</li>
<li>Concurrency utilities</li>
<li>Collections framework enhancements</li>
</ul>
-
<h4><a name="commandline">How to use Retrotranslator from a command line?</a></h4>
<ol>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=153566">Download</a>
@@ -61,7 +66,7 @@
where <i>n.n.n</i> is the latest Retrotranslator release number.
</li>
<li>
- Compile your classes with JDK 5.0 and put them into some directory, e.g. <code>myclasses</code>.
+ Compile your classes with Java 5 or later and put them into some directory, e.g. <code>myclasses</code>.
</li>
<li>
Go to the unzipped directory and execute:<br>
@@ -72,235 +77,179 @@
<code>backport-util-concurrent-<i>n.n</i>.jar</code> into the classpath of your application.
</li>
<li>
- Run or debug the application as usual on J2SE 1.4.x, preferably 1.4.2.
+ Run or debug the application as usual on J2SE 1.4.x.
</li>
</ol>
-
-<p><a name="syntax">The full command line syntax:</a><br>
+<p><a name="syntax">The command line syntax:</a><br>
<code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar <options></code>
<br>or<br>
- <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar net.sf.retrotranslator.transformer.Retrotranslator <options></code></p>
+ <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar
+ net.sf.retrotranslator.transformer.Retrotranslator <options></code></p>
<table border="1" cellspacing="0" cellpadding="5">
- <tr><th>Option</th><th>Description</th><th>Default</th></tr>
- <tr>
- <td nowrap><code>-srcdir</code></td>
- <td>The directory with classes that should be translated (may be specified several times).</td>
- <td>-</td>
- </tr>
- <tr>
- <td nowrap><code>-srcjar</code></td>
- <td>The directory with classes that should be translated (may be specified several times).</td>
- <td>-</td>
- </tr>
- <tr>
- <td nowrap><code>-destdir</code></td>
- <td>The directory to place translated classes.</td>
- <td>Location of sources</td>
- </tr>
- <tr>
- <td nowrap><code>-destjar</code></td>
- <td>The JAR file to place translated classes.</td>
- <td>Location of sources</td>
- </tr>
- <tr>
- <td nowrap><a name="option_advanced"><code>-advanced</code></a></td>
- <td>Whether to use alternative implementations of Java 1.4 classes and methods for better Java 5 compatibility.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td nowrap><code>-verify</code></td>
- <td>Asks the translator to examine translated bytecode for references to classes, methods, or fields
- that cannot be found in the provided classpath.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td nowrap><code>-classpath</code></td>
- <td>The classpath for verification including <code>rt.jar</code>, <code>jce.jar</code>,
- <code>jsse.jar</code> (from JRE 1.4), <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code>,
- and <code>backport-util-concurrent-<i>n.n</i>.jar</code>.</td>
- <td>Current classpath</td>
- </tr>
- <tr>
- <td nowrap><code>-srcmask</code></td>
- <td>The wildcard pattern specifying files that should be translated (either bytecode or UTF-8 text),
- e.g. "<code>*.class;*.tld</code>". There are three special characters: "<code>*?;</code>".
- </td>
- <td>*.class</td>
- </tr>
- <tr>
- <td nowrap><code>-embed</code></td>
- <td>Package name for a private copy of <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and
- <code>backport-util-concurrent-<i>n.n</i>.jar</code> to be put into <code>-destdir</code> or <code>-destjar</code>.
- This makes your application independent of other versions of Retrotranslator present in the classpath.
- </td>
- <td>-</td>
- </tr>
- <tr>
- <td nowrap><a name="option_backport"><code>-backport</code></a></td>
- <td>Informs the translator about <a href="#extension">user-defined</a> backport packages.
- Package names should be separated by semicolons.</td>
- <td>-</td>
- </tr>
- <tr>
- <td nowrap><code>-target</code></td>
- <td>To make Java 6 classes compatible with Java 5 set this option to 1.5 and supply
- <a href="#extension">user-defined</a> backport packages via the <code>backport</code> option.</td>
- <td>1.4</td>
- </tr>
- <tr>
- <td nowrap><code>-lazy</code></td>
- <td>Asks the translator to only transform classes compiled with a <code>target</code> greater than the current one.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td nowrap><code>-stripsign</code></td>
- <td>Asks the translator to strip signature (generics) information.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td nowrap><code>-verbose</code></td>
- <td>Asks the translator for verbose output.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td nowrap><code>-retainapi</code></td>
- <td>Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.
- References introduced by a compiler will also remain unchanged,
- like the use of <code>java.lang.StringBuilder</code> for string concatenation
- or the implicit <code>valueOf</code> method call for autoboxing.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td nowrap><code>-retainflags</code></td>
- <td>Asks the translator to keep Java 5 specific access modifiers.</td>
- <td>Off</td>
- </tr>
+<tr>
+ <th>Option</th>
+ <th>Description</th>
+ <th>Default</th>
+</tr>
+<tr>
+ <td nowrap><code>-srcdir <path></code></td>
+ <td>The directory with the files to process (may be specified several times).</td>
+ <td>-</td>
+</tr>
+<tr>
+ <td nowrap><code>-srcjar <file></code></td>
+ <td>The JAR archive file with the files to process (may be specified several times).</td>
+ <td>-</td>
+</tr>
+<tr>
+ <td nowrap><code>-destdir <path></code></td>
+ <td>The directory to place processed files.</td>
+ <td>The source directory.</td>
+</tr>
+<tr>
+ <td nowrap><code>-destjar <file></code></td>
+ <td>The JAR archive file to place processed files.</td>
+ <td>The source JAR file.</td>
+</tr>
+<tr>
+ <td nowrap><code>-srcmask <mask></code></td>
+ <td>The wildcard pattern specifying the files to transform rather than copy
+ (classes or UTF-8 text files), e.g. <code>*.class;?*.tld</code>.
+ </td>
+ <td><code>*.class</code></td>
+</tr>
+<tr>
+ <td nowrap><a name="option_target"><code>-target <version></code></a></td>
+ <td>The version of the JVM where classes should be able to run. The supported targets are
+ 1.1, 1.2, 1.3, 1.4, and 1.5. While API support is available only for the 1.4 target,
+ user-defined <a href="#option_backport">backport</a> classes may be used for other targets as well.
+ </td>
+ <td><code>1.4</code></td>
+</tr>
+<tr>
+ <td nowrap><a name="option_classpath"><code>-classpath <path></code></a></td>
+ <td>The dependencies of the translated classes, including the target JVM and Retrotranslator itself.
+ The following files should be specified among others if the target is Sun JRE 1.4: <code>rt.jar</code>,
+ <code>jce.jar</code>, <code>jsse.jar</code>, <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code>,
+ and <code>backport-util-concurrent-<i>n.n</i>.jar</code>.
+ This option may be omitted if the current Java environment matches the target one.
+ </td>
+ <td>The current classpath.</td>
+</tr>
+<tr>
+ <td nowrap><a name="option_verify"><code>-verify</code></a></td>
+ <td>Asks the translator to examine translated bytecode for references to classes, methods, or fields
+ that cannot be found in the <a href="#option_classpath">classpath</a>.
+ </td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><a name="option_support"><code>-support <features></code></a></td>
+ <td>Enables advanced features. The names specified should be separated with semicolons, e.g.
+ <code>ThreadLocal.remove;BigDecimal.setScale</code>.
+ </td>
+ <td>-</td>
+</tr>
+<tr>
+ <td nowrap><a name="option_advanced"><code>-advanced</code></a></td>
+ <td>Enables all advanced features at once, but it's recommended to enable only required features
+ in order to avoid compatibility issues.
+ </td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><a name="option_smart"><code>-smart</code></a></td>
+ <td>Makes all backport classes inheritable provided that the <a href="#option_classpath">classpath</a>
+ correctly reflects the target environment.
+ For example, the backport of the <code>Writer.append(String)</code> method may be used
+ to translate the following expression: <code>new FileWriter("file.tmp").append("Hello")</code>.
+ </td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><a name="option_backport"><code>-backport <names></code></a></td>
+ <td>The <a href="#extension">backport</a> names separated with semicolons, e.g. <code>
+ com.myco.all;java.util:com.myco.ju;javax.net.SocketFactory:com.myco.jsse.Factory</code>.
+ The corresponding backport classes must be present in the <a href="#option_classpath">classpath</a>.
+ </td>
+ <td>-</td>
+</tr>
+<tr>
+ <td nowrap><code>-embed <package></code></td>
+ <td>The package name for a partial copy of <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and
+ <code>backport-util-concurrent-<i>n.n</i>.jar</code> to be put along with translated classes.
+ This makes an application independent of other versions of Retrotranslator present in the classpath.
+ </td>
+ <td>-</td>
+</tr>
+<tr>
+ <td nowrap><code>-lazy</code></td>
+ <td>Asks the translator to transform and verify only the classes compiled with a target greater than the
+ <a href="#option_target">current</a> one.
+ </td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><code>-stripsign</code></td>
+ <td>Asks the translator to strip signature (generics) information.</td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><code>-verbose</code></td>
+ <td>Asks the translator for verbose output.</td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><code>-retainapi</code></td>
+ <td>Asks the translator to modify classes for JVM compatibility but keep use of API
+ unless the <a href="#option_backport">backport</a> option is specified.
+ Any references introduced by a compiler remain unchanged, like the use of
+ <code>java.lang.StringBuilder</code> for string concatenation or
+ the implicit <code>valueOf</code> method calls for autoboxing.
+ </td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><code>-retainflags</code></td>
+ <td>Asks the translator to keep Java 5 specific access modifiers.</td>
+ <td><code>false</code></td>
+</tr>
+<tr>
+ <td nowrap><code>-uptodatecheck</code></td>
+ <td>Asks the translator to skip processing of files if the destination files are newer.</td>
+ <td><code>false</code></td>
+</tr>
</table>
+<h4><a name="jarfile">How to produce a JAR file compatible with J2SE 1.4?</a></h4>
+
<p>
- For example, if you have a Java 5 application <code>myapplication5.jar</code> you can use the following command
- to produce <code>myapplication4.jar</code> that will run on J2SE 1.4 and is independent of Retrotranslator,
- since required classes are added to the translated application with a different package name:
+ If you have <code>myapplication5.jar</code> file built with Java 5 you can use the following command to produce
+ <code>myapplication4.jar</code>. It will be compatible with Java 1.4 and independent of Retrotranslator because
+ backport classes are added to the translated application with a different package name:
</p>
+
<p>
<code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar
- -srcjar myapplication5.jar -destjar myapplication4.jar -embed com.mycompany.internal</code><br>
+ -srcjar myapplication5.jar -destjar myapplication4.jar -embed com.mycompany.internal</code><br>
</p>
+<p>
+ Also it is recommended to specify the <a href="#option_classpath">classpath</a> and
+ <a href="#option_verify">verify</a> options. In case of verification failure try the
+ <a href="#option_smart">smart</a> and <a href="#option_advanced">advanced</a> options.
+</p>
<h4><a name="ant">How to use Retrotranslator from Apache Ant or Maven?</a></h4>
-<p>The distribution contains an integrated <a href="http://ant.apache.org/">Apache Ant</a> task
- <code>net.sf.retrotranslator.transformer.RetrotranslatorTask</code>. It has the following syntax:</p>
-<table border="1" cellspacing="0" cellpadding="5">
- <tr><th>Attribute</th><th>Description</th><th>Default</th></tr>
- <tr>
- <td><code>srcdir</code></td>
- <td>The directory with classes that should be translated.</td>
- <td>-</td>
- </tr>
- <tr>
- <td><code>srcjar</code></td>
- <td>The directory with classes that should be translated.</td>
- <td>-</td>
- </tr>
- <tr>
- <td><code>destdir</code></td>
- <td>The directory to place translated classes.</td>
- <td>Location of sources</td>
- </tr>
- <tr>
- <td><code>destjar</code></td>
- <td>The JAR file to place translated classes.</td>
- <td>Location of sources</td>
- </tr>
- <tr>
- <td><code>advanced</code></td>
- <td>Whether to use alternative implementations of Java 1.4 classes and methods for better Java 5 compatibility.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>verify</code></td>
- <td>Asks the translator to examine translated bytecode for references to classes, methods, or fields
- that cannot be found in the provided classpath.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>classpath</code></td>
- <td>The classpath for the verification, including <code>rt.jar</code>, <code>jce.jar</code>,
- <code>jsse.jar</code> (from JRE 1.4), <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code>,
- and <code>backport-util-concurrent-<i>n.n</i>.jar</code>.
- </td>
- <td>Current classpath</td>
- </tr>
- <tr>
- <td><code>classpathref</code></td>
- <td>The classpath for the verification, given as a reference to a path defined elsewhere.
- </td>
- <td>Current classpath</td>
- </tr>
- <tr>
- <td><code>srcmask</code></td>
- <td>The wildcard pattern specifying files that should be translated (either bytecode or UTF-8 text),
- e.g. "<code>*.class;*.tld</code>". There are three special characters: "<code>*?;</code>".
- </td>
- <td>*.class</td>
- </tr>
- <tr>
- <td><code>embed</code></td>
- <td>Package name for a private copy of <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and
- <code>backport-util-concurrent-<i>n.n</i>.jar</code> to be put into <code>-destdir</code> or <code>-destjar</code>.
- This makes your application independent of other versions of Retrotranslator present in the classpath.
- </td>
- <td>-</td>
- </tr>
- <tr>
- <td><code>backport</code></td>
- <td>Informs the translator about <a href="#extension">user-defined</a> backport packages.
- Package names should be separated by semicolons.</td>
- <td>-</td>
- </tr>
- <tr>
- <td><code>target</code></td>
- <td>Set this option to 1.5 and supply <a href="#extension">user-defined</a> backport packages via
- the <code>backport</code> option to make Java 6 classes compatible with Java 5.</td>
- <td>1.4</td>
- </tr>
- <tr>
- <td><code>lazy</code></td>
- <td>Asks the translator to only transform classes compiled with a <code>target</code> greater than the current one.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>stripsign</code></td>
- <td>Asks the translator to strip signature (generics) information.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>verbose</code></td>
- <td>Asks the translator for verbose output.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>retainapi</code></td>
- <td>Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.
- References introduced by a compiler will also remain unchanged,
- like the use of <code>java.lang.StringBuilder</code> for string concatenation
- or the implicit <code>valueOf</code> method call for autoboxing.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>retainflags</code></td>
- <td>Asks the translator to keep Java 5 specific access modifiers.</td>
- <td>Off</td>
- </tr>
- <tr>
- <td><code>failonwarning</code></td>
- <td>Indicates whether the build will fail when there are verification warnings.</td>
- <td>On</td>
- </tr>
-</table>
-<p>
- You may use nested <code>fileset</code>, <code>jarfileset</code>, and <code>dirset</code> elements to specify
- source files and <code>classpath</code> elements to specify classpath. For example:
+<p>The distribution contains an <a href="http://ant.apache.org/">Apache Ant</a> task
+ <code>net.sf.retrotranslator.transformer.RetrotranslatorTask</code>. Every <a href="#commandline">command line</a>
+ option can be set using the corresponding attribute. In addition the source files can be specified with nested
+ <code>fileset</code>, <code>jarfileset</code>, and <code>dirset</code> elements and the
+ <a href="#option_classpath">classpath</a> can be set with nested <code>classpath</code>
+ elements or the <code>classpathref</code> attribute.
+ The source directories specified with <code>srcdir</code>, <code>dirset</code>,
+ and the <code>dir</code> attribute of <code>fileset</code> should contain the root package of the classes.
+ In case of warnings the build fails unless the value of
+ the <code>failonwarning</code> attribute is set to <code>false</code>. For example:
</p>
<pre>
<path id="classpath">
@@ -308,7 +257,7 @@
</path>
<taskdef name="retrotranslator" classpathref="classpath"
classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" />
- <retrotranslator destdir="build/classes14" verify="true">
+ <retrotranslator destdir="build/classes14" verify="true" failonwarning="false">
<fileset dir="build/classes15" includes="**/*.class">
<jarfileset dir="build/lib15" includes="**/*.jar">
<classpath location="${java14_home}/jre/lib/rt.jar"/>
@@ -321,297 +270,690 @@
from the <a href="http://mojo.codehaus.org/">Mojo Project</a>.
</p>
<h4><a name="idea">How to use Retrotranslator from IntelliJ IDEA?</a></h4>
+
<p>
There is a <a href="http://plugins.intellij.net/plugin/?id=145">plugin</a> to automatically translate and verify
classes compiled by <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>, so you can develop in Java 5 but
run and debug on JRE 1.4.
</p>
-
<h4><a name="jit">How to use Just-in-Time Retrotranslator?</a></h4>
-
<p>
- JIT Retrotranslator is able to translate at runtime Java classes loaded with any classloader.
- It works on J2SE 1.4 from most JVM vendors like Sun, IBM, BEA, and Apple, but does nothing on J2SE 5.0.
- However translation at runtime consumes additional memory and processing resources and it will not
- work if your classes make use of Java 5 API but were compiled with "<code>-target 1.4</code>".
+ In order to run a Java 5 application on J2SE 1.4 start it with JIT Retrotranslator:
</p>
<ul>
<li>
- If you want to run a JAR file with the JIT, execute:<br>
<code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar
- net.sf.retrotranslator.transformer.JITRetrotranslator <options> -jar <jarfile> [<args...>]</code>
+ net.sf.retrotranslator.transformer.JITRetrotranslator
+ <options> -jar <jarfile> [<args...>]</code>
</li>
<li>
- When the first option does not work or if you just want to run a class from your classpath, execute:<br>
<code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar:<classpath>
- net.sf.retrotranslator.transformer.JITRetrotranslator <options> <class> [<args...>]</code>
- </li>
- <li>
- Alternatively you may simply call <code>JITRetrotranslator.run()</code> from some JVM 1.4 compatible class
- before Java 5 classes are loaded.
+ net.sf.retrotranslator.transformer.JITRetrotranslator
+ <options> <class> [<args...>]</code>
</li>
</ul>
<p>
- JIT Retrotranslator can accept the <code><a href="#option_advanced">advanced</a></code>
- and <code><a href="#option_backport">backport</a></code> options.
+ The options can include <code><a href="#option_support">support</a></code>,
+ <code><a href="#option_advanced">advanced</a></code>, <code><a href="#option_smart">smart</a></code>, and
+ <code><a href="#option_backport">backport</a></code>. When running on J2SE 5.0 JIT Retrotranslator simply calls
+ the application, but on J2SE 1.4 it also translates classes compiled for Java 5 or later. However this capability
+ depends on the current JVM and the application itself, so under certain conditions JIT Retrotranslator may be unable
+ to translate either a JAR file or classes from the classpath or both.
</p>
-<h4><a name="supported">What Java 5 classes and methods are supported?</a></h4>
+<h4><a name="supported">What API is supported on J2SE 1.4?</a></h4>
<table border="1" cellspacing="0" cellpadding="5">
- <tr><th>Package</th><th>Class</th><th>Methods and fields</th><th>Compatibility notes</th></tr>
- <tr><td><code>java.lang.annotation</code></td><td>* (all classes)</td><td>* (all methods)</td><td> </td></tr>
- <tr><td><code>java.lang.instrument</code></td><td>* (all classes)</td><td>* (all methods)</td><td>
- Bytecode instrumentation is not implemented.</td></tr>
- <tr><td><code>java.util.concurrent,<br>java.util.concurrent.atomic,<br>java.util.concurrent.locks</code></td>
- <td>almost all classes<sup><a href="#1">1</a></sup></td><td>almost all methods</td>
- <td>The <code>LockSupport</code> class may be unusable due to poor efficiency.
- The <code>Condition.awaitNanos(long)</code> method has
- <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html#awaitNanos(edu.emory.mathcs.backport.java.util.concurrent.locks.Condition, long)">
- little</a> accuracy guarantees.</td></tr>
- <tr><td rowspan="6"><code>java.io</code></td><td><code>Closeable<sup><a href="#2">2</a></sup></code>
- </td><td><code>*</code></td><td> </td></tr>
- <tr><td><code>Flushable<sup><a href="#2">2</a></sup></code></td><td><code>*</code></td><td> </td></tr>
- <tr><td><code>PrintStream</code></td><td>
+<tr>
+ <th>Package</th>
+ <th>Class</th>
+ <th>Methods and fields</th>
+ <th>Compatibility notes</th>
+</tr>
+<tr>
+ <td rowspan="6"><code>java.io</code></td>
+ <td><code>Closeable<sup><a href="#2">2</a></sup></code>
+ </td>
+ <td>* (all methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Flushable<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>PrintStream</code></td>
+ <td>
* (11 new methods and constructors)
- </td><td> </td></tr>
- <tr><td><code>PrintWriter</code></td><td>
+ </td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>PrintWriter</code></td>
+ <td>
* (11 new methods and constructors)
- </td><td>
+ </td>
+ <td>
The <code>PrintWriter.format</code> and <code>PrintWriter.printf</code> methods always flush the output buffer.
- </td></tr>
- <tr><td><code>Reader</code></td><td><code>read(CharBuffer)</code></td><td> </td></tr>
- <tr><td><code>Writer</code></td><td>
- <code>append(CharSequence),<br>
- append(CharSequence, int, int),<br>
- append(char)</code>
- </td><td> </td></tr>
- <tr><td rowspan="26"><code>java.lang</code></td><td><code>Appendable<sup><a href="#2">2</a></sup></code></td><td>*
- </td><td> </td></tr>
- <tr><td><code>Boolean</code></td><td><code>parseBoolean(String),<br>
- compareTo(Boolean)</code></td><td> </td></tr>
- <tr><td><code>Byte</code></td><td><code>valueOf(byte)</code></td><td> </td></tr>
- <tr><td><code>Character</code></td><td><code>valueOf(char)</code></td><td> </td></tr>
- <tr><td><code>Class</code></td><td>* (21 new methods)</td><td>
- <code>Class.getMethod(String, Class...)</code> and <code>Class.getDeclaredMethod(String, Class...)</code>
- are intercepted to better support generics and covariant return types
- on several platforms<sup><a href="#3">3</a></sup>.
- </td></tr>
- <tr><td><code>Deprecated</code></td><td>*</td><td> </td></tr>
- <tr><td><code>Double</code></td><td><code>valueOf(double)</code></td><td> </td></tr>
- <tr><td><code>Enum</code></td><td>*</td><td> </td></tr>
- <tr><td><code>Float</code></td><td><code>valueOf(float)</code></td><td> </td></tr>
- <tr><td><code>IllegalArgumentException</code></td><td><code>IllegalArgumentException(String, Throwable),<br>
- IllegalArgumentException(Throwable)</code></td><td> </td></tr>
- <tr><td><code>IllegalStateException</code></td><td><code>IllegalStateException(String, Throwable),<br>
- IllegalStateException(Throwable)</code></td><td> </td></tr>
- <tr><td><code>Integer</code></td><td><code>valueOf(int), signum(int)</code></td><td> </td></tr>
- <tr><td><code>Iterable<sup><a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>Long</code></td><td><code>valueOf(long), signum(long)</code></td><td> </td></tr>
- <tr><td><code>Package</code></td><td>* (4 new methods)</td><td> </td></tr>
- <tr><td><code>Readable<sup><a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>Short</code></td><td><code>valueOf(short)</code></td><td> </td></tr>
- <tr><td><code>String</code></td><td><code>contains(CharSequence),<br>
- contentEquals(CharSequence),<br>
- format(Locale, String, Object...),<br>
- format(String, Object...),<br>
- replace(CharSequence, CharSequence),<br>
+ </td>
+</tr>
+<tr>
+ <td><code>Reader</code></td>
+ <td>* (1 new method)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Writer</code></td>
+ <td>* (3 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td rowspan="28"><code>java.lang</code></td>
+ <td><code>Appendable<sup><a href="#2">2</a></sup></code></td>
+ <td>*
+ </td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Boolean</code></td>
+ <td>* (2 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Byte</code></td>
+ <td>* (1 new method)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Character</code></td>
+ <td>* (44 new methods)</td>
+ <td>New members of <code>Character.UnicodeBlock</code> are not supported.
+ All supplementary code points are considered as unassigned.
+ </td>
+</tr>
+<tr>
+ <td><code>Class</code></td>
+ <td>* (21 new methods)</td>
+ <td>
+ Enable features "<code>Class.getMethod</code>" and "<code>Class.getDeclaredMethod</code>" for more
+ uniform support of generics and covariant return types on different platforms<sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td><code>Deprecated</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Double</code></td>
+ <td><code>valueOf(double)</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Enum</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Float</code></td>
+ <td><code>valueOf(float)</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>IllegalArgumentException</code></td>
+ <td>* (2 new constructors)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>IllegalStateException</code></td>
+ <td>* (2 new constructors)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Integer</code></td>
+ <td><code>valueOf(int),<br>signum(int)</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Iterable<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Long</code></td>
+ <td><code>valueOf(long),<br>signum(long)</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Package</code></td>
+ <td>* (4 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Readable<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Short</code></td>
+ <td>* (2 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>StackTraceElement</code></td>
+ <td>* (1 new constructor)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>String</code></td>
+ <td>* (10 new methods and constructors)<br><code>
isEmpty()<sup><a href="#4">4</a></sup>
- </code></td><td> </td></tr>
- <tr><td><code>StringBuffer</code></td><td><code>
- StringBuffer(CharSequence),<br>
- append(CharSequence),<br>
- append(CharSequence, int, int),<br>
- insert(int, CharSequence),<br>
- insert(int, CharSequence, int, int)
- </code></td><td> </td></tr>
- <tr><td><code>StringBuilder</code></td><td>
- All methods supported in <code>StringBuffer</code>
- </td><td><code>StringBuilder</code> is replaced with <code>StringBuffer</code>.</td></tr>
- <tr><td><code>SuppressWarnings</code></td><td>*</td><td> </td></tr>
- <tr><td><code>System</code></td><td><code>nanoTime()<sup><a href="#1">1</a></sup>,<br> clearProperty(String)</code></td><td>
+ </code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>StringBuffer</code></td>
+ <td>* (11 new methods and constructors)</td>
+ <td>
+ Enable feature "<code>StringBuffer.trimToSize</code>" to use an empty implementation of
+ the <code>StringBuffer.trimToSize()</code> method<sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td><code>StringBuilder</code></td>
+ <td>*</td>
+ <td><code>StringBuilder</code> is replaced with <code>StringBuffer</code>.</td>
+</tr>
+<tr>
+ <td><code>SuppressWarnings</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>System</code></td>
+ <td><code>nanoTime()<sup><a href="#1">1</a></sup>,<br> clearProperty(String)</code></td>
+ <td>
The <code>System.nanoTime()</code> method precision
<a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html#nanoTime()">
may vary</a> on different platforms.
- </td></tr>
- <tr><td><code>Thread</code></td><td><code>getStackTrace(),<br> getId()
- </code></td><td>The <code>Thread.getStackTrace()</code>
- method returns non-empty stack trace only for the current thread.<br>
- The <code>Thread.getId()</code> method does not reflect the order in which threads are created.</td></tr>
- <tr><td><code>Thread.State</code></td><td>*</td><td> </td></tr>
- <tr><td><code>ThreadLocal</code></td><td><code>remove()<sup><a href="#3">3</a></sup></code></td>
- <td><code>ThreadLocal</code> and <code>InheritableThreadLocal</code>
- are replaced by corresponding classes from the runtime library.<sup><a href="#3">3</a></sup>.</td></tr>
- <tr><td><code>TypeNotPresentException</code></td><td>*</td><td> </td></tr>
- <tr><td rowspan="2"><code>java.lang.ref</code></td>
- <td><code>SoftReference</code></td><td>*</td><td>
+ </td>
+</tr>
+<tr>
+ <td><code>Thread</code></td>
+ <td>* (8 new methods)</td>
+ <td>
+ The <code>Thread.getId()</code> method does not reflect the order in which threads are created.<br>
+ The <code>Thread.getStackTrace()</code> and <code>Thread.getAllStackTraces()</code>
+ methods return non-empty stack trace only for the current thread.<br>
+ Enable feature "<code>Thread.getState</code>" to support the <code>Thread.getState()</code> method, but it may
+ be able
+ to detect only <code>NEW</code>, <code>RUNNABLE</code> and <code>TERMINATED</code> states.<sup><a
+ href="#3">3</a></sup><br>
+ Enable features "<code>Thread.setUncaughtExceptionHandler</code>" and
+ "<code>Thread.setDefaultUncaughtExceptionHandler</code>" to support exception handlers for threads
+ created by translated code (in contrast to J2SE 5.0 the default <code>UncaughtExceptionHandler</code>
+ takes precedence over <code>ThreadGroup</code>)<sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td><code>Thread.State</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Thread.UncaughtExceptionHandler<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>ThreadLocal</code></td>
+ <td>* (1 new method)</td>
+ <td>Enable feature "<code>ThreadLocal.remove</code>" to use alternative <code>ThreadLocal</code>
+ and <code>InheritableThreadLocal</code> implementations with method
+ <code>remove()</code><sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td><code>TypeNotPresentException</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>java.lang.annotation</code></td>
+ <td>* (all classes)</td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>java.lang.instrument</code></td>
+ <td>*</td>
+ <td>*</td>
+ <td>
+ Bytecode instrumentation is not implemented.
+ </td>
+</tr>
+<tr>
+ <td><code>java.lang.management</code></td>
+ <td><code>ManagementFactory</code></td>
+ <td>
+ <code>getPlatformMBeanServer()</code></td>
+ <td>
+ The <code>ManagementFactory.getPlatformMBeanServer()</code> method simply returns
+ the first registered <code>MBeanServer</code> or creates it when no one exists.
+ An implementation of JMX 1.2 must be present in a classpath.
+ </td>
+</tr>
+<tr>
+ <td rowspan="2"><code>java.lang.ref</code></td>
+ <td><code>SoftReference</code></td>
+ <td>*</td>
+ <td>
+ Enable feature "<code>SoftReference.NullReferenceQueue</code>" to
+ support <code>null</code> for the second parameter of
<code>SoftReference(Object,ReferenceQueue)</code>
- supports <code>null</code> for the second parameter
on all platforms<sup><a href="#3">3</a></sup>.
- </td></tr>
- <tr><td><code>WeakReference</code></td><td>*</td><td>
+ </td>
+</tr>
+<tr>
+ <td><code>WeakReference</code></td>
+ <td>*</td>
+ <td>
+ Enable feature "<code>WeakReference.NullReferenceQueue</code>" to
+ support <code>null</code> for the second parameter of
<code>WeakReference(Object,ReferenceQueue)</code>
- supports <code>null</code> for the second parameter
on all platforms<sup><a href="#3">3</a></sup>.
- </td></tr>
-
- <tr><td rowspan="13"><code>java.lang.reflect</code></td>
- <td><code>AccessibleObject</code></td><td>*</td><td> </td></tr>
- <tr><td><code>AnnotatedElement<sup><a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>Constructor</code></td><td>* (11 new methods)</td><td> </td></tr>
- <tr><td><code>Field</code></td><td>* (8 new methods)</td><td> </td></tr>
- <tr><td><code>GenericArrayType</code></td><td>*</td><td> </td></tr>
- <tr><td><code>GenericDeclaration<sup><a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>GenericSignatureFormatError</code></td><td>*</td><td> </td></tr>
- <tr><td><code>MalformedParameterizedTypeException</code></td><td>*</td><td> </td></tr>
- <tr><td><code>Method</code></td><td>* (14 new methods)</td><td> </td></tr>
- <tr><td><code>ParameterizedType</code></td><td>*</td><td> </td></tr>
- <tr><td><code>Type<sup><a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>TypeVariable</code></td><td>*</td><td> </td></tr>
- <tr><td><code>WildcardType</code></td><td>*</td><td> </td></tr>
-
- <tr><td ><code>java.math</code></td><td><code>BigDecimal</code></td><td>
- <code>BigDecimal(int),<br> BigDecimal(long),<br> ZERO, ONE, TEN,<br> divideAndRemainder(BigDecimal),<br>
- divideToIntegralValue(BigDecimal),<br> pow(int),<br> remainder(BigDecimal),<br>
- toPlainString(),<br> valueOf(double),<br>
- valueOf(long)</code></td><td>The <code>BigDecimal.setScale(int, int)</code>
- method supports negative scales<sup><a href="#3">3</a></sup>.</td></tr>
-
- <tr><td rowspan="3"><code>java.net</code></td><td><code>URL</code></td>
- <td><code>openConnection(Proxy)</code>,<br>
- <code>toURI()</code>
- </td><td>The <code>Proxy</code> is ignored by the <code>openConnection(Proxy)</code> method.</td></tr>
- <tr><td><code>Proxy</code></td><td>*</td><td> </td></tr>
- <tr><td><code>ProxySelector</code></td><td>*</td><td> </td></tr>
-
- <tr><td ><code>java.rmi.server</code></td><td><code>RemoteObjectInvocationHandler</code></td>
- <td>*</td><td> </td></tr>
-
- <tr><td ><code>java.text</code></td><td><code>DecimalFormat</code></td>
- <td><code>isParseBigDecimal()<sup><a href="#3">3</a></sup>,<br>
- setParseBigDecimal(boolean)<sup><a href="#3">3</a></sup></code></td><td>
- <code>BigDecimal</code> parsing and formatting precision is limited by
- <code>java.lang.Double</code> or <code>java.lang.Long</code> precision.
- </td></tr>
-
- <tr><td><code>java.util.nio</code></td><td><code>CharBuffer</code></td><td>
- <code>append(CharSequence),<br> append(CharSequence, int, int),<br> append(char),<br> read(CharBuffer)</code>
- </td><td> </td></tr>
-
- <tr><td rowspan="10"><code>java.util</code></td><td><code>AbstractQueue<sup><a href="#1">1</a></sup></code></td>
- <td>*</td><td> </td></tr>
- <tr><td><code>Arrays</code></td><td>* (21 new methods)</td><td> </td></tr>
- <tr><td><code>Collections<sup><a href="#1">1</a></sup></code></td><td>* (13 new methods)<br>
- newSetFromMap(Map)<sup><a href="#4">4</a></sup>
-
- </td><td> </td></tr>
- <tr><td><code>EnumMap</code></td><td>*</td><td> </td></tr>
- <tr><td><code>EnumSet</code></td><td>*</td><td> </td></tr>
- <tr><td><code>Formatter</code></td><td>*</td><td> </td></tr>
- <tr><td><code>LinkedList</code></td><td>* (5 new methods)</td><td> </td></tr>
- <tr><td><code>PriorityQueue<sup><a href="#1">1</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>Queue<sup><a href="#1">1</a>,<a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>UUID</code></td><td>*</td><td> </td></tr>
-
- <tr><td rowspan="3"><code>java.util.regex</code></td><td><code>Matcher</code></td><td>
- <code>quoteReplacement(String),<br> toMatchResult()</code></td><td> </td></tr>
- <tr><td><code>MatchResult<sup><a href="#2">2</a></sup></code></td><td>*</td><td> </td></tr>
- <tr><td><code>Pattern</code></td><td><code>quote(String)</code></td><td> </td></tr>
+ </td>
+</tr>
+<tr>
+ <td rowspan="13"><code>java.lang.reflect</code></td>
+ <td><code>AccessibleObject</code></td>
+ <td>* (4 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>AnnotatedElement<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Constructor</code></td>
+ <td>* (11 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Field</code></td>
+ <td>* (8 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>GenericArrayType</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>GenericDeclaration<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>GenericSignatureFormatError</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>MalformedParameterizedTypeException</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Method</code></td>
+ <td>* (14 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>ParameterizedType</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Type<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>TypeVariable</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>WildcardType</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td rowspan="2"><code>java.math</code></td>
+ <td><code>BigDecimal</code></td>
+ <td>
+ <code>ZERO, ONE, TEN,<br>
+ BigDecimal(int),<br>
+ BigDecimal(long),<br>
+ BigDecimal(char[]),<br>
+ BigDecimal(char[], int, int),<br>
+ divideAndRemainder(BigDecimal),<br>
+ divideToIntegralValue(BigDecimal),<br>
+ pow(int),<br>
+ remainder(BigDecimal),<br>
+ toPlainString(),<br>
+ valueOf(double),<br>
+ valueOf(long)</code></td>
+ <td>
+ Enable feature "<code>BigDecimal.setScale</code>" to support negative scales in method
+ <code>BigDecimal.setScale(int, int)</code><sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td><code>BigInteger</code></td>
+ <td><code>TEN</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td rowspan="5"><code>java.net</code></td>
+ <td><code>HttpURLConnection</code></td>
+ <td>* (6 new methods)</td>
+ <td>
+ Enable features "<code>HttpURLConnection.setChunkedStreamingMode</code>",
+ "<code>HttpURLConnection.setFixedLengthStreamingMode</code>"
+ to use the corresponding methods, but on Java 1.4 they will simply return.
+ Consider using alternative or writing own protocol handlers.
+ </td>
+</tr>
+<tr>
+ <td><code>Proxy</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>ProxySelector</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>URL</code></td>
+ <td>* (2 new methods)</td>
+ <td>The <code>Proxy</code> is ignored by the
+ <code>URL.openConnection(Proxy)</code> method.
+ </td>
+</tr>
+<tr>
+ <td><code>URLConnection</code></td>
+ <td>* (4 new methods)</td>
+ <td>
+ Enable features "<code>URLConnection.getConnectTimeout</code>", "<code>URLConnection.setConnectTimeout</code>",
+ "<code>URLConnection.getReadTimeout</code>", "<code>URLConnection.setReadTimeout</code>"
+ to use the corresponding methods, but on Java 1.4 they will simply return.
+ Consider using alternative or writing own protocol handlers.
+ </td>
+</tr>
+<tr>
+ <td rowspan="2"><code>java.nio</code></td>
+ <td><code>CharBuffer</code></td>
+ <td>* (4 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Charset</code></td>
+ <td>* (1 new method)</td>
+ <td>The <code>Charset.defaultCharset()</code> method returns UTF-8
+ if the default charset is unavailable (occurs on JDK 1.4.0).
+ </td>
+</tr>
+<tr>
+ <td><code>java.rmi.server</code></td>
+ <td><code>RemoteObjectInvocationHandler</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>java.text</code></td>
+ <td><code>DecimalFormat</code></td>
+ <td>* (2 new methods)</td>
+ <td>
+ Enable feature "<code>DecimalFormat.setParseBigDecimal</code>" to support the
+ <code>DecimalFormat.setParseBigDecimal(boolean)</code> method, but
+ parsing and formatting precision will still be limited by the <code>java.lang.Double</code>
+ or <code>java.lang.Long</code> precision<sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td rowspan="14"><code>java.util</code></td>
+ <td><code>AbstractQueue<sup><a href="#1">1</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>ArrayDeque<sup><a href="#1">1</a>,<a href="#4">4</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Arrays</code></td>
+ <td>* (21 new methods)<br>
+ <code>copyOf(...)</code><sup><a href="#4">4</a></sup> (10 methods)<br>
+ <code>copyOfRange(...)</code><sup><a href="#4">4</a></sup> (10 methods)
+ </td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Collections<sup><a href="#1">1</a></sup></code></td>
+ <td>* (13 new methods)<br>
+ <code>newSetFromMap(Map)</code><sup><a href="#4">4</a></sup>
+ </td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Deque<sup><a href="#1">1</a>,<a href="#2">2</a>,<a href="#4">4</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>EnumMap</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>EnumSet</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Formatter</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>LinkedList</code></td>
+ <td>* (5 new methods)</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>PriorityQueue<sup><a href="#1">1</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Properties</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Queue<sup><a href="#1">1</a>,<a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Timer</code></td>
+ <td>* (3 new methods and constructors)</td>
+ <td>
+ Enable feature "<code>Timer.All</code>" to use alternative <code>Timer</code>
+ and <code>TimerTask</code> implementations in order to be able to call <code>Timer(String)</code>,
+ <code>Timer(String, boolean)</code>, and <code>Timer.purge()</code><sup><a href="#3">3</a></sup>.
+ </td>
+</tr>
+<tr>
+ <td><code>UUID</code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>java.util.concurrent,<br>java.util.concurrent.atomic,<br>java.util.concurrent.locks</code></td>
+ <td>almost all classes<sup><a href="#1">1</a></sup></td>
+ <td>almost all methods</td>
+ <td>The <code>LockSupport</code> class may be unusable due to insufficient performance.
+ The <code>Condition.awaitNanos(long)</code> method has
+ <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html#awaitNanos(edu.emory.mathcs.backport.java.util.concurrent.locks.Condition, long)">
+ little</a> accuracy guarantees.
+ </td>
+</tr>
+<tr>
+ <td rowspan="3"><code>java.util.regex</code></td>
+ <td><code>Matcher</code></td>
+ <td>
+ <code>quoteReplacement(String),<br> toMatchResult()</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>MatchResult<sup><a href="#2">2</a></sup></code></td>
+ <td>*</td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>Pattern</code></td>
+ <td><code>quote(String)</code></td>
+ <td> </td>
+</tr>
+<tr>
+ <td><code>javax.net.ssl</code></td>
+ <td><code>HttpsURLConnection</code></td>
+ <td> * (2 new methods)</td>
+ <td> </td>
+</tr>
</table>
<p>
<a name="1"><sup>1</sup></a> Supported via the
- <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a>.<br>
- <a name="2"><sup>2</sup></a> In most cases this type is being replaced with it's base type.<br>
- <a name="3"><sup>3</sup></a> Supported only in advanced mode, i.e. when
- the <code><a href="#option_advanced">advanced</a></code> option is specified.<br>
- <a name="4"><sup>4</sup></a> Introduced in Java 6, but available only for 1.4 target.<br>
+ <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a>.<br>
+ <a name="2"><sup>2</sup></a> In most cases this type is replaced with its base type.<br>
+ <a name="3"><sup>3</sup></a> Supported only when the corresponding feature is enabled via the
+ <code><a href="#option_support">support</a></code> or
+ <code><a href="#option_advanced">advanced</a></code> options.<br>
+ <a name="4"><sup>4</sup></a> Introduced in Java 6.<br>
+</p>
+<h4><a name="extension">How to write an extension?</a></h4>
+
+<p>
+ In order to support API unavailable on the target platform Retrotranslator should be able to replace all references
+ to new clases, constructors, methods, and fields with references to backports compatible with the platform.
+ The location of the backports must be specified with the <a href="#option_classpath">classpath</a> option. The
+ <a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/registry/backport14.properties?view=markup">default</a>
+ backports for the 1.4 target have been packaged into the <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and
+ <code>backport-util-concurrent-<i>n.n</i>.jar</code> files, and to complement or override them additional backport
+ names may be specified via the <a href="#option_backport">backport</a> option. The backport names may have five
+ different forms, the first one declares a universal backport package and the others allow to reuse existing backports.
</p>
-
-<h4><a name="extension">How to write an extension for Retrotranslator?</a></h4>
-
+<table border="1" cellspacing="0" cellpadding="5">
+<tr>
+ <th>Backport name form</th>
+ <th>Example</th>
+</tr>
+<tr>
+ <td><code><universal backport package name></code></td>
+ <td><code>net.sf.retrotranslator.runtime<br>
+ com.mycompany.backport</code></td>
+</tr>
+<tr>
+ <td><code><original package name>:<backport package name></code></td>
+ <td><code>java.util.concurrent:edu.emory.mathcs.backport.java.util.concurrent<br>
+ com.sun.org.apache.xerces.internal:org.apache.xerces</code></td>
+</tr>
+<tr>
+ <td><code><original class name>:<backport class name></code></td>
+ <td><code>java.lang.StringBuilder:java.lang.StringBuffer<br>
+ java.util.LinkedHashMap:org.apache.commons.collections.map.LinkedMap</code></td>
+</tr>
+<tr>
+ <td><code><original method name>:<backport method name></code></td>
+ <td><code>java.lang.System.nanoTime:edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils.nanoTime</code></td>
+</tr>
+<tr>
+ <td><code><original field name>:<backport field name></code></td>
+ <td><code>java.util.Collections.EMPTY_MAP:edu.emory.mathcs.backport.java.util.Collections.EMPTY_MAP</code></td>
+</tr>
+</table>
<p>
- Since most backported classes are discovered by Retrotranslator at translation time,
- you may write an extension and simply put it into the Retrotranslator classpath to make it work.
- For example, all references to
- <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/EnumSet.html"><code>java.util.EnumSet</code></a>
- are replaced with references to
+ The names of backport classes in a universal backport package consist of the backport package name,
+ the name of the original class, and an optional trailing underscore. For example,
<a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/util/EnumSet_.java?view=markup">
- <code>net.sf.retrotranslator.runtime.java.util.EnumSet<b>_</b></code></a> (optional trailing underscore) if the latter can be found.
- But if you replace a whole class that exists in J2SE 1.4 you may encounter interoperability issues with other libraries.
- So, for example, support for Java 5 fields, methods, and constructors of
- <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html"><code>java.math.BigDecimal</code></a> is placed into
-
+ <code>net.sf.retrotranslator.runtime.java.util.EnumSet<b>_</b></code></a> is a complete backport of
+ <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/EnumSet.html"><code>java.util.EnumSet</code></a>.
+ But when classes exist on the target platform then the backports of their new fields, constructors and methods are
+ grouped into classes with a leading underscore in their names. Look at the
<a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/math/_BigDecimal.java?view=markup">
- <code>net.sf.retrotranslator.runtime.java.math.<b>_</b>BigDecimal</code></a> (leading underscore):
+ <code>net.sf.retrotranslator.runtime.java.math.<b>_</b>BigDecimal</code></a> class:
</p>
- <ul>
- <li>For a static field there is a public static field with the same name and type.</li>
- <li>For a static method there is a public static method with the same signature.</li>
- <li>For an instance method there is a public static method with the same signature
- but with an additional first parameter representing the instance.</li>
- <li>For a constructor there is a public static <code>convertConstructorArguments</code> method that
- accepts constructor's arguments an returns an argument for a Java 1.4 constuctor.</li>
- </ul>
-<p>
- Another approach for constructor backporting is used by
- <a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/io/_PrintStream.java?view=markup">
- <code>net.sf.retrotranslator.runtime.java.io.<b>_</b>PrintStream</code></a>. There is a public static
+<ul>
+ <li>For a static field there is a public static field with the same name and type.</li>
+ <li>For a static method there is a public static method with the same signature.</li>
+ <li>For an instance method there is a public static method with the same signature
+ but with an additional first parameter representing the instance.
+ </li>
+ <li>For a constructor there is a public static <code>convertConstructorArguments</code> method that
+ accepts constructor's arguments an returns an argument for a Java 1.4 constuctor.
+ </li>
+</ul>
+<p>
+ The <a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/io/_PrintStream.java?view=markup">
+ <code>net.sf.retrotranslator.runtime.java.io.<b>_</b>PrintStream</code></a> and
+ <a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/lang/_SecurityException.java?view=markup">
+ <code>net.sf.retrotranslator.runtime.java.lang.<b>_</b>SecurityException</code></a> classes use another type of
+ constructor backports. There is a public static
<code>createInstanceBuilder</code> method that accepts constructor's arguments an returns an object with public
- <code>argument1</code>...<code>argumentN</code> methods and optional public void <code>initialize</code> method.
- All <code>argumentX</code> methods provide arguments for a Java 1.4 constuctor and should not have any parameters.
- The <code>initialize</code> method has a single parameter for the created instance and may be used for postprocessing.
+ <code>argument1</code>...<code>argumentN</code> methods and an optional public void <code>initialize</code> method.
+ All the <code>argumentX</code> methods provide arguments for a Java 1.4 constuctor and should not have any
+ parameters. The <code>initialize</code> method has a single parameter for the created instance and may be used for
+ postprocessing. If this approach does not work there is another flexible but not always supported one used by
+ <a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/lang/_StackTraceElement.java?view=markup">
+ <code>net.sf.retrotranslator.runtime.java.lang.<b>_</b>StackTraceElement</code></a>.
+ If backported methods require access to non-public methods or fields of the instance, they can do it with reflection
+ when the security manager allows such access. The backports of public instance fields are not supported, but private
+ instance fields can be emulated using a weak identity map, see
+ <a href="http://retrotranslator.cvs.sourceforge.net/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/lang/_Thread.java?view=markup">
+ <code>net.sf.retrotranslator.runtime.java.lang.<b>_</b>Thread</code></a> for an example.
</p>
-<p>
- However, if the backported methods require access
- to non-public methods or fields of the instance, they cannot be fully handled by Retrotranslator.
- While you can use reflection to access any data, translated code generally should not depend on security settings.
- For example, it is impossible to write an implementation for methods <code>getSource()</code>
- and <code>setSource()</code> of <code>java.beans.PropertyEditorSupport</code> that will work in any environment.
- Also this approach cannot be used to replace instance field references.
-</p>
-<p>
- You can put your extensions into packages other than <code>net.sf.retrotranslator.runtime</code>.
- For example, specify the following at the command line to make Retrotranslator use
- <code>com.mycompany.internal.java.lang._String</code> and to rewrite all references to
- <code>com.sun.org.apache.xerces.internal.*</code> with <code>org.apache.xerces.*</code>:<br>
- <code>-backport com.mycompany.internal;com.sun.org.apache.xerces.internal:org.apache.xerces</code>
-</p>
-<p>
- If you have written an extension that does not contain copyrighted code, you may send
- a <a href="http://sourceforge.net/tracker/?group_id=153566&atid=788281">patch</a>
- under the <a href="#license">Retrotranslator license</a>.
-</p>
<h4><a name="limitations">What are the limitations?</a></h4>
-
-<p>
- Basically, only classes, methods, and fields listed <a href="#supported">above</a> should work, and other features,
- like formatted input, are not supported. Known issues:
-</p>
<ul>
- <li>Reflection-based tools may be unable to discover additional classes and methods introduced in Java 5 when running on JRE 1.4.</li>
- <li>Some applications enable all features only if they detect Java 5, so you may need to override system properties:<br>
- <code> java -Djava.version=1.5.0 -Djava.specification.version=1.5 -Djava.class.version=49.0 ...</code></li>
- <li>Translated code running on JRE 5.0 may be incompatible with other Java 5 code when Java 5 API is used.</li>
- <li>Reflection on generics and metadata may return incomplete information for dynamically generated classes.</li>
- <li>Constants inlined by a compiler and access modifiers are ignored during the verification.</li>
- <li>Inherited methods introduced in Java 5 may not work, however upcasting may help in some cases:<br>
- <code> ((Writer) new FileWriter("file.tmp")).append("Hello").close();</code></li>
- <li>Serialized objects produced by translated code may be incompatible with JRE 5.0.</li>
+ <li>Retrotranslator does not emulate the Java 5 memory model.</li>
+ <li>Only the classes, methods, and fields listed <a href="#supported">above</a> should work
+ and the other features, like formatted input, are not supported.
+ </li>
+ <li>Java 5 reflection methods should be able to load compiled classes as resources,
+ so for dynamically generated classes they may return incomplete information.
+ </li>
+ <li>The backported implementation of Java 5 API may be incompatible
+ with the original API implementation when running on J2SE 5.0.
+ </li>
+ <li>Reflection-based tools may be unable to discover Java 5 API when running on J2SE 1.4.</li>
+ <li>The constants inlined by a compiler and access modifiers are ignored during the verification.</li>
</ul>
-
<h4><a name="alternative">Alternative tools</a></h4>
<ul>
- <li><a href="http://retroweaver.sourceforge.net/">Retroweaver</a>
- - a Java bytecode weaver that enables you to take advantage
- of the new 1.5 language features in your source code,
- while still retaining compatibility with 1.4 virtual machines.</li>
- <li><a href="http://tinyurl.com/r8xba">Declawer</a>
- - a customized Java compiler which reduces 1.5 Generics to equivalent 1.4 syntax.</li>
+ <li><a href="http://retroweaver.sourceforge.net/">Retroweaver</a></li>
+ <li><a href="http://tinyurl.com/r8xba">Declawer</a></li>
+ <li><a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossRetro">JBossRetro</a></li>
</ul>
-
<h4><a name="contact">Contact</a></h4>
<ul>
+ <li><a href="http://sourceforge.net/projects/retrotranslator">Project summary</a></li>
<li><a href="http://retrotranslator.sourceforge.net/">Latest documentation</a></li>
<li><a href="http://sourceforge.net/forum/forum.php?forum_id=513539">Open discussion</a></li>
<li><a href="http://sourceforge.net/forum/forum.php?forum_id=513540">Help</a></li>
@@ -619,12 +961,8 @@
<li><a href="http://sourceforge.net/tracker/?group_id=153566&atid=788282">Feature requests</a></li>
<li><a href="http://sourceforge.net/users/tarasp/">Author</a></li>
</ul>
-
<h4><a name="license">License</a></h4>
<pre>
- Retrotranslator: a Java bytecode transformer that translates Java classes
- compiled with JDK 5.0 into classes that can be run on JVM 1.4.
-
Copyright (c) 2005 - 2007 Taras Puchko
All rights reserved.
Modified: struts/struts2/trunk/backport/translate.bat
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/backport/translate.bat?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/backport/translate.bat (original)
+++ struts/struts2/trunk/backport/translate.bat Mon Oct 29 06:12:30 2007
@@ -1,3 +1,3 @@
-java -jar retrotranslator-transformer-1.2.0.jar -advanced -srcjar ../lib/struts2-core-2.0.4.jar -destjar struts2-core-j4-2.0.4.jar
-java -jar retrotranslator-transformer-1.2.0.jar -advanced -srcjar ../lib/struts2-api-2.0.4.jar -destjar struts2-api-j4-2.0.4.jar
-java -jar retrotranslator-transformer-1.2.0.jar -advanced -srcjar ../lib/xwork-2.0.0.jar -destjar xwork-j4-2.0.0.jar
+java -jar retrotranslator-transformer-1.2.3.jar -advanced -srcjar ../lib/struts2-core-2.1.1-SNAPSHOT.jar -destjar struts2-core-backport-2.1.1-SNAPSHOT.jar
+java -jar retrotranslator-transformer-1.2.3.jar -advanced -srcjar ../lib/struts2-api-2.1.1-SNAPSHOT.jar -destjar struts2-api-backport-2.1.1-SNAPSHOT.jar
+java -jar retrotranslator-transformer-1.2.3.jar -advanced -srcjar ../lib/xwork-2.1.1-SNAPSHOT.jar -destjar xwork-backport-2.1.1-SNAPSHOT.jar
Modified: struts/struts2/trunk/core/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/core/pom.xml (original)
+++ struts/struts2/trunk/core/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-parent</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
@@ -57,7 +57,7 @@
<artifactItem>
<groupId>com.opensymphony</groupId>
<artifactId>xwork</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
<classifier>sources</classifier>
</artifactItem>
</artifactItems>
@@ -291,7 +291,7 @@
<dependency>
<groupId>com.opensymphony</groupId>
<artifactId>xwork</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</dependency>
<!--<dependency>-->
Modified: struts/struts2/trunk/plugins/codebehind/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/codebehind/pom.xml (original)
+++ struts/struts2/trunk/plugins/codebehind/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-codebehind-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/config-browser/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/config-browser/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/config-browser/pom.xml (original)
+++ struts/struts2/trunk/plugins/config-browser/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-config-browser-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/dojo/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/dojo/pom.xml (original)
+++ struts/struts2/trunk/plugins/dojo/pom.xml Mon Oct 29 06:12:30 2007
@@ -25,7 +25,7 @@
<parent>
<artifactId>struts2-plugins</artifactId>
<groupId>org.apache.struts</groupId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.struts</groupId>
Modified: struts/struts2/trunk/plugins/jasperreports/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jasperreports/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/jasperreports/pom.xml (original)
+++ struts/struts2/trunk/plugins/jasperreports/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-jasperreports-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/jfreechart/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jfreechart/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/jfreechart/pom.xml (original)
+++ struts/struts2/trunk/plugins/jfreechart/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-jfreechart-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/jsf/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jsf/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/jsf/pom.xml (original)
+++ struts/struts2/trunk/plugins/jsf/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-jsf-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/pell-multipart/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/pell-multipart/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/pell-multipart/pom.xml (original)
+++ struts/struts2/trunk/plugins/pell-multipart/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-pell-multipart-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/plexus/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/plexus/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/plexus/pom.xml (original)
+++ struts/struts2/trunk/plugins/plexus/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plexus-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/pom.xml (original)
+++ struts/struts2/trunk/plugins/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-parent</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
Modified: struts/struts2/trunk/plugins/portlet/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/portlet/pom.xml (original)
+++ struts/struts2/trunk/plugins/portlet/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-portlet-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/sitegraph/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitegraph/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/sitegraph/pom.xml (original)
+++ struts/struts2/trunk/plugins/sitegraph/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitegraph-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/sitemesh/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitemesh/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/sitemesh/pom.xml (original)
+++ struts/struts2/trunk/plugins/sitemesh/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitemesh-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/spring/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/spring/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/spring/pom.xml (original)
+++ struts/struts2/trunk/plugins/spring/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/struts1/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/struts1/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/struts1/pom.xml (original)
+++ struts/struts2/trunk/plugins/struts1/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-struts1-plugin</artifactId>
Modified: struts/struts2/trunk/plugins/tiles/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/tiles/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/tiles/pom.xml (original)
+++ struts/struts2/trunk/plugins/tiles/pom.xml Mon Oct 29 06:12:30 2007
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-plugins</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
</parent>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-tiles-plugin</artifactId>
Modified: struts/struts2/trunk/pom.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/pom.xml?rev=589617&r1=589616&r2=589617&view=diff
==============================================================================
--- struts/struts2/trunk/pom.xml (original)
+++ struts/struts2/trunk/pom.xml Mon Oct 29 06:12:30 2007
@@ -35,7 +35,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-parent</artifactId>
- <version>2.1.0</version>
+ <version>2.1.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Struts 2</name>
<url>http://struts.apache.org/struts2</url>