You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ws...@apache.org on 2006/11/23 18:32:01 UTC

svn commit: r478625 [2/4] - in /struts/struts2/trunk: apps/blank/src/main/resources/example/ apps/blank/src/main/webapp/ apps/mailreader/ apps/mailreader/src/main/java/ apps/mailreader/src/main/java/mailreader2/ apps/showcase/src/main/java/org/apache/s...

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction.java Thu Nov 23 09:31:52 2006
@@ -1,83 +1,83 @@
-/*
- * $Id: $
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.struts2.showcase.fileupload;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Showcase action - multiple file upload using List
- * @version $Date$ $Id$
- */
-public class MultipleFileUploadUsingListAction extends ActionSupport {
-
-    private List<File> uploads = new ArrayList<File>();
-    private List<String> uploadFileNames = new ArrayList<String>();
-    private List<String> uploadContentTypes = new ArrayList<String>();
-
-
-    public List<File> getUpload() {
-        return this.uploads;
-    }
-    public void setUpload(List<File> uploads) {
-        this.uploads = uploads;
-    }
-
-    public List<String> getUploadFileName() {
-        return this.uploadFileNames;
-    }
-    public void setUploadFileName(List<String> uploadFileNames) {
-        this.uploadFileNames = uploadFileNames;
-    }
-
-    public List<String> getUploadContentType() {
-        return this.uploadContentTypes;
-    }
-    public void setUploadContentType(List<String> contentTypes) {
-        this.uploadContentTypes = contentTypes;
-    }
-
-
-
-
-    public String upload() throws Exception {
-
-        System.out.println("\n\n upload1");
-        System.out.println("files:");
-        for (File u: uploads) {
-            System.out.println("*** "+u+"\t"+u.length());
-        }
-        System.out.println("filenames:");
-        for (String n: uploadFileNames) {
-            System.out.println("*** "+n);
-        }
-        System.out.println("content types:");
-        for (String c: uploadContentTypes) {
-            System.out.println("*** "+c);
-        }
-        System.out.println("\n\n");
-        return SUCCESS;
-    }
-
-
-}
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.showcase.fileupload;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * Showcase action - multiple file upload using List
+ * @version $Date$ $Id$
+ */
+public class MultipleFileUploadUsingListAction extends ActionSupport {
+
+    private List<File> uploads = new ArrayList<File>();
+    private List<String> uploadFileNames = new ArrayList<String>();
+    private List<String> uploadContentTypes = new ArrayList<String>();
+
+
+    public List<File> getUpload() {
+        return this.uploads;
+    }
+    public void setUpload(List<File> uploads) {
+        this.uploads = uploads;
+    }
+
+    public List<String> getUploadFileName() {
+        return this.uploadFileNames;
+    }
+    public void setUploadFileName(List<String> uploadFileNames) {
+        this.uploadFileNames = uploadFileNames;
+    }
+
+    public List<String> getUploadContentType() {
+        return this.uploadContentTypes;
+    }
+    public void setUploadContentType(List<String> contentTypes) {
+        this.uploadContentTypes = contentTypes;
+    }
+
+
+
+
+    public String upload() throws Exception {
+
+        System.out.println("\n\n upload1");
+        System.out.println("files:");
+        for (File u: uploads) {
+            System.out.println("*** "+u+"\t"+u.length());
+        }
+        System.out.println("filenames:");
+        for (String n: uploadFileNames) {
+            System.out.println("*** "+n);
+        }
+        System.out.println("content types:");
+        for (String c: uploadContentTypes) {
+            System.out.println("*** "+c);
+        }
+        System.out.println("\n\n");
+        return SUCCESS;
+    }
+
+
+}

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java Thu Nov 23 09:31:52 2006
@@ -1,5 +1,5 @@
 /*
- * $Id: $
+ * $Id$
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java Thu Nov 23 09:31:52 2006
@@ -1,5 +1,5 @@
 /*
- * $Id: $
+ * $Id$
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java Thu Nov 23 09:31:52 2006
@@ -1,5 +1,5 @@
 /*
- * $Id: $
+ * $Id$
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/NewPersonAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/NewPersonAction.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/NewPersonAction.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/NewPersonAction.java Thu Nov 23 09:31:52 2006
@@ -1,5 +1,5 @@
 /*
- * $Id: $
+ * $Id$
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/NewPersonAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/NewPersonAction.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java Thu Nov 23 09:31:52 2006
@@ -1,5 +1,5 @@
 /*
- * $Id: $
+ * $Id$
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction-conversion.properties
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction-conversion.properties?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction-conversion.properties (original)
+++ struts/struts2/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction-conversion.properties Thu Nov 23 09:31:52 2006
@@ -1 +1 @@
-Element_upload=java.io.File
+Element_upload=java.io.File

Propchange: struts/struts2/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/fileupload/MultipleFileUploadUsingListAction-conversion.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/resources/struts.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/apps/showcase/src/main/webapp/tiles/body.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: struts/struts2/trunk/backport/readme.html
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/backport/readme.html?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/backport/readme.html (original)
+++ struts/struts2/trunk/backport/readme.html Thu Nov 23 09:31:52 2006
@@ -1,549 +1,549 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<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
-                src="http://sflogo.sourceforge.net/sflogo.php?group_id=153566&amp;type=2"
-                width="125" height="37" border="0" alt="SourceForge.net Logo"/></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="#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="#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>.
-
-<h4><a name="features">What Java 5 features are supported?</a></h4>
-<ul>
-    <li>Generics (generic types)</li>
-    <li>Annotations (metadata)</li>
-    <li>Reflection on generics and annotations</li>
-    <li>Typesafe enums (enumerated types)</li>
-    <li>Autoboxing/unboxing</li>
-    <li>Enhanced for loop (for-each loop)</li>
-    <li>Varargs (variable arguments)</li>
-    <li>Covariant return types</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>
-        and unzip the binary distribution file <code>Retrotranslator-<i>n.n.n</i>-bin.zip</code>,
-        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>.
-    </li>
-    <li>
-        Go to the unzipped directory <code>Retrotranslator-<i>n.n.n</i>-bin</code> and execute:<br>
-        <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar -srcdir myclasses</code>
-    </li>
-    <li>
-        If you use Java 5 API put <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and
-        <code>backport-util-concurrent.jar</code> into the classpath of your application.
-    </li>
-    <li>
-        Run or debug the application as usual on any JVM 1.4, preferably JRE 1.4.2.
-    </li>
-</ol>
-
-<p>The full command line syntax:<br>
-    <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar &lt;options&gt;</code>
-    <br>or<br>
-    <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar net.sf.retrotranslator.transformer.Retrotranslator &lt;options&gt;</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>Directory with classes compiled using JDK 5.0 (may be specified several times).</td>
-        <td>-</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-srcjar</code></td>
-        <td>JAR file with classes compiled using JDK 5.0 (may be specified several times).</td>
-        <td>-</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-destdir</code></td>
-        <td>Directory to place classes compatible with J2SE 1.4.</td>
-        <td>Location of sources</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-destjar</code></td>
-        <td>JAR file to place classes compatible with J2SE 1.4.</td>
-        <td>Location of sources</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>-lazy</code></td>
-        <td>Asks the translator to transform only Java 5 classes.</td>
-        <td>Off</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-advanced</code></td>
-        <td>Allows to override Java 1.4 methods for better Java 5 compatibility.</td>
-        <td>Off</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-verify</code></td>
-        <td>Asks the translator for warnings when references to unknown classes, methods, or fields are found.</td>
-        <td>Off</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-classpath</code></td>
-        <td>The classpath to use 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.jar</code>.</td>
-        <td>Current classpath</td>
-    </tr>
-    <tr>
-        <td nowrap><code>-srcmask</code></td>
-        <td>Files to translate (either bytecode or UTF-8 text) , e.g. "<code>*.class;*.tld</code>".
-            Only three special characters are supported: "<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.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><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>
-</table>
-<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:
-</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>
-</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>Directory with classes compiled using JDK 5.0.</td>
-        <td>-</td>
-    </tr>
-    <tr>
-        <td><code>srcjar</code></td>
-        <td>JAR file with classes compiled using JDK 5.0.</td>
-        <td>-</td>
-    </tr>
-    <tr>
-        <td><code>destdir</code></td>
-        <td>Directory to place classes compatible with J2SE 1.4.</td>
-        <td>Location of sources</td>
-    </tr>
-    <tr>
-        <td><code>destjar</code></td>
-        <td>JAR file to place classes compatible with J2SE 1.4.</td>
-        <td>Location of sources</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>lazy</code></td>
-        <td>Asks the translator to transform only Java 5 classes.</td>
-        <td>Off</td>
-    </tr>
-    <tr>
-        <td><code>advanced</code></td>
-        <td>Allows to override Java 1.4 methods for better Java 5 compatibility.</td>
-        <td>Off</td>
-    </tr>
-    <tr>
-        <td><code>verify</code></td>
-        <td>Asks the translator for warnings when references to unknown classes, methods, or fields are found.</td>
-        <td>Off</td>
-    </tr>
-    <tr>
-        <td><code>classpath</code></td>
-        <td>The classpath to use 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.jar</code>.
-        </td>
-        <td>Current classpath</td>
-    </tr>
-    <tr>
-        <td><code>srcmask</code></td>
-        <td>Files to translate (either bytecode or UTF-8 text) , e.g. "<code>*.class;*.tld</code>".
-            Only three special characters are supported: "<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.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>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>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>src</code> elements to specify source directories or JAR files, and nested
-    <code>classpath</code> elements to specify classpath for verification. For example:
-</p>
-<pre>
-    &lt;path id="classpath"&gt;
-        &lt;fileset dir="lib" includes="**/*.jar"/&gt;
-    &lt;/path&gt;
-    &lt;taskdef name="retrotranslator" classpathref="classpath"
-             classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" /&gt;
-    &lt;retrotranslator destdir="build/classes14" verify="true"&gt;
-        &lt;src path="build/classes15"/&gt;
-        &lt;classpath location="${java14_home}/jre/lib/rt.jar"/&gt;
-        &lt;classpath refid="classpath"/&gt;
-    &lt;/retrotranslator&gt;
-</pre>
-<p>
-    For <a href="http://maven.apache.org/">Maven</a> there is a
-    <a href="http://mojo.codehaus.org/retrotranslator-maven-plugin/">Retrotranslator plugin</a>
-    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>
-    To automatically translate and verify classes compiled by <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>
-    you may <a href="http://plugins.intellij.net/plugin/?id=145">download a plugin</a>
-    that generates classes compatible with 1.4 virtual machines from your Java 5 source code.
-</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 Sun, IBM, BEA, and Apple, but does nothing on J2SE 5.0 and other platforms.
-    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>".
-</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 -jar &lt;jarfile&gt; [&lt;args...&gt;]</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:&lt;classpath&gt;
-            net.sf.retrotranslator.transformer.JITRetrotranslator &lt;class&gt; [&lt;args...&gt;]</code>
-    </li>
-    <li>
-        Alternatively you may simply call <code>JITRetrotranslator.install()</code> from some JVM 1.4 compatible class
-        before Java 5 classes are loaded.
-    </li>
-</ul>
-
-<h4><a name="supported">What Java 5 classes and methods are supported?</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>&nbsp;</td></tr>
-    <tr><td><code>java.util.concurrent,<br>java.util.concurrent.atomic,<br>java.util.concurrent.locks</code></td>
-        <td>almost all classes</td><td>almost all methods</td>
-        <td>
-            <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a><br>
-            <code>Condition.awaitNanos(long)</code> method is supported but with
-        <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)">
-        very little</a> accuracy guarantees.
-        </td></tr>
-    <tr><td rowspan="6"><code>java.io</code></td><td><code>Closeable</code></td><td><code>*</code></td><td>
-            <code>new Closeable[...]</code> is replaced with <code>new Object[...]</code>
-        </td></tr>
-    <tr><td><code>Flushable</code></td><td><code>*</code></td><td>
-            <code>new Flushable[...]</code> is replaced with <code>new Object[...]</code>
-        </td></tr>
-    <tr><td><code>PrintStream</code></td><td>
-        <code>append(CharSequence), append(CharSequence, int, int), append(char)</code>
-        </td><td>&nbsp;</td></tr>
-    <tr><td><code>PrintWriter</code></td><td>
-        <code>PrintWriter(File), PrintWriter(File, String), PrintWriter(String), PrintWriter(String, String)</code>
-        </td><td>&nbsp;</td></tr>
-    <tr><td><code>Reader</code></td><td><code>read(CharBuffer)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Writer</code></td><td>
-        <code>append(CharSequence), append(CharSequence, int, int), append(char)</code>
-        </td><td>&nbsp;</td></tr>
-    <tr><td rowspan="24"><code>java.lang</code></td><td><code>Appendable</code></td><td>*
-    </td><td>
-        <code>new Appendable[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>Boolean</code></td><td><code>parseBoolean(String), compareTo(Boolean)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Byte</code></td><td><code>valueOf(byte)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Character</code></td><td><code>valueOf(char)</code></td><td>&nbsp;</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 in advanced mode to better support generics and covariant return types on several JVM implementations.
-    </td></tr>
-    <tr><td><code>Deprecated</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>Double</code></td><td><code>valueOf(double)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Enum</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>Float</code></td><td><code>valueOf(float)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>IllegalArgumentException</code></td><td><code>IllegalArgumentException(String, Throwable),<br>
-        IllegalArgumentException(Throwable)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>IllegalStateException</code></td><td><code>IllegalStateException(String, Throwable),<br>
-        IllegalStateException(Throwable)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Integer</code></td><td><code>valueOf(int)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Iterable</code></td><td>*</td><td>
-        <code>new Iterable[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>Long</code></td><td><code>valueOf(long)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>Package</code></td><td>* (4 new methods)</td><td>&nbsp;</td></tr>
-    <tr><td><code>Readable</code></td><td>*</td><td>
-        <code>new Readable[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>Short</code></td><td><code>valueOf(short)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>String</code></td><td><code>contains(CharSequence),<br> contentEquals(CharSequence),<br>
-        replace(CharSequence, CharSequence)</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>StringBuffer</code></td><td><code>
-        StringBuffer(CharSequence), append(CharSequence), append(CharSequence, int, int),
-        insert(int, CharSequence), insert(int, CharSequence, int, int)
-    </code></td><td>&nbsp;</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>&nbsp;</td></tr>
-    <tr><td><code>System</code></td><td><code>nanoTime(), clearProperty(String)</code></td><td>
-        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a><br>
-        <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(), getId()
-    </code></td><td><code>Thread.getStackTrace()</code> returns non-empty stack trace only for the current thread;<br>
-        <code>Thread.getId()</code> does not reflect the order in which threads are created.</td></tr>
-    <tr><td><code>TypeNotPresentException</code></td><td>*</td><td>&nbsp;</td></tr>
-
-    <tr><td rowspan="12"><code>java.lang.reflect</code></td><td><code>AnnotatedElement</code></td><td>*</td><td>
-        <code>new AnnotatedElement[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>Constructor</code></td><td>* (11 new methods)</td><td>&nbsp;</td></tr>
-    <tr><td><code>Field</code></td><td>* (8 new methods)</td><td>&nbsp;</td></tr>
-    <tr><td><code>GenericArrayType</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>GenericDeclaration</code></td><td>*</td><td>
-        <code>new GenericDeclaration[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>GenericSignatureFormatError</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>MalformedParameterizedTypeException</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>Method</code></td><td>* (14 new methods)</td><td>&nbsp;</td></tr>
-    <tr><td><code>ParameterizedType</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>Type</code></td><td>*</td><td>
-        <code>new Type[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>TypeVariable</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>WildcardType</code></td><td>*</td><td>&nbsp;</td></tr>
-
-    <tr><td ><code>java.math</code></td><td><code>BigDecimal</code></td><td>
-        <code>BigDecimal(int), BigDecimal(long), ZERO, ONE, TEN, divideAndRemainder(BigDecimal),
-            divideToIntegralValue(BigDecimal), pow(int), remainder(BigDecimal), toPlainString(), valueOf(double),
-            valueOf(long)</code></td><td><code>BigDecimal.setScale(int, int)</code> supports negative scales in advanced mode.</td></tr>
-
-    <tr><td ><code>java.rmi.server</code></td><td><code>RemoteObjectInvocationHandler</code></td>
-        <td>*</td><td>&nbsp;</td></tr>
-
-    <tr><td><code>java.util.nio</code></td><td><code>CharBuffer</code></td><td>
-        <code>append(CharSequence), append(CharSequence, int, int), append(char), read(CharBuffer)</code>
-        </td><td>&nbsp;</td></tr>
-
-    <tr><td rowspan="9"><code>java.util</code></td><td><code>AbstractQueue</code></td><td>*</td><td>
-        &nbsp;</td></tr>
-    <tr><td><code>Arrays</code></td><td>* (21 new methods)</td><td>&nbsp;</td></tr>
-    <tr><td><code>Collections</code></td><td>* (13 new methods)</td><td>
-        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a>
-    </td></tr>
-    <tr><td><code>EnumMap</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>EnumSet</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>LinkedList</code></td><td>* (5 new methods)</td><td>&nbsp;</td></tr>
-    <tr><td><code>PriorityQueue</code></td><td>*</td><td>&nbsp;</td></tr>
-    <tr><td><code>Queue</code></td><td>*</td><td>
-        <code>new Queue[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>UUID</code></td><td>*</td><td>&nbsp;</td></tr>
-
-    <tr><td rowspan="3"><code>java.util.regex</code></td><td><code>Matcher</code></td><td>
-        <code>quoteReplacement(String), toMatchResult()</code></td><td>&nbsp;</td></tr>
-    <tr><td><code>MatchResult</code></td><td>*</td><td>
-        <code>new MatchResult[...]</code> is replaced with <code>new Object[...]</code>
-    </td></tr>
-    <tr><td><code>Pattern</code></td><td><code>quote(String)</code></td><td>&nbsp;</td></tr>
-</table>
-
-<h4><a name="extension">How to write an extension for Retrotranslator?</a></h4>
-
-<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
-    <a href="http://cvs.sourceforge.net/viewcvs.py/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> (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
-
-    <a href="http://cvs.sourceforge.net/viewcvs.py/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):
-</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 an 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>
-    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>
-    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/output, 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>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>Access modifiers and constants inlined by a compiler are ignored during the verification.</li>
-    <li>Upcasting may help to translate invocations of inherited methods introduced in Java 5: <br>
-        <code>&nbsp;((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>
-</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>
-</ul>
-
-<h4><a name="contact">Contact</a></h4>
-<ul>
-    <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>
-    <li><a href="http://sourceforge.net/tracker/?group_id=153566&atid=788279">Bugs</a></li>
-    <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, 2006 Taras Puchko
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the names of its
-       contributors may be used to endorse or promote products derived from
-       this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-    THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<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
+                src="http://sflogo.sourceforge.net/sflogo.php?group_id=153566&amp;type=2"
+                width="125" height="37" border="0" alt="SourceForge.net Logo"/></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="#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="#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>.
+
+<h4><a name="features">What Java 5 features are supported?</a></h4>
+<ul>
+    <li>Generics (generic types)</li>
+    <li>Annotations (metadata)</li>
+    <li>Reflection on generics and annotations</li>
+    <li>Typesafe enums (enumerated types)</li>
+    <li>Autoboxing/unboxing</li>
+    <li>Enhanced for loop (for-each loop)</li>
+    <li>Varargs (variable arguments)</li>
+    <li>Covariant return types</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>
+        and unzip the binary distribution file <code>Retrotranslator-<i>n.n.n</i>-bin.zip</code>,
+        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>.
+    </li>
+    <li>
+        Go to the unzipped directory <code>Retrotranslator-<i>n.n.n</i>-bin</code> and execute:<br>
+        <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar -srcdir myclasses</code>
+    </li>
+    <li>
+        If you use Java 5 API put <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and
+        <code>backport-util-concurrent.jar</code> into the classpath of your application.
+    </li>
+    <li>
+        Run or debug the application as usual on any JVM 1.4, preferably JRE 1.4.2.
+    </li>
+</ol>
+
+<p>The full command line syntax:<br>
+    <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar &lt;options&gt;</code>
+    <br>or<br>
+    <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar net.sf.retrotranslator.transformer.Retrotranslator &lt;options&gt;</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>Directory with classes compiled using JDK 5.0 (may be specified several times).</td>
+        <td>-</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-srcjar</code></td>
+        <td>JAR file with classes compiled using JDK 5.0 (may be specified several times).</td>
+        <td>-</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-destdir</code></td>
+        <td>Directory to place classes compatible with J2SE 1.4.</td>
+        <td>Location of sources</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-destjar</code></td>
+        <td>JAR file to place classes compatible with J2SE 1.4.</td>
+        <td>Location of sources</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>-lazy</code></td>
+        <td>Asks the translator to transform only Java 5 classes.</td>
+        <td>Off</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-advanced</code></td>
+        <td>Allows to override Java 1.4 methods for better Java 5 compatibility.</td>
+        <td>Off</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-verify</code></td>
+        <td>Asks the translator for warnings when references to unknown classes, methods, or fields are found.</td>
+        <td>Off</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-classpath</code></td>
+        <td>The classpath to use 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.jar</code>.</td>
+        <td>Current classpath</td>
+    </tr>
+    <tr>
+        <td nowrap><code>-srcmask</code></td>
+        <td>Files to translate (either bytecode or UTF-8 text) , e.g. "<code>*.class;*.tld</code>".
+            Only three special characters are supported: "<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.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><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>
+</table>
+<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:
+</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>
+</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>Directory with classes compiled using JDK 5.0.</td>
+        <td>-</td>
+    </tr>
+    <tr>
+        <td><code>srcjar</code></td>
+        <td>JAR file with classes compiled using JDK 5.0.</td>
+        <td>-</td>
+    </tr>
+    <tr>
+        <td><code>destdir</code></td>
+        <td>Directory to place classes compatible with J2SE 1.4.</td>
+        <td>Location of sources</td>
+    </tr>
+    <tr>
+        <td><code>destjar</code></td>
+        <td>JAR file to place classes compatible with J2SE 1.4.</td>
+        <td>Location of sources</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>lazy</code></td>
+        <td>Asks the translator to transform only Java 5 classes.</td>
+        <td>Off</td>
+    </tr>
+    <tr>
+        <td><code>advanced</code></td>
+        <td>Allows to override Java 1.4 methods for better Java 5 compatibility.</td>
+        <td>Off</td>
+    </tr>
+    <tr>
+        <td><code>verify</code></td>
+        <td>Asks the translator for warnings when references to unknown classes, methods, or fields are found.</td>
+        <td>Off</td>
+    </tr>
+    <tr>
+        <td><code>classpath</code></td>
+        <td>The classpath to use 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.jar</code>.
+        </td>
+        <td>Current classpath</td>
+    </tr>
+    <tr>
+        <td><code>srcmask</code></td>
+        <td>Files to translate (either bytecode or UTF-8 text) , e.g. "<code>*.class;*.tld</code>".
+            Only three special characters are supported: "<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.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>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>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>src</code> elements to specify source directories or JAR files, and nested
+    <code>classpath</code> elements to specify classpath for verification. For example:
+</p>
+<pre>
+    &lt;path id="classpath"&gt;
+        &lt;fileset dir="lib" includes="**/*.jar"/&gt;
+    &lt;/path&gt;
+    &lt;taskdef name="retrotranslator" classpathref="classpath"
+             classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" /&gt;
+    &lt;retrotranslator destdir="build/classes14" verify="true"&gt;
+        &lt;src path="build/classes15"/&gt;
+        &lt;classpath location="${java14_home}/jre/lib/rt.jar"/&gt;
+        &lt;classpath refid="classpath"/&gt;
+    &lt;/retrotranslator&gt;
+</pre>
+<p>
+    For <a href="http://maven.apache.org/">Maven</a> there is a
+    <a href="http://mojo.codehaus.org/retrotranslator-maven-plugin/">Retrotranslator plugin</a>
+    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>
+    To automatically translate and verify classes compiled by <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>
+    you may <a href="http://plugins.intellij.net/plugin/?id=145">download a plugin</a>
+    that generates classes compatible with 1.4 virtual machines from your Java 5 source code.
+</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 Sun, IBM, BEA, and Apple, but does nothing on J2SE 5.0 and other platforms.
+    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>".
+</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 -jar &lt;jarfile&gt; [&lt;args...&gt;]</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:&lt;classpath&gt;
+            net.sf.retrotranslator.transformer.JITRetrotranslator &lt;class&gt; [&lt;args...&gt;]</code>
+    </li>
+    <li>
+        Alternatively you may simply call <code>JITRetrotranslator.install()</code> from some JVM 1.4 compatible class
+        before Java 5 classes are loaded.
+    </li>
+</ul>
+
+<h4><a name="supported">What Java 5 classes and methods are supported?</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>&nbsp;</td></tr>
+    <tr><td><code>java.util.concurrent,<br>java.util.concurrent.atomic,<br>java.util.concurrent.locks</code></td>
+        <td>almost all classes</td><td>almost all methods</td>
+        <td>
+            <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a><br>
+            <code>Condition.awaitNanos(long)</code> method is supported but with
+        <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)">
+        very little</a> accuracy guarantees.
+        </td></tr>
+    <tr><td rowspan="6"><code>java.io</code></td><td><code>Closeable</code></td><td><code>*</code></td><td>
+            <code>new Closeable[...]</code> is replaced with <code>new Object[...]</code>
+        </td></tr>
+    <tr><td><code>Flushable</code></td><td><code>*</code></td><td>
+            <code>new Flushable[...]</code> is replaced with <code>new Object[...]</code>
+        </td></tr>
+    <tr><td><code>PrintStream</code></td><td>
+        <code>append(CharSequence), append(CharSequence, int, int), append(char)</code>
+        </td><td>&nbsp;</td></tr>
+    <tr><td><code>PrintWriter</code></td><td>
+        <code>PrintWriter(File), PrintWriter(File, String), PrintWriter(String), PrintWriter(String, String)</code>
+        </td><td>&nbsp;</td></tr>
+    <tr><td><code>Reader</code></td><td><code>read(CharBuffer)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Writer</code></td><td>
+        <code>append(CharSequence), append(CharSequence, int, int), append(char)</code>
+        </td><td>&nbsp;</td></tr>
+    <tr><td rowspan="24"><code>java.lang</code></td><td><code>Appendable</code></td><td>*
+    </td><td>
+        <code>new Appendable[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>Boolean</code></td><td><code>parseBoolean(String), compareTo(Boolean)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Byte</code></td><td><code>valueOf(byte)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Character</code></td><td><code>valueOf(char)</code></td><td>&nbsp;</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 in advanced mode to better support generics and covariant return types on several JVM implementations.
+    </td></tr>
+    <tr><td><code>Deprecated</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>Double</code></td><td><code>valueOf(double)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Enum</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>Float</code></td><td><code>valueOf(float)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>IllegalArgumentException</code></td><td><code>IllegalArgumentException(String, Throwable),<br>
+        IllegalArgumentException(Throwable)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>IllegalStateException</code></td><td><code>IllegalStateException(String, Throwable),<br>
+        IllegalStateException(Throwable)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Integer</code></td><td><code>valueOf(int)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Iterable</code></td><td>*</td><td>
+        <code>new Iterable[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>Long</code></td><td><code>valueOf(long)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>Package</code></td><td>* (4 new methods)</td><td>&nbsp;</td></tr>
+    <tr><td><code>Readable</code></td><td>*</td><td>
+        <code>new Readable[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>Short</code></td><td><code>valueOf(short)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>String</code></td><td><code>contains(CharSequence),<br> contentEquals(CharSequence),<br>
+        replace(CharSequence, CharSequence)</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>StringBuffer</code></td><td><code>
+        StringBuffer(CharSequence), append(CharSequence), append(CharSequence, int, int),
+        insert(int, CharSequence), insert(int, CharSequence, int, int)
+    </code></td><td>&nbsp;</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>&nbsp;</td></tr>
+    <tr><td><code>System</code></td><td><code>nanoTime(), clearProperty(String)</code></td><td>
+        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a><br>
+        <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(), getId()
+    </code></td><td><code>Thread.getStackTrace()</code> returns non-empty stack trace only for the current thread;<br>
+        <code>Thread.getId()</code> does not reflect the order in which threads are created.</td></tr>
+    <tr><td><code>TypeNotPresentException</code></td><td>*</td><td>&nbsp;</td></tr>
+
+    <tr><td rowspan="12"><code>java.lang.reflect</code></td><td><code>AnnotatedElement</code></td><td>*</td><td>
+        <code>new AnnotatedElement[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>Constructor</code></td><td>* (11 new methods)</td><td>&nbsp;</td></tr>
+    <tr><td><code>Field</code></td><td>* (8 new methods)</td><td>&nbsp;</td></tr>
+    <tr><td><code>GenericArrayType</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>GenericDeclaration</code></td><td>*</td><td>
+        <code>new GenericDeclaration[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>GenericSignatureFormatError</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>MalformedParameterizedTypeException</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>Method</code></td><td>* (14 new methods)</td><td>&nbsp;</td></tr>
+    <tr><td><code>ParameterizedType</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>Type</code></td><td>*</td><td>
+        <code>new Type[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>TypeVariable</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>WildcardType</code></td><td>*</td><td>&nbsp;</td></tr>
+
+    <tr><td ><code>java.math</code></td><td><code>BigDecimal</code></td><td>
+        <code>BigDecimal(int), BigDecimal(long), ZERO, ONE, TEN, divideAndRemainder(BigDecimal),
+            divideToIntegralValue(BigDecimal), pow(int), remainder(BigDecimal), toPlainString(), valueOf(double),
+            valueOf(long)</code></td><td><code>BigDecimal.setScale(int, int)</code> supports negative scales in advanced mode.</td></tr>
+
+    <tr><td ><code>java.rmi.server</code></td><td><code>RemoteObjectInvocationHandler</code></td>
+        <td>*</td><td>&nbsp;</td></tr>
+
+    <tr><td><code>java.util.nio</code></td><td><code>CharBuffer</code></td><td>
+        <code>append(CharSequence), append(CharSequence, int, int), append(char), read(CharBuffer)</code>
+        </td><td>&nbsp;</td></tr>
+
+    <tr><td rowspan="9"><code>java.util</code></td><td><code>AbstractQueue</code></td><td>*</td><td>
+        &nbsp;</td></tr>
+    <tr><td><code>Arrays</code></td><td>* (21 new methods)</td><td>&nbsp;</td></tr>
+    <tr><td><code>Collections</code></td><td>* (13 new methods)</td><td>
+        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a>
+    </td></tr>
+    <tr><td><code>EnumMap</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>EnumSet</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>LinkedList</code></td><td>* (5 new methods)</td><td>&nbsp;</td></tr>
+    <tr><td><code>PriorityQueue</code></td><td>*</td><td>&nbsp;</td></tr>
+    <tr><td><code>Queue</code></td><td>*</td><td>
+        <code>new Queue[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>UUID</code></td><td>*</td><td>&nbsp;</td></tr>
+
+    <tr><td rowspan="3"><code>java.util.regex</code></td><td><code>Matcher</code></td><td>
+        <code>quoteReplacement(String), toMatchResult()</code></td><td>&nbsp;</td></tr>
+    <tr><td><code>MatchResult</code></td><td>*</td><td>
+        <code>new MatchResult[...]</code> is replaced with <code>new Object[...]</code>
+    </td></tr>
+    <tr><td><code>Pattern</code></td><td><code>quote(String)</code></td><td>&nbsp;</td></tr>
+</table>
+
+<h4><a name="extension">How to write an extension for Retrotranslator?</a></h4>
+
+<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
+    <a href="http://cvs.sourceforge.net/viewcvs.py/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> (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
+
+    <a href="http://cvs.sourceforge.net/viewcvs.py/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):
+</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 an 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>
+    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>
+    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/output, 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>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>Access modifiers and constants inlined by a compiler are ignored during the verification.</li>
+    <li>Upcasting may help to translate invocations of inherited methods introduced in Java 5: <br>
+        <code>&nbsp;((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>
+</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>
+</ul>
+
+<h4><a name="contact">Contact</a></h4>
+<ul>
+    <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>
+    <li><a href="http://sourceforge.net/tracker/?group_id=153566&atid=788279">Bugs</a></li>
+    <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, 2006 Taras Puchko
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the names of its
+       contributors may be used to endorse or promote products derived from
+       this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+    THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+</body>
+</html>

Propchange: struts/struts2/trunk/backport/readme.html
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTag.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTag.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTag.java Thu Nov 23 09:31:52 2006
@@ -1,33 +1,33 @@
-/*
- * $Id:  $
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- 
-package org.apache.struts2.annotations.taglib;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Target;
-
-@Target(ElementType.TYPE)
-public @interface StrutsTag {
-  String name();
-  String tldBodyContent();
-  String tldTagClass();
-  String description();
-}
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+package org.apache.struts2.annotations.taglib;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+public @interface StrutsTag {
+  String name();
+  String tldBodyContent();
+  String tldTagClass();
+  String description();
+}

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTag.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTag.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTagAttribute.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTagAttribute.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTagAttribute.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTagAttribute.java Thu Nov 23 09:31:52 2006
@@ -1,35 +1,35 @@
-/*
- * $Id:  $
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- 
-package org.apache.struts2.annotations.taglib;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Target;
-
-@Target(ElementType.METHOD)
-public @interface StrutsTagAttribute {
-  String name() default "";
-  boolean required();
-  boolean rtexprvalue() default true;
-  String description();
-  String defaultValue() default "";
-  String type() default "String";
-}
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+package org.apache.struts2.annotations.taglib;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+public @interface StrutsTagAttribute {
+  String name() default "";
+  boolean required();
+  boolean rtexprvalue() default true;
+  String description();
+  String defaultValue() default "";
+  String type() default "String";
+}

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTagAttribute.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/StrutsTagAttribute.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/apt/TLDAnnotationProcessorFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/apt/TLDAnnotationProcessorFactory.java?view=diff&rev=478625&r1=478624&r2=478625
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/apt/TLDAnnotationProcessorFactory.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/apt/TLDAnnotationProcessorFactory.java Thu Nov 23 09:31:52 2006
@@ -1,76 +1,76 @@
-/*
- * $Id:  $
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- 
-package org.apache.struts2.annotations.taglib.apt;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Set;
-
-import com.sun.mirror.apt.AnnotationProcessor;
-import com.sun.mirror.apt.AnnotationProcessorEnvironment;
-import com.sun.mirror.apt.AnnotationProcessorFactory;
-import com.sun.mirror.apt.AnnotationProcessors;
-import com.sun.mirror.declaration.AnnotationTypeDeclaration;
-
-public class TLDAnnotationProcessorFactory implements AnnotationProcessorFactory {
-
-  /**
-   * Returns a TLD annotation processor.
-   *
-   * @return An annotation processor for note annotations if requested, otherwise, returns the NO_OP
-   *         annotation processor.
-   */
-  public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> declarations,
-      AnnotationProcessorEnvironment env) {
-    AnnotationProcessor result;
-    if (declarations.isEmpty()) {
-      result = AnnotationProcessors.NO_OP;
-    } else {
-      result = new TagAnnotationProcessor(env);
-    }
-    return result;
-  }
-
-  /**
-   * This factory builds a processor for Tag and TagAttribute
-   *
-   * @return a collection containing StutsTag and StrutsTagAttribute
-   */
-  public Collection<String> supportedAnnotationTypes() {
-    return Arrays.asList(TagAnnotationProcessor.TAG, TagAnnotationProcessor.TAG_ATTRIBUTE);
-  }
-
-  /**
-   * Options used to generate the TLD
-   *
-   * @return an empty list.
-   */
-  public Collection<String> supportedOptions() {
-    return Arrays.asList("-AoutFile",
-        "-AtlibVersion",
-        "-AjspVersion",
-        "-AshortName",
-        "-Auri",
-        "-Adescription",
-        "-AdisplayName");
-  }
-}
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+package org.apache.struts2.annotations.taglib.apt;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Set;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessors;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+public class TLDAnnotationProcessorFactory implements AnnotationProcessorFactory {
+
+  /**
+   * Returns a TLD annotation processor.
+   *
+   * @return An annotation processor for note annotations if requested, otherwise, returns the NO_OP
+   *         annotation processor.
+   */
+  public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> declarations,
+      AnnotationProcessorEnvironment env) {
+    AnnotationProcessor result;
+    if (declarations.isEmpty()) {
+      result = AnnotationProcessors.NO_OP;
+    } else {
+      result = new TagAnnotationProcessor(env);
+    }
+    return result;
+  }
+
+  /**
+   * This factory builds a processor for Tag and TagAttribute
+   *
+   * @return a collection containing StutsTag and StrutsTagAttribute
+   */
+  public Collection<String> supportedAnnotationTypes() {
+    return Arrays.asList(TagAnnotationProcessor.TAG, TagAnnotationProcessor.TAG_ATTRIBUTE);
+  }
+
+  /**
+   * Options used to generate the TLD
+   *
+   * @return an empty list.
+   */
+  public Collection<String> supportedOptions() {
+    return Arrays.asList("-AoutFile",
+        "-AtlibVersion",
+        "-AjspVersion",
+        "-AshortName",
+        "-Auri",
+        "-Adescription",
+        "-AdisplayName");
+  }
+}

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/apt/TLDAnnotationProcessorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/annotations/taglib/apt/TLDAnnotationProcessorFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL