Move toolchain/jill projects in toolchain/jack git project

Bug: 22252617
Change-Id: Ie3a094410c5566ac17944a4092fcfe634d765c84
diff --git a/asm4/Android.mk b/asm4/Android.mk
deleted file mode 100644
index f94485c..0000000
--- a/asm4/Android.mk
+++ /dev/null
@@ -1,130 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed 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.
-
-#
-# asm
-#
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-# Excludes
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/attrs%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/commons%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/optimizer%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/tree%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/util%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/xml%,,$(LOCAL_SRC_FILES))
-
-LOCAL_MODULE := asm-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-analysis
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/tree/analysis)
-
-LOCAL_MODULE := asm-analysis-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-tree-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-commons
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/commons)
-
-LOCAL_MODULE := asm-commons-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-tree-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-tree
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/tree)
-# Excludes
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/tree/analysis%,, $(LOCAL_SRC_FILES))
-
-LOCAL_MODULE := asm-tree-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-util
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/util)
-
-LOCAL_MODULE := asm-util-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-analysis-4.1-jack asm-tree-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-xml
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/xml)
-
-LOCAL_MODULE := asm-xml-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-util-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-all
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-# Excludes
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/attrs%,, $(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/optimizer%,, $(LOCAL_SRC_FILES))
-
-LOCAL_MODULE := asm-all-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-
diff --git a/asm4/LICENSE.txt b/asm4/LICENSE.txt
deleted file mode 100644
index 4d19185..0000000
--- a/asm4/LICENSE.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-
- ASM: a very small and fast Java bytecode manipulation framework
- Copyright (c) 2000-2011 INRIA, France Telecom
- 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.
diff --git a/asm4/NOTICE b/asm4/NOTICE
deleted file mode 100644
index d0cd82d..0000000
--- a/asm4/NOTICE
+++ /dev/null
@@ -1,28 +0,0 @@
-
- ASM: a very small and fast Java bytecode manipulation framework
- Copyright (c) 2000-2005 INRIA, France Telecom
- 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.
diff --git a/asm4/README.android b/asm4/README.android
deleted file mode 100644
index b0614bb..0000000
--- a/asm4/README.android
+++ /dev/null
@@ -1,6 +0,0 @@
-URL: http://asm.ow2.org/
-Version: 4.1
-License: BSD
-Description: "ASM is an all purpose Java bytecode manipulation and analysis framework."
-
-Direct link: svn://svn.forge.objectweb.org/svnroot/asm/tags/ASM_4_1
diff --git a/asm4/README.txt b/asm4/README.txt
deleted file mode 100644
index b4c0a05..0000000
--- a/asm4/README.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory is the base directory of the product.
-It contains(*) the following items:
-
-- archive: ant files to build the jar(s) of the product,
-- build.properties: properties to configure the build process,
-- build.xml: main ant file to build the product,
-- config: external libraries required only for building the product,
-- doc: documentation of the product,
-- etc: scripts to run the product,
-- examples: examples of use of the product,
-- externals: external libraires required for running the product,
-- jdoc: ant files to build the javadoc documentation(s) of the product,
-- sr': sources of the product,
-- test: tests of the product,
-- web: source of the web site of the product.
-
-(*) some items may not be present, depending on the product.
-
diff --git a/asm4/archive/README.txt b/asm4/archive/README.txt
deleted file mode 100644
index 35155ac..0000000
--- a/asm4/archive/README.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory contains ant files to build the jars of the product.
-The following rules describe the convention to write such files:
-
-- An ant file must build only one jar file.
-
-- The name of the ant file must be the name of the jar it builds:
-  org-foo-bar.xml must build org-foo-bar.jar.
-
-- Among the elements which are included into a jar, you must specify
-  a manifest. It is adviced to store the manifest file in this directory.
-  The manifest file can be shared by several jars. The name of the manifest
-  file must be similar to the name of the jar file.
-
-- Only the default task is called on each ant file.
-
-- The jar file must be produced into the ${dist.lib} directory.
-
-Sample ant file:
-
-<project name="foo" default="dist">
-  <target name="dist">
-    <jar jarfile="${out.dist.lib}/foo.jar"
-         basedir="${out.build}"
-         manifest="${archive}/foo.mf">
-         
-      ...
-      
-    </jar>
-  </target>
-</project>
diff --git a/asm4/archive/asm-all.bnd b/asm4/archive/asm-all.bnd
deleted file mode 100644
index b654794..0000000
--- a/asm4/archive/asm-all.bnd
+++ /dev/null
@@ -1,60 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM all classes
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM all classes with debug info
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.all
-
-Export-Package: \
-  !org.objectweb.asm.optimizer.*,\
-  org.objectweb.asm.*;version=${product.artifact}
-
-Import-Package: \
-  javax.xml.transform.*;resolution:="optional",\
-  org.xml.sax.*;resolution:="optional"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-all.pom b/asm4/archive/asm-all.pom
deleted file mode 100644
index d4f123b..0000000
--- a/asm4/archive/asm-all.pom
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.ow2.asm</groupId>
-    <artifactId>asm-parent</artifactId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM All</name>
-  <groupId>org.ow2.asm</groupId>
-  <artifactId>asm-all</artifactId>
-  <packaging>jar</packaging>
-  
-</project>
diff --git a/asm4/archive/asm-all.xml b/asm4/archive/asm-all.xml
deleted file mode 100644
index 3d82865..0000000
--- a/asm4/archive/asm-all.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-all" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-all.bnd"
-            output="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-all.pom" toFile="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-
-    <echo file="${out.dist.lib}/all/README.txt">It is highly recommended to use only the necessary ASM jars for your
-application instead of using the asm-all jar, unless you really need
-all ASM packages.</echo>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/all/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/asm4/archive/asm-analysis.bnd b/asm4/archive/asm-analysis.bnd
deleted file mode 100644
index a05c03b..0000000
--- a/asm4/archive/asm-analysis.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM static code analysis framework
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM static code analysis framework
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.analysis
-
-Export-Package: \
-  org.objectweb.asm.tree.analysis;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-analysis.pom b/asm4/archive/asm-analysis.pom
deleted file mode 100644
index 47273a1..0000000
--- a/asm4/archive/asm-analysis.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Analysis</name>
-  <artifactId>asm-analysis</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-tree</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-analysis.xml b/asm4/archive/asm-analysis.xml
deleted file mode 100644
index c3ecd65..0000000
--- a/asm4/archive/asm-analysis.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-analysis" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-analysis.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-analysis.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-commons.bnd b/asm4/archive/asm-commons.bnd
deleted file mode 100644
index fde93b2..0000000
--- a/asm4/archive/asm-commons.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM commons classes
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM commons classes
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.commons
-
-Export-Package: \
-  org.objectweb.asm.commons;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-commons.pom b/asm4/archive/asm-commons.pom
deleted file mode 100644
index eaccb73..0000000
--- a/asm4/archive/asm-commons.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Commons</name>
-  <artifactId>asm-commons</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-tree</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-commons.xml b/asm4/archive/asm-commons.xml
deleted file mode 100644
index 95129a7..0000000
--- a/asm4/archive/asm-commons.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-commons" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-commons.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-commons.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-debug-all.bnd b/asm4/archive/asm-debug-all.bnd
deleted file mode 100644
index 194e6a1..0000000
--- a/asm4/archive/asm-debug-all.bnd
+++ /dev/null
@@ -1,60 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM all classes with debug info
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM all classes with debug info
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.all.debug
-
-Export-Package: \
-  !org.objectweb.asm.optimizer.*,\
-  org.objectweb.asm.*;version=${product.artifact}
-
-Import-Package: \
-  javax.xml.transform.*;resolution:="optional",\
-  org.xml.sax.*;resolution:="optional"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-debug-all.pom b/asm4/archive/asm-debug-all.pom
deleted file mode 100644
index ad88584..0000000
--- a/asm4/archive/asm-debug-all.pom
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.ow2.asm</groupId>
-    <artifactId>asm-parent</artifactId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Debug All</name>
-  <groupId>org.ow2.asm</groupId>
-  <artifactId>asm-debug-all</artifactId>
-  <packaging>jar</packaging>
-  
-</project>
diff --git a/asm4/archive/asm-debug-all.xml b/asm4/archive/asm-debug-all.xml
deleted file mode 100644
index 865e5e5..0000000
--- a/asm4/archive/asm-debug-all.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-debug-all" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-      classpath="${out.build}/tmp"
-      eclipse="true"
-      failok="false"
-      exceptions="true"
-      files="archive/asm-debug-all.bnd"
-      output="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-debug-all.pom" toFile="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-
-    <echo file="${out.dist.lib}/all/README.txt">It is highly recommended to use only the necessary ASM jars for your
-application instead of using the asm-all jar, unless you really need
-all ASM packages.</echo>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/all/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/asm4/archive/asm-parent.pom b/asm4/archive/asm-parent.pom
deleted file mode 100644
index 0f30c8e..0000000
--- a/asm4/archive/asm-parent.pom
+++ /dev/null
@@ -1,163 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
-                        http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <parent>
-    <artifactId>ow2</artifactId>
-    <groupId>org.ow2</groupId>
-    <version>1.3</version>
-  </parent>
- 
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>asm-parent</artifactId>
-  <groupId>org.ow2.asm</groupId>
-  <version>@product.artifact@</version>
-  <packaging>pom</packaging>
-
-  <name>ASM</name>
-  <description>A very small and fast Java bytecode manipulation framework</description>
-  <url>http://asm.objectweb.org/</url>
-  
-  <organization>
-    <name>ObjectWeb</name>
-    <url>http://www.objectweb.org/</url>
-  </organization>
-  <inceptionYear>2000</inceptionYear>
-  
-  <licenses>
-    <license>
-      <name>BSD</name>
-      <url>http://asm.objectweb.org/license.html</url>
-    </license>
-  </licenses>
-
-  <developers>
-    <developer>
-      <name>Eric Bruneton</name>
-      <id>ebruneton</id>
-      <email>ebruneton@free.fr</email>
-      <roles>
-        <role>Creator</role>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-    <developer>
-      <name>Eugene Kuleshov</name>
-      <id>eu</id>
-      <email>eu@javatx.org</email>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-    <developer>
-      <name>Remi Forax</name>
-      <id>forax</id>
-      <email>forax@univ-mlv.fr</email>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <scm>
-    <connection>scm:svn:svn://svn.forge.objectweb.org/svnroot/asm/trunk</connection>
-    <developerConnection>scm:svn:svn+ssh://${maven.username}@svn.forge.objectweb.org/svnroot/asm/trunk</developerConnection>
-    <url>http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/asm/trunk/</url>
-  </scm>
-  
-  <issueManagement>
-    <url>http://forge.objectweb.org/tracker/?group_id=23</url>
-  </issueManagement>
-
-  <dependencyManagement>
-    <dependencies>
-
-      <dependency>
-        <artifactId>asm</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-tree</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-analysis</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-commons</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-util</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-xml</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-    </dependencies>
-  </dependencyManagement>
-
-  <mailingLists>
-    <mailingList>
-      <name>ASM Users List</name>
-      <subscribe>sympa@objectweb.org?subject=subscribe%20asm</subscribe>
-      <unsubscribe>sympa@objectweb.org?subject=unsubscribe%20asm</unsubscribe>
-      <post>asm@objectweb.org</post>
-      <archive>http://www.objectweb.org/wws/arc/asm</archive>
-    </mailingList>
-    <mailingList>
-      <name>ASM Team List</name>
-      <subscribe>sympa@objectweb.org?subject=subscribe%20asm-team</subscribe>
-      <unsubscribe>sympa@objectweb.org?subject=unsubscribe%20asm-team</unsubscribe>
-      <post>asm-team@objectweb.org</post>
-      <archive>http://www.objectweb.org/wws/arc/asm-team</archive>
-    </mailingList>
-  </mailingLists>
-
-</project>
diff --git a/asm4/archive/asm-parent.xml b/asm4/archive/asm-parent.xml
deleted file mode 100644
index 11381f7..0000000
--- a/asm4/archive/asm-parent.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-parent" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <copy file="${archive}/asm-parent.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-tree.bnd b/asm4/archive/asm-tree.bnd
deleted file mode 100644
index d869914..0000000
--- a/asm4/archive/asm-tree.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM Tree class visitor
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM Tree class visitor
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.tree
-
-Export-Package: \
-  org.objectweb.asm.tree;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-tree.pom b/asm4/archive/asm-tree.pom
deleted file mode 100644
index 624120b..0000000
--- a/asm4/archive/asm-tree.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Tree</name>
-  <artifactId>asm-tree</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-tree.xml b/asm4/archive/asm-tree.xml
deleted file mode 100644
index 527a9ef..0000000
--- a/asm4/archive/asm-tree.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-tree" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-tree.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-tree.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-util.bnd b/asm4/archive/asm-util.bnd
deleted file mode 100644
index dfc4c99..0000000
--- a/asm4/archive/asm-util.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM Utilities
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM Utilities
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.util
-
-Export-Package: \
-  org.objectweb.asm.util;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-util.pom b/asm4/archive/asm-util.pom
deleted file mode 100644
index 065ddd8..0000000
--- a/asm4/archive/asm-util.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Util</name>
-  <artifactId>asm-util</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-tree</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-util.xml b/asm4/archive/asm-util.xml
deleted file mode 100644
index b20b783..0000000
--- a/asm4/archive/asm-util.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-util" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-util.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-util.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-xml.bnd b/asm4/archive/asm-xml.bnd
deleted file mode 100644
index 03e7439..0000000
--- a/asm4/archive/asm-xml.bnd
+++ /dev/null
@@ -1,61 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM XML classes
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: Eugene Kuleshov
-Class-Path: asm-${product.artifact}.jar asm-util-${product.artifact}.jar asm-attrs-${product.artifact}.jar
-Main-Class: org.objectweb.asm.xml.Processor
-
-Bundle-Name: ASM xml classes
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.xml
-
-Export-Package: \
-  org.objectweb.asm.xml;version=${product.artifact}
-
-Import-Package: \
-  javax.xml.transform.*;resolution:="optional",\
-  org.xml.sax.*;resolution:="optional"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-xml.pom b/asm4/archive/asm-xml.pom
deleted file mode 100644
index a95e658..0000000
--- a/asm4/archive/asm-xml.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM XML</name>
-  <artifactId>asm-xml</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-util</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-xml.xml b/asm4/archive/asm-xml.xml
deleted file mode 100644
index c7a123d..0000000
--- a/asm4/archive/asm-xml.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm-xml" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-xml.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-xml.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm.bnd b/asm4/archive/asm.bnd
deleted file mode 100644
index d9abde8..0000000
--- a/asm4/archive/asm.bnd
+++ /dev/null
@@ -1,56 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-
-Implementation-Title:  ASM
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm
-
-Export-Package: \
-  org.objectweb.asm;version=${product.artifact}, \
-  org.objectweb.asm.signature;version=${product.artifact}
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm.pom b/asm4/archive/asm.pom
deleted file mode 100644
index 2f57353..0000000
--- a/asm4/archive/asm.pom
+++ /dev/null
@@ -1,44 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Core</name>
-  <artifactId>asm</artifactId>
-  <packaging>jar</packaging>
-  
-</project>
diff --git a/asm4/archive/asm.xml b/asm4/archive/asm.xml
deleted file mode 100644
index 47e7b9e..0000000
--- a/asm4/archive/asm.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/build.properties b/asm4/build.properties
deleted file mode 100644
index 6aade18..0000000
--- a/asm4/build.properties
+++ /dev/null
@@ -1,126 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# Some information about the product
-
-product.name    asm
-product.version 4.1
-# product.snapshot yes
-
-plugin.version 3.3.0
-
-
-###############################################################################
-# BUILD
-###############################################################################
-
-# Wich compiler do you want to use ?
-# jikes is faster than javac but keeps line numbers in compiled classes, even
-# with the -O option (javac removes line numbers and local variable names with
-# this option, resulting in smaller classes)
-
-build.compiler modern
-
-# Build class path (classes needed to build the project)
-# Class path for the ObjectWeb utility Ant tasks (version 1.3.2 or higher)
-# See http://forge.objectweb.org/projects/monolog
-
-# objectweb.ant.tasks.path ow_util_ant_tasks.jar
-
-###############################################################################
-# TESTS (PERFORMANCE COMPARISONS WITH BCEL AND SERP)
-###############################################################################
-
-# Class path for the BCEL library (version 5.2)
-# See http://jakarta.apache.org/bcel
-
-# bcel.path bcel.jar
-
-# Class path for the AspectJ library that contains the modified BCEL version 
-# (version 1.5) See http://www.eclipse.org/aspectj
-
-# aspectj.path aspectjweaver.jar
-
-# Class path for the SERP library (version 1.14.2)
-# See http://serp.sourceforge.net
-
-# serp.path serp.jar
-
-# Class path for the Javassist library (version 3.6.GA)
-# See http://www.csg.is.titech.ac.jp/~chiba/javassist
-
-# javassist.path javassist.jar
-
-# Class path for the Janino compiler (version 2.5.11)
-# See http://www.janino.net/
-
-# janino.path janino.jar
-
-# Class paths for Cobertura (version 1.9)
-
-# corbertura.path cobertura.jar
-# cobertura.runtime.path cobertura.jar
-
-# Class paths for Kawa (version 1.9.1)
-
-# kawa.runtime.path kawa.jar
-
-# Class paths for CSG Bytecode
-
-# csg-bytecode.runtime.path csg-bytecode.jar
-
-# Class paths for Cojen (version 2.0)
-
-# cojen.runtime.path cojen.jar
-
-# Class paths for JBET (version 3-R1)
-
-# jbet.runtime.path jbet.jar
-
-# Class paths for JClassLib
-
-# jclasslib.runtime.path jclasslib.jar
-
-# Class paths for Jiapi
-
-# jiapi.runtime.path jiapi.jar
-
-# Class paths for mozilla.classfile (version 1_7R1)
-
-# rhino.runtime.path rhino.jar
-
-###############################################################################
-# DOCUMENTATION
-###############################################################################
-
-# URLs of external Javadocs (JDK)
-
-jdk.url     http://java.sun.com/j2se/1.4.2/docs/api
-
diff --git a/asm4/build.xml b/asm4/build.xml
deleted file mode 100644
index 3e8b729..0000000
--- a/asm4/build.xml
+++ /dev/null
@@ -1,715 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="ASM" default="compile" xmlns:m2="urn:maven-artifact-ant">
-
-	<!-- ==================================== -->
-	<!-- ======== PROPERTY DEFINITION ======= -->
-	<!-- ==================================== -->
-
-	<property file="${user.home}/asm-build.properties" />
-	<property file="build.config" />
-	<property file="build.properties" />
-
-	<property name="src" value="${basedir}/src" />
-	<property name="test" value="${basedir}/test" />
-	<property name="doc" value="${basedir}/doc" />
-	<property name="jdoc" value="${basedir}/jdoc" />
-	<property name="web" value="${basedir}/web" />
-	<property name="examples" value="${basedir}/examples" />
-	<property name="examples.common" value="${examples}/common" />
-	<property name="config" value="${basedir}/config" />
-	<property name="archive" value="${basedir}/archive" />
-
-	<property name="out" value="${basedir}/output" />
-	<property name="out.build" value="${out}/build" />
-	<property name="out.instr" value="${out}/instr" />
-	<property name="out.dist" value="${out}/dist" />
-	<property name="out.dist.lib" value="${out.dist}/lib" />
-	<property name="out.dist.doc" value="${out.dist}/doc" />
-	<property name="out.dist.jdoc" value="${out.dist.doc}/javadoc" />
-	<property name="out.dist.examples" value="${out.dist}/examples" />
-	<property name="out.dist.externals" value="${out.dist}/externals" />
-	<property name="out.test" value="${out}/test" />
-	<property name="out.tmp" value="${out}/tmp" />
-	<property name="out.zip" value="${out}/zip" />
-
-	<property name="maven-staging-repository-id" value="ow2.release" />
-	<property name="maven-staging-repository-url" value="http://repository.ow2.org/nexus/service/local/staging/deploy/maven2" />
-
-	<target name="properties">
-		<condition property="examples.exist">
-			<available file="${examples}" />
-		</condition>
-
-		<condition property="web.exist">
-			<available file="${web}/build.xml" />
-		</condition>
-
-		<condition property="paths.configured">
-			<and>
-				<isset property="objectweb.ant.tasks.path" />
-			</and>
-		</condition>
-
-		<condition property="passphrase.configured">
-			<and>
-				<isset property="passphrase" />
-			</and>
-		</condition>
-
-		<condition property="product.shrink">
-			<not>
-				<isset property="product.noshrink" />
-			</not>
-		</condition>
-
-		<condition property="SIGV" value="false" else="true">
-			<isset property="nosignatures" />
-		</condition>
-		<condition property="SIG" value="-signatures" else="">
-			<isset property="nosignatures" />
-		</condition>
-		<condition property="ANNV" value="false" else="true">
-			<isset property="noannotations" />
-		</condition>
-		<condition property="ANN" value="-annotations" else="">
-			<isset property="noannotations" />
-		</condition>
-		<condition property="FRAMESV" value="false" else="true">
-			<isset property="noframes" />
-		</condition>
-		<condition property="FRAMES" value="-frames" else="">
-			<isset property="noframes" />
-		</condition>
-		<condition property="WRITERV" value="false" else="true">
-			<isset property="nowriter" />
-		</condition>
-		<condition property="WRITER" value="-writer" else="">
-			<isset property="nowriter" />
-		</condition>
-		<condition property="RESIZEV" value="false" else="true">
-			<isset property="noresize" />
-		</condition>
-		<condition property="RESIZE" value="-resize" else="">
-			<isset property="noresize" />
-		</condition>
-	</target>
-
-	<!-- ================================== -->
-	<!-- ========  INITIALIZATION   ======= -->
-	<!-- ================================== -->
-
-	<target name="check" unless="paths.configured">
-		<echo message="The 'build.properties' file must be configured" />
-		<fail />
-	</target>
-
-	<target name="init" depends="properties,check">
-
-		<path id="classpath">
-			<pathelement location="${out.build}" />
-		</path>
-
-		<path id="cobertura.classpath">
-			<pathelement path="${cobertura.path}" />
-		</path>
-
-		<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
-
-		<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant">
-			<classpath>
-				<pathelement location="test/lib/maven-ant-tasks-2.1.3.jar" />
-			</classpath>
-		</typedef>
-
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========    COMPILE    ========== -->
-	<!-- =================================== -->
-
-	<target name="compile-init">
-		<mkdir dir="${out.build}/tmp" />
-		<condition property="config.uptodate">
-			<uptodate srcfile="${src}/org/objectweb/asm/ClassReader.java" targetfile="${out.build}/tmp/org/objectweb/asm/ClassReader.java" />
-		</condition>
-		<copy todir="${out.build}/tmp">
-			<fileset dir="${src}">
-				<include name="**/*" />
-			</fileset>
-		</copy>
-	</target>
-
-	<target name="compile-config" unless="config.uptodate">
-		<replace dir="${out.build}/tmp">
-			<include name="**/ClassReader.java" />
-			<replacefilter token="SIGNATURES = true" value="SIGNATURES = ${SIGV}" />
-			<replacefilter token="ANNOTATIONS = true" value="ANNOTATIONS = ${ANNV}" />
-			<replacefilter token="FRAMES = true" value="FRAMES = ${FRAMESV}" />
-			<replacefilter token="WRITER = true" value="WRITER = ${SIGV}" />
-			<replacefilter token="RESIZE = true" value="RESIZE = ${RESIZEV}" />
-		</replace>
-	</target>
-
-	<target name="compile-debug" depends="init,compile-init,compile-config">
-		<javac destdir="${out.build}/tmp" debug="on" source="1.5" target="1.5">
-			<classpath>
-				<pathelement location="${out.build}/tmp" />
-			</classpath>
-			<src path="${out.build}/tmp" />
-			<include name="**/*.java" />
-		</javac>
-	</target>
-
-	<target name="shrink" depends="compile-debug" if="product.shrink">
-		<echo message="Shrinking" />
-		<java classname="org.objectweb.asm.optimizer.Shrinker">
-			<classpath>
-				<pathelement location="${out.build}/tmp" />
-			</classpath>
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${SIG}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${ANN}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${FRAMES}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${WRITER}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${RESIZE}.properties" />
-			<arg value="${out.build}/tmp" />
-			<arg value="${out.build}" />
-		</java>
-	</target>
-
-	<target name="noshrink" depends="compile-debug" if="product.noshrink">
-		<copy todir="${out.build}">
-			<fileset dir="${out.build}/tmp" />
-		</copy>
-	</target>
-
-	<target name="compile" depends="compile-debug,shrink,noshrink" />
-
-	<!-- =================================== -->
-	<!-- ==========      TEST     ========== -->
-	<!-- =================================== -->
-
-	<target name="test" depends="compile">
-		<condition property="asm.test" value="${java.home}/lib/rt.jar,${out.test}/cases">
-			<not>
-				<isset property="asm.test" />
-			</not>
-		</condition>
-		<ant antfile="${test}/build.xml" target="test" inheritRefs="true" />
-	</target>
-
-	<target name="test.report">
-		<junitreport todir="${out.test}/reports">
-			<fileset dir="${out.test}/reports">
-				<include name="TEST-*.xml" />
-			</fileset>
-			<report todir="${out.test}/reports" />
-		</junitreport>
-	</target>
-
-	<target name="coverage" depends="compile">
-		<delete file="cobertura.ser" />
-		<delete dir="${out.instr}" />
-		<cobertura-instrument todir="${out.instr}">
-			<ignore regex="java.lang.Error" />
-			<fileset dir="${out.build}/tmp">
-				<include name="**/*.class" />
-				<exclude name="**/optimizer/*.class" />
-				<exclude name="**/xml/Processor*.class" />
-				<exclude name="**/*Test*.class" />
-			</fileset>
-		</cobertura-instrument>
-		<copy todir="${out.instr}" preservelastmodified="yes">
-			<fileset dir="${out.build}/tmp" />
-		</copy>
-		<property name="coverage" value="yes" />
-		<property name="classes" value="${out.instr}" />
-		<property name="asm.test.class" value="pkg" />
-		<condition property="asm.test" value="${out.test}/cases">
-			<not>
-				<isset property="asm.test" />
-			</not>
-		</condition>
-		<condition property="test.type" value="conform">
-			<not>
-				<isset property="test.type" />
-			</not>
-		</condition>
-		<ant antfile="${test}/build.xml" target="test" inheritRefs="true" />
-	</target>
-
-	<target name="coverage.check" depends="init">
-		<cobertura-check branchrate="100" linerate="100">
-		</cobertura-check>
-	</target>
-
-	<target name="coverage.report" depends="init">
-		<cobertura-report destdir="${out}/coverage" srcdir="${src}" format="xml" />
-		<cobertura-report destdir="${out}/coverage">
-			<fileset dir="${src}">
-				<include name="**/*.java" />
-				<exclude name="**/asm/optimizer/**/*.java" />
-			</fileset>
-		</cobertura-report>
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========      DIST     ========== -->
-	<!-- =================================== -->
-
-	<target name="dist.init">
-		<mkdir dir="${out.dist}" />
-		<mkdir dir="${out.dist.doc}" />
-		<mkdir dir="${out.dist.jdoc}" />
-		<mkdir dir="${out.dist.lib}" />
-	</target>
-
-	<target name="dist.version">
-		<tstamp>
-			<format property="product.build.time" pattern="yyyyMMdd.HHmmss" />
-		</tstamp>
-
-		<condition property="product.artifact" value="${product.version}">
-			<not>
-				<isset property="product.snapshot" />
-			</not>
-		</condition>
-		<condition property="product.artifact" value="${product.build.time}">
-			<isset property="product.snapshot" />
-		</condition>
-
-		<condition property="plugin.artifact" value="${plugin.version}">
-			<not>
-				<isset property="product.snapshot" />
-			</not>
-		</condition>
-		<condition property="plugin.artifact" value="${plugin.version}.${product.build.time}">
-			<isset property="product.snapshot" />
-		</condition>
-	</target>
-
-	<target name="jar" depends="dist.init,dist.version,compile,shrink">
-		<ant antfile="${archive}/asm.xml" />
-		<ant antfile="${archive}/asm-all.xml" />
-		<ant antfile="${archive}/asm-analysis.xml" />
-		<ant antfile="${archive}/asm-commons.xml" />
-		<ant antfile="${archive}/asm-debug-all.xml" />
-		<ant antfile="${archive}/asm-parent.xml" />
-		<ant antfile="${archive}/asm-tree.xml" />
-		<ant antfile="${archive}/asm-util.xml" />
-		<ant antfile="${archive}/asm-xml.xml" />
-		<java classname="org.objectweb.asm.optimizer.JarOptimizer">
-			<classpath>
-				<pathelement location="${out.build}" />
-			</classpath>
-			<!--arg value="${src}/org/objectweb/asm/optimizer/jdk1.2.2_017.txt.gz"/-->
-			<arg value="${src}/org/objectweb/asm/optimizer/jdk1.3.1_19.txt.gz" />
-			<arg value="-nodebug" />
-			<arg value="${out.dist.lib}" />
-		</java>
-	</target>
-
-	<target name="jdoc" depends="init,dist.init">
-		<copy todir="${out.dist.doc}" preservelastmodified="yes" includeEmptyDirs="false">
-			<fileset dir="${doc}">
-				<include name="**/*" />
-				<exclude name="**/*.fig" />
-			</fileset>
-		</copy>
-		<ant antfile="${jdoc}/user.xml" />
-	</target>
-
-	<target name="examples" depends="init,dist.init" if="examples.exist">
-		<mkdir dir="${out.dist.examples}" />
-		<copy todir="${out.dist.examples}" preservelastmodified="yes" includeEmptyDirs="yes">
-			<fileset dir="${examples}">
-				<exclude name="common" />
-				<exclude name="common/**/*" />
-			</fileset>
-		</copy>
-
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/adapt" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/analysis" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/annotations" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/attributes" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/compile" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/compile-indy" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/dependencies" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/helloworld" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/jasmin" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/jbfc" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/xml" preservelastmodified="yes" />
-
-		<copy toDir="${out.dist.examples}" preservelastmodified="yes">
-			<fileset dir="${examples.common}">
-				<include name="**/*" />
-				<exclude name="build.xml" />
-			</fileset>
-		</copy>
-		<replace dir="${out.dist.examples}/etc" token="@product.version@" value="${product.version}" />
-
-		<copy todir="${out.dist}">
-			<fileset dir=".">
-				<include name="externals/*.jar" />
-			</fileset>
-		</copy>
-	</target>
-
-	<!--
-  <target name="eclipse.generate" depends="dist.version">  	
-  </target>
-
-  <target name="eclipse.plugin" depends="jar,eclipse.generate">
-    <jar zipfile="${out}/org.objectweb.asm_${plugin.artifact}.jar">
-      <zipfileset dir="${basedir}">
-        <include name="plugin.xml"/>
-        <include name="META-INF/MANIFEST.MF"/>      	
-        <include name="**/asm-${product.artifact}.jar"/>
-        <include name="**/asm-tree-${product.artifact}.jar"/>
-        <include name="**/asm-analysis-${product.artifact}.jar"/>
-        <include name="**/asm-util-${product.artifact}.jar"/>
-        <include name="**/asm-commons-${product.artifact}.jar"/>
-        <include name="**/asm-attrs-${product.artifact}.jar"/>
-      </zipfileset>
-      <manifest>
-        <attribute name="Bundle-ManifestVersion" value="2"/>
-        <attribute name="Bundle-Name" value="ASM Framework"/>
-        <attribute name="Bundle-SymbolicName" value="org.objectweb.asm;singleton:=true"/>
-        <attribute name="Bundle-Version" value="${plugin.artifact}"/>
-        <attribute name="Bundle-ClassPath" value="output/dist/lib/asm-${product.artifact}.jar,
-output/dist/lib/asm-tree-${product.artifact}.jar,
-output/dist/lib/asm-analysis-${product.artifact}.jar,
-output/dist/lib/asm-commons-${product.artifact}.jar,
-output/dist/lib/asm-attrs-${product.artifact}.jar,
-output/dist/lib/asm-util-${product.artifact}.jar"/>
-        <attribute name="Bundle-Vendor" value="ObjectWeb.org"/>
-        <attribute name="Bundle-Localization" value="plugin"/>
-        <attribute name="Export-Package" value="org.objectweb.asm,
-org.objectweb.asm.attrs,
-org.objectweb.asm.commons,
-org.objectweb.asm.signature,
-org.objectweb.asm.tree,
-org.objectweb.asm.tree.analysis,
-org.objectweb.asm.util,
-org.objectweb.asm.xml"/>
-        <attribute name="Eclipse-AutoStart" value="true"/>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="eclipse.feature" depends="eclipse.plugin">
-    <echo file="${out}/feature.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<feature id="org.objectweb.asm.feature" label="ASM Framework"
-      version="${plugin.artifact}" provider-name="ObjectWeb.org">
-
-   <description url="http://asm.objectweb.org/eclipse/asm/index.html">
-Feature contains ASM Java bytecode manipulation framework runtime.
-   </description>
-
-   <copyright>
-Copyright (c) 2000-2011 INRIA, France Telecom.
-All rights reserved.
-   </copyright>
-
-   <license>
-Copyright (c) 2000-2011 INRIA, France Telecom
-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.
-   </license>
-
-   <url>
-      <update label="ASM Framework" url="http://download.forge.objectweb.org/eclipse-update/site.xml"/>
-   </url>
-
-   <plugin id="org.objectweb.asm" download-size="0" install-size="0" version="${plugin.artifact}"/>
-
-</feature>]]></echo>
-
-    <jar jarfile="${out}/org.objectweb.asm.feature_${plugin.artifact}.jar">
-      <fileset file="${out}/feature.xml"/>
-    </jar>
-  </target>
-  
-  <target name="eclipse.site" depends="eclipse.feature">
-    <echo file="${out}/site.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<site>
-   <description url="http://asm.objectweb.org/eclipse/asm/index.html">
-      ASM Framework
-   </description>
-   
-   <feature url="features/org.objectweb.asm.feature_${plugin.artifact}.jar" id="org.objectweb.asm.feature" version="${plugin.artifact}">
-      <category name="asm"/>
-   </feature>
-
-   <category-def name="asm" label="ASM Framework"/>
-      
-   <archive path="plugins/org.objectweb.asm_${plugin.artifact}.jar" url="http://download.forge.objectweb.org/asm/org.objectweb.asm_${plugin.artifact}.jar"/>
-</site>]]></echo>
-    
-    <zip zipfile="${out}/org.objectweb.asm.update_${plugin.artifact}.zip">
-      <zipfileset dir="${out}" includes="site.xml"/>
-      <zipfileset dir="${out}" includes="org.objectweb.asm.feature_${plugin.artifact}.jar" prefix="features"/>
-      <zipfileset dir="${out}" includes="org.objectweb.asm_${plugin.artifact}.jar"  prefix="plugins"/>
-    </zip>
-  </target>
-  -->
-
-	<target name="dist" depends="jar,sigtest,jdoc,examples">
-		<zip zipFile="${out.dist}/src.zip" basedir="${src}" excludes="**/optimizer/**/*" />
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========    EXAMPLES   ========== -->
-	<!-- =================================== -->
-
-	<target name="example" depends="jar,examples">
-		<ant inheritAll="false" dir="${out.dist.examples}/${example.name}" target="execute" />
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========     ZIP       ========== -->
-	<!-- =================================== -->
-
-	<!-- creates zip files of the different distribution (source, binaries) -->
-
-	<target name="zip" depends="dist">
-		<mkdir dir="${out.zip}" />
-		<tar destfile="${out.zip}/${product.name}-${product.version}.tar.gz" compression="gzip">
-			<tarfileset dir="${basedir}" prefix="${product.name}-${product.version}">
-				<exclude name="build.config" />
-				<exclude name="config/**" />
-				<exclude name="config" />
-				<exclude name="**/externals/**" />
-				<exclude name="**/externals" />
-				<exclude name="**/lib/**" />
-				<exclude name="**/lib" />
-				<exclude name="eclipse/**" />
-				<exclude name="eclipse" />
-				<exclude name="web/**" />
-				<exclude name="web" />
-				<exclude name="**/output/**" />
-				<exclude name="**/output" />
-				<exclude name="CVSROOT/**" />
-				<exclude name="CVSROOT" />
-			</tarfileset>
-		</tar>
-		<zip zipFile="${out.zip}/${product.name}-${product.version}-bin.zip">
-			<zipfileset dir="${out.dist}" prefix="${product.name}-${product.version}" />
-		</zip>
-		<jar jarfile="${out.zip}/${product.name}-${product.version}-javadoc.jar" basedir="${out.dist}/doc/javadoc/user">
-			<fileset dir="${out.dist}/doc/javadoc/user" />
-		</jar>
-		<jar jarfile="${out.zip}/${product.name}-${product.version}-sources.jar" basedir="${src}">
-			<fileset dir="${src}" excludes="**/optimizer/**/*" />
-		</jar>
-	</target>
-	
-	<!-- ================================== -->
-	<!-- =====  BINARY COMPATIBILITY   ==== -->
-	<!-- ================================== -->
-
-	<target name="sigtest-setup" depends="jar">
-		<ant antfile="${test}/build.xml" target="sigtest-setup" inheritRefs="true" />
-	</target>
-
-	<target name="sigtest" depends="jar">
-		<ant antfile="${test}/build.xml" target="sigtest" inheritRefs="true" />
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========     CLEAN     ========== -->
-	<!-- =================================== -->
-
-	<!-- remove all directories -->
-
-	<target name="clean.web" if="web.exist">
-		<ant dir="${web}" target="clean" />
-	</target>
-
-	<target name="clean" depends="properties,clean.web">
-		<delete dir="${out.build}" />
-		<delete dir="${out.dist}" />
-		<delete dir="${out.tmp}" />
-		<delete dir="${out.zip}" />
-		<delete dir="${out.test}" />
-		<delete dir="${out.instr}" />
-	</target>
-
-	<!-- ==================================== -->
-	<!-- ==========     HELP       ========== -->
-	<!-- ==================================== -->
-
-	<target name="help">
-		<echo message="The available targets are the following:" />
-		<echo message="  compile: compiles the product into ${out.build}" />
-		<echo message="  dist: creates the product's distributions into ${out.dist}" />
-		<echo message="  zip: creates the product's distributions zip files into ${out.zip}" />
-		<echo message="  clean: removes all generated files." />
-		<echo message="  jar: creates all jars in ${out.dist.lib}" />
-		<echo message="  test: run all tests" />
-		<echo message="" />
-		<echo message="There are some options to run tests:" />
-		<echo message="  -Dtest.group=&lt;group name&gt;  Only a group of test: The default target of" />
-		<echo message="    the xml file is called the test.group contains the xml file name with" />
-		<echo message="    directory ex: ant -Dtest.group=conform/toto test =&gt; calls the default" />
-		<echo message="    target of the file ${test}/conform/toto.xml" />
-		<echo message="  -Dtest.type=&lt;type name&gt;  Only a type of test: conform, deviance, stress," />
-		<echo message="    thread or perf. The test.type properties contains the directory name of" />
-		<echo message="    the test type ex: ant -Dtest.type=conform test" />
-		<echo message="  -Dtest.name=&lt;test name&gt;  Only a single test. The target &lt;test name&gt; is called" />
-	</target>
-
-	<target name="maven.deploy.check" unless="passphrase.configured">
-		<echo message="The 'passphrase' property must be configured" />
-		<fail />
-	</target>
-
-	<target name="maven.deploy" depends="init,dist.version,maven.deploy.check">
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-parent-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-parent-${product.artifact}.pom" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-		
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-analysis-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-analysis-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-commons-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-commons-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-tree-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-tree-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-util-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-util-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-xml-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-xml-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/all/asm-all-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/all/asm-all-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/all/asm-debug-all-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/all/asm-debug-all-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-	</target>
-
-</project>
diff --git a/asm4/doc/README.txt b/asm4/doc/README.txt
deleted file mode 100644
index 23ea440..0000000
--- a/asm4/doc/README.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory contains the documentation of the product.
diff --git a/asm4/examples/adapt/etc/execute.properties b/asm4/examples/adapt/etc/execute.properties
deleted file mode 100644
index e7fea9d..0000000
--- a/asm4/examples/adapt/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname Adapt
-run.parameters ArraySet
diff --git a/asm4/examples/adapt/src/Adapt.java b/asm4/examples/adapt/src/Adapt.java
deleted file mode 100644
index 011f364..0000000
--- a/asm4/examples/adapt/src/Adapt.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * @author Eric Bruneton
- */
-public class Adapt extends ClassLoader {
-
-    @Override
-    protected synchronized Class<?> loadClass(final String name,
-            final boolean resolve) throws ClassNotFoundException {
-        if (name.startsWith("java.")) {
-            System.err.println("Adapt: loading class '" + name
-                    + "' without on the fly adaptation");
-            return super.loadClass(name, resolve);
-        } else {
-            System.err.println("Adapt: loading class '" + name
-                    + "' with on the fly adaptation");
-        }
-
-        // gets an input stream to read the bytecode of the class
-        String resource = name.replace('.', '/') + ".class";
-        InputStream is = getResourceAsStream(resource);
-        byte[] b;
-
-        // adapts the class on the fly
-        try {
-            ClassReader cr = new ClassReader(is);
-            ClassWriter cw = new ClassWriter(0);
-            ClassVisitor cv = new TraceFieldClassAdapter(cw);
-            cr.accept(cv, 0);
-            b = cw.toByteArray();
-        } catch (Exception e) {
-            throw new ClassNotFoundException(name, e);
-        }
-
-        // optional: stores the adapted class on disk
-        try {
-            FileOutputStream fos = new FileOutputStream(resource + ".adapted");
-            fos.write(b);
-            fos.close();
-        } catch (IOException e) {
-        }
-
-        // returns the adapted class
-        return defineClass(name, b, 0, b.length);
-    }
-
-    public static void main(final String args[]) throws Exception {
-        // loads the application class (in args[0]) with an Adapt class loader
-        ClassLoader loader = new Adapt();
-        Class<?> c = loader.loadClass(args[0]);
-        // calls the 'main' static method of this class with the
-        // application arguments (in args[1] ... args[n]) as parameter
-        Method m = c.getMethod("main", new Class<?>[] { String[].class });
-        String[] applicationArgs = new String[args.length - 1];
-        System.arraycopy(args, 1, applicationArgs, 0, applicationArgs.length);
-        m.invoke(null, new Object[] { applicationArgs });
-    }
-}
-
-class TraceFieldClassAdapter extends ClassVisitor implements Opcodes {
-
-    private String owner;
-
-    public TraceFieldClassAdapter(final ClassVisitor cv) {
-        super(Opcodes.ASM4, cv);
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        owner = name;
-        super.visit(version, access, name, signature, superName, interfaces);
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        FieldVisitor fv = super
-                .visitField(access, name, desc, signature, value);
-        if ((access & ACC_STATIC) == 0) {
-            Type t = Type.getType(desc);
-            int size = t.getSize();
-
-            // generates getter method
-            String gDesc = "()" + desc;
-            MethodVisitor gv = cv.visitMethod(ACC_PRIVATE, "_get" + name,
-                    gDesc, null, null);
-            gv.visitFieldInsn(GETSTATIC, "java/lang/System", "err",
-                    "Ljava/io/PrintStream;");
-            gv.visitLdcInsn("_get" + name + " called");
-            gv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
-                    "(Ljava/lang/String;)V");
-            gv.visitVarInsn(ALOAD, 0);
-            gv.visitFieldInsn(GETFIELD, owner, name, desc);
-            gv.visitInsn(t.getOpcode(IRETURN));
-            gv.visitMaxs(1 + size, 1);
-            gv.visitEnd();
-
-            // generates setter method
-            String sDesc = "(" + desc + ")V";
-            MethodVisitor sv = cv.visitMethod(ACC_PRIVATE, "_set" + name,
-                    sDesc, null, null);
-            sv.visitFieldInsn(GETSTATIC, "java/lang/System", "err",
-                    "Ljava/io/PrintStream;");
-            sv.visitLdcInsn("_set" + name + " called");
-            sv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
-                    "(Ljava/lang/String;)V");
-            sv.visitVarInsn(ALOAD, 0);
-            sv.visitVarInsn(t.getOpcode(ILOAD), 1);
-            sv.visitFieldInsn(PUTFIELD, owner, name, desc);
-            sv.visitInsn(RETURN);
-            sv.visitMaxs(1 + size, 1 + size);
-            sv.visitEnd();
-        }
-        return fv;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                exceptions);
-        return mv == null ? null : new TraceFieldCodeAdapter(mv, owner);
-    }
-}
-
-class TraceFieldCodeAdapter extends MethodVisitor implements Opcodes {
-
-    private String owner;
-
-    public TraceFieldCodeAdapter(final MethodVisitor mv, final String owner) {
-        super(Opcodes.ASM4, mv);
-        this.owner = owner;
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        if (owner.equals(this.owner)) {
-            if (opcode == GETFIELD) {
-                // replaces GETFIELD f by INVOKESPECIAL _getf
-                String gDesc = "()" + desc;
-                visitMethodInsn(INVOKESPECIAL, owner, "_get" + name, gDesc);
-                return;
-            } else if (opcode == PUTFIELD) {
-                // replaces PUTFIELD f by INVOKESPECIAL _setf
-                String sDesc = "(" + desc + ")V";
-                visitMethodInsn(INVOKESPECIAL, owner, "_set" + name, sDesc);
-                return;
-            }
-        }
-        super.visitFieldInsn(opcode, owner, name, desc);
-    }
-}
diff --git a/asm4/examples/adapt/src/ArraySet.java b/asm4/examples/adapt/src/ArraySet.java
deleted file mode 100644
index 3548cd6..0000000
--- a/asm4/examples/adapt/src/ArraySet.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-/**
- * @author Eric Bruneton
- */
-public class ArraySet {
-
-    private int[] values = new int[3];
-
-    private int size;
-
-    public boolean contains(final int v) {
-        for (int i = 0; i < size; ++i) {
-            if (values[i] == v) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public void add(final int v) {
-        if (!contains(v)) {
-            if (size == values.length) {
-                System.err.println("[enlarge]");
-                int[] newValues = new int[values.length + 3];
-                System.arraycopy(values, 0, newValues, 0, size);
-                values = newValues;
-            }
-            values[size++] = v;
-        }
-    }
-
-    public void remove(final int v) {
-        int i = 0;
-        int j = 0;
-        while (i < size) {
-            int u = values[i];
-            if (u != v) {
-                values[j++] = u;
-            }
-            ++i;
-        }
-        size = j;
-    }
-
-    // test method
-
-    public static void main(final String[] args) {
-        ArraySet s = new ArraySet();
-        System.err.println("add 1");
-        s.add(1);
-        System.err.println("add 1");
-        s.add(1);
-        System.err.println("add 2");
-        s.add(2);
-        System.err.println("add 4");
-        s.add(4);
-        System.err.println("add 8");
-        s.add(8);
-        System.err.println("contains 3 = " + s.contains(3));
-        System.err.println("contains 1 = " + s.contains(1));
-        System.err.println("remove 1");
-        s.remove(1);
-        System.err.println("contains 1 = " + s.contains(1));
-    }
-}
diff --git a/asm4/examples/analysis/etc/execute.properties b/asm4/examples/analysis/etc/execute.properties
deleted file mode 100644
index b560b40..0000000
--- a/asm4/examples/analysis/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname Analysis
-run.parameters
diff --git a/asm4/examples/analysis/src/Analysis.java b/asm4/examples/analysis/src/Analysis.java
deleted file mode 100644
index 3e319eb..0000000
--- a/asm4/examples/analysis/src/Analysis.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.VarInsnNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.BasicValue;
-import org.objectweb.asm.tree.analysis.BasicVerifier;
-import org.objectweb.asm.tree.analysis.Frame;
-import org.objectweb.asm.tree.analysis.SourceInterpreter;
-import org.objectweb.asm.tree.analysis.SourceValue;
-import org.objectweb.asm.util.TraceMethodVisitor;
-import org.objectweb.asm.util.Textifier;
-
-/**
- * @author Eric Bruneton
- */
-public class Analysis implements Opcodes {
-
-    public static void main(final String[] args) throws Exception {
-        ClassReader cr = new ClassReader("Analysis");
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, ClassReader.SKIP_DEBUG);
-
-        List<MethodNode> methods = cn.methods;
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            if (method.instructions.size() > 0) {
-                if (!analyze(cn, method)) {
-                    Analyzer<?> a = new Analyzer<BasicValue>(
-                            new BasicVerifier());
-                    try {
-                        a.analyze(cn.name, method);
-                    } catch (Exception ignored) {
-                    }
-                    final Frame<?>[] frames = a.getFrames();
-
-                    Textifier t = new Textifier() {
-                        @Override
-                        public void visitMaxs(final int maxStack,
-                                final int maxLocals) {
-                            for (int i = 0; i < text.size(); ++i) {
-                                StringBuffer s = new StringBuffer(
-                                        frames[i] == null ? "null"
-                                                : frames[i].toString());
-                                while (s.length() < Math.max(20, maxStack
-                                        + maxLocals + 1)) {
-                                    s.append(' ');
-                                }
-                                System.err.print(Integer.toString(i + 1000)
-                                        .substring(1)
-                                        + " "
-                                        + s
-                                        + " : "
-                                        + text.get(i));
-                            }
-                            System.err.println();
-                        }
-                    };
-                    MethodVisitor mv = new TraceMethodVisitor(t);
-                    for (int j = 0; j < method.instructions.size(); ++j) {
-                        Object insn = method.instructions.get(j);
-                        ((AbstractInsnNode) insn).accept(mv);
-                    }
-                    mv.visitMaxs(0, 0);
-                }
-            }
-        }
-    }
-
-    /*
-     * Detects unused xSTORE instructions, i.e. xSTORE instructions without at
-     * least one xLOAD corresponding instruction in their successor instructions
-     * (in the control flow graph).
-     */
-    public static boolean analyze(final ClassNode c, final MethodNode m)
-            throws Exception {
-        Analyzer<SourceValue> a = new Analyzer<SourceValue>(
-                new SourceInterpreter());
-        Frame<SourceValue>[] frames = a.analyze(c.name, m);
-
-        // for each xLOAD instruction, we find the xSTORE instructions that can
-        // produce the value loaded by this instruction, and we put them in
-        // 'stores'
-        Set<AbstractInsnNode> stores = new HashSet<AbstractInsnNode>();
-        for (int i = 0; i < m.instructions.size(); ++i) {
-            AbstractInsnNode insn = m.instructions.get(i);
-            int opcode = insn.getOpcode();
-            if ((opcode >= ILOAD && opcode <= ALOAD) || opcode == IINC) {
-                int var = opcode == IINC ? ((IincInsnNode) insn).var
-                        : ((VarInsnNode) insn).var;
-                Frame<SourceValue> f = frames[i];
-                if (f != null) {
-                    Set<AbstractInsnNode> s = f.getLocal(var).insns;
-                    Iterator<AbstractInsnNode> j = s.iterator();
-                    while (j.hasNext()) {
-                        insn = j.next();
-                        if (insn instanceof VarInsnNode) {
-                            stores.add(insn);
-                        }
-                    }
-                }
-            }
-        }
-
-        // we then find all the xSTORE instructions that are not in 'stores'
-        boolean ok = true;
-        for (int i = 0; i < m.instructions.size(); ++i) {
-            AbstractInsnNode insn = m.instructions.get(i);
-            int opcode = insn.getOpcode();
-            if (opcode >= ISTORE && opcode <= ASTORE) {
-                if (!stores.contains(insn)) {
-                    ok = false;
-                    System.err.println("method " + m.name + ", instruction "
-                            + i + ": useless store instruction");
-                }
-            }
-        }
-        return ok;
-    }
-
-    /*
-     * Test for the above method, with three useless xSTORE instructions.
-     */
-    public int test(int i, int j) {
-        i = i + 1; // ok, because i can be read after this point
-
-        if (j == 0) {
-            j = 1; // useless
-        } else {
-            try {
-                j = j - 1; // ok, because j can be accessed in the catch
-                int k = 0;
-                if (i > 0) {
-                    k = i - 1;
-                }
-                return k;
-            } catch (Exception e) { // useless ASTORE (e is never used)
-                j = j + 1; // useless
-            }
-        }
-
-        return 0;
-    }
-}
diff --git a/asm4/examples/annotations/build.xml b/asm4/examples/annotations/build.xml
deleted file mode 100644
index e149280..0000000
--- a/asm4/examples/annotations/build.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="Examples" default="compile">
-
-  <!-- directory definition -->
-
-  <property name="src"          value="${basedir}/src"/>
-  <property name="build"        value="${basedir}/build"/>
-
-  <property file="${basedir}/../etc/build.properties"/>
-  <property file="${basedir}/etc/build.properties"/>
-  <property file="${basedir}/etc/execute.properties"/>
-
-  <!-- Building of a path which contains external jars -->
-
-  <path id="classpath">
-    <pathelement path="${asm.path}"/>
-    <pathelement path="${asm.tree.path}"/>
-    <pathelement path="${asm.analysis.path}"/>
-    <pathelement path="${asm.attrs.path}"/>
-    <pathelement path="${asm.util.path}"/>
-    <fileset dir="${basedir}">
-      <include name="lib/**/*.jar"/>
-    </fileset>
-    <fileset dir="${basedir}/..">
-      <include name="lib/**/*.jar"/>
-    </fileset>
-    <pathelement location="${build}"/>
-  </path>
-
-  <!-- ================================== -->
-  <!--              EXECUTE               -->
-  <!-- ================================== -->
-
-  <target name="execute" depends="compile">
-    <java classname="${run.classname}"
-      classpathref="classpath" fork="yes" failonerror="yes">
-       <arg line="${run.parameters}"/>
-    </java>
-  </target>
-
-  <!-- ================================== -->
-  <!--              COMPILE               -->
-  <!-- ================================== -->
-
-  <target name="compile">
-    <mkdir dir="${build}"/>
-    <javac srcdir="${src}" destdir="${build}" debug="on" source="1.5" target="1.5">
-      <classpath refid="classpath"/>
-      <include name="**/*.java"/>
-    </javac>
-  </target>
-
-  <!-- ================================== -->
-  <!--               CLEAN                -->
-  <!-- ================================== -->
-
-  <target name="clean">
-    <delete dir="${build}"/>
-  </target>
-</project>
diff --git a/asm4/examples/annotations/etc/execute.properties b/asm4/examples/annotations/etc/execute.properties
deleted file mode 100644
index 06d0dec..0000000
--- a/asm4/examples/annotations/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################

-#ASM: a very small and fast Java bytecode manipulation framework

-#Copyright (c) 2000-2011 INRIA, France Telecom

-#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.

-###############################################################################

-

-run.classname Annotations

-run.parameters

diff --git a/asm4/examples/annotations/src/Annotations.java b/asm4/examples/annotations/src/Annotations.java
deleted file mode 100644
index 850b6f1..0000000
--- a/asm4/examples/annotations/src/Annotations.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-public class Annotations {
-
-    public static void foo(final @NotNull String arg) {
-        System.out.println(arg);
-    }
-
-    public static void main(final String[] args) throws Exception {
-        System.out
-                .println("Calling foo(null) results in a NullPointerException:");
-        try {
-            foo(null);
-        } catch (Exception e) {
-            e.printStackTrace(System.out);
-        }
-
-        final String n = Annotations.class.getName();
-        final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        ClassReader cr = new ClassReader(n);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                final Type[] args = Type.getArgumentTypes(desc);
-                MethodVisitor v = cv.visitMethod(access, name, desc, signature,
-                        exceptions);
-                return new MethodVisitor(Opcodes.ASM4, v) {
-
-                    private final List<Integer> params = new ArrayList<Integer>();
-
-                    @Override
-                    public AnnotationVisitor visitParameterAnnotation(
-                            final int parameter, final String desc,
-                            final boolean visible) {
-                        AnnotationVisitor av;
-                        av = mv.visitParameterAnnotation(parameter, desc,
-                                visible);
-                        if (desc.equals("LNotNull;")) {
-                            params.add(new Integer(parameter));
-                        }
-                        return av;
-                    }
-
-                    @Override
-                    public void visitCode() {
-                        int var = (access & Opcodes.ACC_STATIC) == 0 ? 1 : 0;
-                        for (int p = 0; p < params.size(); ++p) {
-                            int param = params.get(p).intValue();
-                            for (int i = 0; i < param; ++i) {
-                                var += args[i].getSize();
-                            }
-                            String c = "java/lang/IllegalArgumentException";
-                            String d = "(Ljava/lang/String;)V";
-                            Label end = new Label();
-                            mv.visitVarInsn(Opcodes.ALOAD, var);
-                            mv.visitJumpInsn(Opcodes.IFNONNULL, end);
-                            mv.visitTypeInsn(Opcodes.NEW, c);
-                            mv.visitInsn(Opcodes.DUP);
-                            mv.visitLdcInsn("Argument " + param
-                                    + " must not be null");
-                            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, c,
-                                    "<init>", d);
-                            mv.visitInsn(Opcodes.ATHROW);
-                            mv.visitLabel(end);
-                        }
-                    }
-                };
-            }
-        }, 0);
-
-        Class<?> c = new ClassLoader() {
-            @Override
-            public Class<?> loadClass(final String name)
-                    throws ClassNotFoundException {
-                if (name.equals(n)) {
-                    byte[] b = cw.toByteArray();
-                    return defineClass(name, b, 0, b.length);
-                }
-                return super.loadClass(name);
-            }
-        }.loadClass(n);
-
-        System.out.println();
-        System.out.println("Calling foo(null) on the transformed class results"
-                + " in an IllegalArgumentException:");
-        Method m = c.getMethod("foo", new Class<?>[] { String.class });
-        try {
-            m.invoke(null, new Object[] { null });
-        } catch (InvocationTargetException e) {
-            e.getCause().printStackTrace(System.out);
-        }
-    }
-}
diff --git a/asm4/examples/annotations/src/NotNull.java b/asm4/examples/annotations/src/NotNull.java
deleted file mode 100644
index b16cf12..0000000
--- a/asm4/examples/annotations/src/NotNull.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.CLASS)
-public @interface NotNull {
-    String value() default "";
-}
diff --git a/asm4/examples/attributes/etc/execute.properties b/asm4/examples/attributes/etc/execute.properties
deleted file mode 100644
index f2027d4..0000000
--- a/asm4/examples/attributes/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname Attributes
-run.parameters
diff --git a/asm4/examples/attributes/src/Attributes.java b/asm4/examples/attributes/src/Attributes.java
deleted file mode 100644
index b833042..0000000
--- a/asm4/examples/attributes/src/Attributes.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.io.FileOutputStream;
-import java.io.PrintWriter;
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.util.Textifiable;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * @author Eric Bruneton
- */
-public class Attributes extends ClassLoader {
-
-    public static void main(final String args[]) throws Exception {
-        // loads the original class and adapts it
-        ClassReader cr = new ClassReader("CommentAttribute");
-        ClassWriter cw = new ClassWriter(0);
-        ClassVisitor cv = new AddCommentClassAdapter(cw);
-        cr.accept(cv, new Attribute[] { new CommentAttribute("") }, 0);
-        byte[] b = cw.toByteArray();
-
-        // stores the adapted class on disk
-        FileOutputStream fos = new FileOutputStream(
-                "CommentAttribute.class.new");
-        try {
-            fos.write(b);
-        } finally {
-            fos.close();
-        }
-
-        // "disassembles" the adapted class
-        cr = new ClassReader(b);
-        cv = new TraceClassVisitor(new PrintWriter(System.out));
-        cr.accept(cv, new Attribute[] { new CommentAttribute("") }, 0);
-    }
-}
-
-class AddCommentClassAdapter extends ClassVisitor implements Opcodes {
-
-    public AddCommentClassAdapter(final ClassVisitor cv) {
-        super(Opcodes.ASM4, cv);
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        super.visit(version, access, name, signature, superName, interfaces);
-        visitAttribute(new CommentAttribute("this is a class comment"));
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        FieldVisitor fv = super
-                .visitField(access, name, desc, signature, value);
-        fv.visitAttribute(new CommentAttribute("this is a field comment"));
-        return fv;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                exceptions);
-        if (mv != null) {
-            mv.visitAttribute(new CommentAttribute("this is a method comment"));
-        }
-        return mv;
-    }
-}
-
-class CommentAttribute extends Attribute implements Textifiable {
-
-    private String comment;
-
-    public CommentAttribute(final String comment) {
-        super("Comment");
-        this.comment = comment;
-    }
-
-    public String getComment() {
-        return comment;
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        return new CommentAttribute(cr.readUTF8(off, buf));
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector().putShort(cw.newUTF8(comment));
-    }
-
-    public void textify(StringBuffer buf, Map<Label, String> labelNames) {
-        buf.append(": " + comment + "\n");
-    }
-}
diff --git a/asm4/examples/common/README.txt b/asm4/examples/common/README.txt
deleted file mode 100644
index 164705d..0000000
--- a/asm4/examples/common/README.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory contains the examples of the product. 
-It contains(*) the following items:
-
-- lib: jar files shared by all examples,
-- etc: configuration files shared by all examples,
-- README.txt: explains the organisation of the examples directory,
-- all other directories contain(*) the following items:
-  - README.txt file: describes the example and its configuration,
-  - lib: jar files needed by the example,
-  - etc: configuration files needed by the example,
-  - src: source code of the example.
-
-(*) some items may not be present, depending on the product or example.
\ No newline at end of file
diff --git a/asm4/examples/common/build.xml b/asm4/examples/common/build.xml
deleted file mode 100644
index 950b028..0000000
--- a/asm4/examples/common/build.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="Examples" default="compile">
-
-  <!-- directory definition -->
-
-  <property name="src"          value="${basedir}/src"/>
-  <property name="build"        value="${basedir}/build"/>
-
-  <property file="${basedir}/../etc/build.properties"/>
-  <property file="${basedir}/etc/build.properties"/>
-  <property file="${basedir}/etc/execute.properties"/>
-
-  <!-- Building of a path which contains external jars -->
-
-  <path id="compile-classpath">
-    <pathelement path="${asm.debug.path}"/>
-	<fileset dir="${basedir}">
-	  <include name="lib/*.jar"/>
-	</fileset>
-	<pathelement location="${build}"/>
-  </path>	
-	
-  <path id="runtime-classpath">
-    <pathelement path="${asm.path}"/>
-    <pathelement path="${asm.tree.path}"/>
-    <pathelement path="${asm.analysis.path}"/>
-    <pathelement path="${asm.attrs.path}"/>
-    <pathelement path="${asm.util.path}"/>
-    <pathelement path="${asm.commons.path}"/>
-    <fileset dir="${basedir}">
-      <include name="lib/*.jar"/>
-    </fileset>
-    <pathelement location="${build}"/>
-  </path>
-	
-  
-
-  <!-- ================================== -->
-  <!--              EXECUTE               -->
-  <!-- ================================== -->
-
-  <target name="execute" depends="compile">
-    <java classname="${run.classname}"
-      classpathref="runtime-classpath" fork="yes" failonerror="yes">
-       <arg line="${run.parameters}"/>
-    </java>
-  </target>
-
-  <!-- ================================== -->
-  <!--              COMPILE               -->
-  <!-- ================================== -->
-
-  <target name="compile">
-    <mkdir dir="${build}"/>
-    <javac srcdir="${src}" destdir="${build}" debug="on" source="1.5" target="1.5">
-      <classpath refid="compile-classpath"/>
-      <include name="**/*.java"/>
-    </javac>
-  </target>
-
-  <!-- ================================== -->
-  <!--               CLEAN                -->
-  <!-- ================================== -->
-
-  <target name="clean">
-    <delete dir="${build}"/>
-  </target>
-</project>
diff --git a/asm4/examples/common/etc/build.properties b/asm4/examples/common/etc/build.properties
deleted file mode 100644
index c3eb187..0000000
--- a/asm4/examples/common/etc/build.properties
+++ /dev/null
@@ -1,68 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# Wich compiler do you want use ?
-
-# build.compiler jikes
-
-# Runtime class path for the ASM library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.path ../../lib/asm-@product.version@.jar
-
-# Runtime class path for the ASM tree library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.tree.path ../../lib/asm-tree-@product.version@.jar
-
-# Runtime class path for the ASM analysis library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.analysis.path ../../lib/asm-analysis-@product.version@.jar
-
-# Runtime class path for the ASM attrs library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.attrs.path ../../lib/asm-attrs-@product.version@.jar
-
-# Runtime class path for the ASM util library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.util.path ../../lib/asm-util-@product.version@.jar
-
-# Runtime class path for the ASM commons library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.commons.path ../../lib/asm-commons-@product.version@.jar
-
-# Compile time class path for the whole ASM library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.debug.path ../../lib/all/asm-debug-all-@product.version@.jar
diff --git a/asm4/examples/compile-indy/etc/execute.properties b/asm4/examples/compile-indy/etc/execute.properties
deleted file mode 100644
index a22cb1d..0000000
--- a/asm4/examples/compile-indy/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname IndyCompile
-run.parameters
diff --git a/asm4/examples/compile-indy/src/IndyCompile.java b/asm4/examples/compile-indy/src/IndyCompile.java
deleted file mode 100644
index cac146e..0000000
--- a/asm4/examples/compile-indy/src/IndyCompile.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * This example is adapted from the example that you can find in examples/compile
- * and use invokedynamic to implement all operations.
- *
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
-import static org.objectweb.asm.Opcodes.ACC_STATIC;
-import static org.objectweb.asm.Opcodes.ALOAD;
-import static org.objectweb.asm.Opcodes.ARETURN;
-import static org.objectweb.asm.Opcodes.DUP;
-import static org.objectweb.asm.Opcodes.H_INVOKESTATIC;
-import static org.objectweb.asm.Opcodes.IFEQ;
-import static org.objectweb.asm.Opcodes.IFNE;
-import static org.objectweb.asm.Opcodes.POP;
-import static org.objectweb.asm.Opcodes.V1_7;
-
-import java.io.FileOutputStream;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * @author Remi Forax
- * @author Eric Bruneton
- */
-public class IndyCompile extends ClassLoader {
-
-    public static void main(final String[] args) throws Throwable {
-        // creates the expression tree corresponding to
-        // exp(i) = i > 3 && 6 > i
-        Exp exp = new And(new GT(new Var(0), new Cst(3)), new GT(new Cst(6),
-                new Var(0)));
-
-        // compiles this expression into a generic static method in a class
-        IndyCompile main = new IndyCompile();
-        byte[] b = exp.compile("Example");
-        FileOutputStream fos = new FileOutputStream("Example.class");
-        fos.write(b);
-        fos.close();
-        Class<?> expClass = main.defineClass("Example", b, 0, b.length);
-        Method expMethod = expClass.getDeclaredMethods()[0];
-
-        // ... and use it to evaluate exp(0) to exp(9)
-        for (int i = 0; i < 10; ++i) {
-            boolean val = (Boolean) expMethod.invoke(null, i);
-            System.out.println(i + " > 3 && " + i + " < 6 = " + val);
-        }
-
-        // ... more fun, test with strings !!!
-        for (int i = 0; i < 10; ++i) {
-            boolean val = (Boolean) expMethod.invoke(null, Integer.toString(i));
-            System.out.println("\"" + i + "\" > 3 && 6 > \"" + i + "\" = "
-                    + val);
-        }
-    }
-
-    /**
-     * An abstract expression.
-     */
-    static abstract class Exp {
-
-        static final Handle CST = getHandle("cst", "Ljava/lang/Object;");
-
-        static final Handle UNARY = getHandle("unary", "");
-
-        static final Handle BINARY = getHandle("binary", "");
-
-        /**
-         * Returns the maximum variable index used in this expression.
-         * 
-         * @return the maximum variable index used in this expression, or -1 if
-         *         no variable is used.
-         */
-        int getMaxVarIndex() {
-            return -1;
-        }
-
-        /*
-         * Returns the byte code of a class corresponding to this expression.
-         */
-        byte[] compile(final String name) {
-            // class header
-            ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
-            cw.visit(V1_7, ACC_PUBLIC, name, null, "java/lang/Object", null);
-
-            // eval method type
-            StringBuilder desc = new StringBuilder("(");
-            for (int i = 0; i <= getMaxVarIndex(); ++i) {
-                desc.append("Ljava/lang/Object;");
-            }
-            desc.append(")Ljava/lang/Object;");
-
-            // eval method
-            MethodVisitor mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "eval",
-                    desc.toString(), null, null);
-            compile(mv);
-            mv.visitInsn(ARETURN);
-            // max stack and max locals automatically computed
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            return cw.toByteArray();
-        }
-
-        /*
-         * Compile this expression. This method must append to the given code
-         * writer the byte code that evaluates and pushes on the stack the value
-         * of this expression.
-         */
-        abstract void compile(MethodVisitor mv);
-
-        private static Handle getHandle(final String name, final String optArgs) {
-            return new Handle(
-                    H_INVOKESTATIC,
-                    "RT",
-                    name,
-                    "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;"
-                            + optArgs + ")Ljava/lang/invoke/CallSite;");
-        }
-    }
-
-    /**
-     * A constant expression.
-     */
-    static class Cst extends Exp {
-
-        private final Object value;
-
-        Cst(final Object value) {
-            this.value = value;
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            if (value instanceof String) {
-                mv.visitLdcInsn(value);
-                return;
-            }
-
-            // instead of pushing the constant and then box it, we use
-            // invokedynamic with the constant as bootstrap argument. The
-            // boxing will be performed by the VM when calling the bootstrap
-            // method
-            mv.visitInvokeDynamicInsn("cst", "()Ljava/lang/Object;", CST, value);
-        }
-    }
-
-    /**
-     * A variable reference expression.
-     */
-    static class Var extends Exp {
-
-        final int index;
-
-        Var(final int index) {
-            this.index = index;
-        }
-
-        @Override
-        int getMaxVarIndex() {
-            return index;
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // pushes the 'index' local variable onto the stack
-            mv.visitVarInsn(ALOAD, index);
-        }
-    }
-
-    /**
-     * An abstract binary expression.
-     */
-    static abstract class BinaryExp extends Exp {
-
-        final Exp e1;
-
-        final Exp e2;
-
-        @Override
-        int getMaxVarIndex() {
-            return Math.max(e1.getMaxVarIndex(), e2.getMaxVarIndex());
-        }
-
-        BinaryExp(final Exp e1, final Exp e2) {
-            this.e1 = e1;
-            this.e2 = e2;
-        }
-    }
-
-    /**
-     * An addition expression.
-     */
-    static class Add extends BinaryExp {
-
-        Add(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1, e2, and adds an instruction to add the two values
-            e1.compile(mv);
-            e2.compile(mv);
-            mv.visitInvokeDynamicInsn("add",
-                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
-                    BINARY);
-        }
-    }
-
-    /**
-     * A multiplication expression.
-     */
-    static class Mul extends BinaryExp {
-
-        Mul(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1, e2, and adds an instruction to multiply the two
-            // values
-            e1.compile(mv);
-            e2.compile(mv);
-            mv.visitInvokeDynamicInsn("mul",
-                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
-                    BINARY);
-        }
-    }
-
-    /**
-     * A "greater than" expression.
-     */
-    static class GT extends BinaryExp {
-
-        GT(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1, e2, and adds the instructions to compare the two
-            // values
-            e1.compile(mv);
-            e2.compile(mv);
-            mv.visitInvokeDynamicInsn("gt",
-                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
-                    BINARY);
-        }
-    }
-
-    /**
-     * A logical "and" expression.
-     */
-    static class And extends BinaryExp {
-
-        And(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1
-            e1.compile(mv);
-            // tests if e1 is false
-            mv.visitInsn(DUP);
-            // convert to a boolean
-            mv.visitInvokeDynamicInsn("asBoolean", "(Ljava/lang/Object;)Z",
-                    UNARY);
-
-            Label end = new Label();
-            mv.visitJumpInsn(IFEQ, end);
-            // case where e1 is true : e1 && e2 is equal to e2
-            mv.visitInsn(POP);
-            e2.compile(mv);
-
-            // if e1 is false, e1 && e2 is equal to e1:
-            // we jump directly to this label, without evaluating e2
-            mv.visitLabel(end);
-        }
-    }
-
-    /**
-     * A logical "or" expression.
-     */
-    static class Or extends BinaryExp {
-
-        Or(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1
-            e1.compile(mv);
-            // tests if e1 is true
-            mv.visitInsn(DUP);
-            // convert to a boolean
-            mv.visitInvokeDynamicInsn("asBoolean", "(Ljava/lang/Object;)Z",
-                    UNARY);
-            Label end = new Label();
-            mv.visitJumpInsn(IFNE, end);
-            // case where e1 is false : e1 || e2 is equal to e2
-            mv.visitInsn(POP);
-            e2.compile(mv);
-            // if e1 is true, e1 || e2 is equal to e1:
-            // we jump directly to this label, without evaluating e2
-            mv.visitLabel(end);
-        }
-    }
-
-    /**
-     * A logical "not" expression.
-     */
-    static class Not extends Exp {
-
-        private final Exp e;
-
-        Not(final Exp e) {
-            this.e = e;
-        }
-
-        @Override
-        int getMaxVarIndex() {
-            return e.getMaxVarIndex();
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e, and applies 'not'
-            e.compile(mv);
-            mv.visitInvokeDynamicInsn("not",
-                    "(Ljava/lang/Object;)Ljava/lang/Object;", UNARY);
-        }
-    }
-}
diff --git a/asm4/examples/compile-indy/src/RT.java b/asm4/examples/compile-indy/src/RT.java
deleted file mode 100644
index fdf080a..0000000
--- a/asm4/examples/compile-indy/src/RT.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/***
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-import java.lang.invoke.CallSite;
-import java.lang.invoke.ConstantCallSite;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.invoke.MethodType;
-import java.lang.invoke.MutableCallSite;
-import java.util.HashMap;
-
-/**
- * There are 3 bootstrap methods: - one for the constant that are initialized
- * once the first time the bootstrap method is called and after always reuse the
- * same constant. It's almost equivalent to an LDC but here the constant are
- * stored in boxed form e.g a java.lang.Integer containing 0 instead of an int
- * containing 0.
- * 
- * - one for the unary operation 'not' and 'asBoolean', here the semantics is
- * hard coded, all primitive value are transformed as object by applying this
- * operation: (v == 0)? false: true
- * 
- * - one for the binary operation 'add', 'mul' and 'gt', here the semantics can
- * be changed by adding more static methods in {@link BinaryOps}. This bootstrap
- * method is a little more complex because it creates an inlining cache to avoid
- * to recompute the binary method to call if the type of the two arguments
- * doesn't change. Also, if the expression is used a lot and trigger the JIT, it
- * will be able to inline the code of the operation directly at callsite.
- * 
- * @author Remi Forax
- */
-public class RT {
-    /**
-     * bootstrap method for constant
-     */
-    public static CallSite cst(Lookup lookup, String name, MethodType type,
-            Object constant) {
-        return new ConstantCallSite(MethodHandles.constant(Object.class,
-                constant));
-    }
-
-    /**
-     * bootstrap method for unary operation 'asBoolean' and 'not'
-     */
-    public static CallSite unary(Lookup lookup, String name, MethodType type) {
-        MethodHandle target;
-        if (name.equals("asBoolean")) {
-            target = MethodHandles.explicitCastArguments(
-                    MethodHandles.identity(Object.class),
-                    MethodType.methodType(boolean.class, Object.class));
-        } else { // "not"
-            target = MethodHandles.explicitCastArguments(NOT,
-                    MethodType.methodType(Object.class, Object.class));
-        }
-        return new ConstantCallSite(target);
-    }
-
-    /**
-     * bootstrap method for binary operation 'add', 'mul' and 'gt'
-     * 
-     * This bootstrap method doesn't install the target method handle directly,
-     * because we want to install an inlining cache and we can't create an
-     * inlining cache without knowing the class of the arguments. So this method
-     * first installs a method handle that will call
-     * {@link BinaryOpCallSite#fallback(Object, Object)} and the fallback method
-     * will be called with the arguments and thus can install the inlining
-     * cache. Also, the fallback has to be bound to a specific callsite to be
-     * able to change its target after the first call, this part is done in the
-     * constructor of {@link BinaryOpCallSite}.
-     */
-    public static CallSite binary(Lookup lookup, String name, MethodType type) {
-        BinaryOpCallSite callSite = new BinaryOpCallSite(name, type);
-        callSite.setTarget(callSite.fallback);
-        return callSite;
-    }
-
-    /**
-     * Garbage class containing the method used to apply 'not' on a boolean. See
-     * {@link RT#unary(Lookup, String, MethodType)}
-     */
-    public static class UnayOps {
-
-        public static Object not(boolean b) {
-            return !b;
-        }
-    }
-
-    private static final MethodHandle NOT;
-
-    static {
-        try {
-            NOT = MethodHandles.publicLookup().findStatic(UnayOps.class, "not",
-                    MethodType.methodType(Object.class, boolean.class));
-        } catch (ReflectiveOperationException e) {
-            throw new LinkageError(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * A specific callsite that will install an 'inlining cache'. Because we
-     * don't know until runtime which method handle to call, the lookup
-     * depending on the dynamic type of the argument will be done at runtime
-     * when the method {@link #fallback(Object, Object)} is called. To avoid to
-     * do this dynamic lookup at each call, the fallback install two guards in
-     * front of dispatch call that will check if the arguments class change or
-     * not. If the arguments class don't change, the previously computed method
-     * handle will be called again. Otherwise, a new method handle will be
-     * computed and two new guards will be installed.
-     */
-    static class BinaryOpCallSite extends MutableCallSite {
-
-        private final String opName;
-
-        final MethodHandle fallback;
-
-        public BinaryOpCallSite(String opName, MethodType type) {
-            super(type);
-            this.opName = opName;
-            this.fallback = FALLBACK.bindTo(this);
-        }
-
-        Object fallback(Object v1, Object v2) throws Throwable {
-            // when you debug with this message
-            // don't forget that && and || are lazy !!
-            // System.out.println("fallback called with "+opName+'('+v1.getClass()+','+v2.getClass()+')');
-
-            Class<? extends Object> class1 = v1.getClass();
-            Class<? extends Object> class2 = v2.getClass();
-            MethodHandle op = lookupBinaryOp(opName, class1, class2);
-
-            // convert arguments
-            MethodType type = type();
-            MethodType opType = op.type();
-            if (opType.parameterType(0) == String.class) {
-                if (opType.parameterType(1) == String.class) {
-                    op = MethodHandles.filterArguments(op, 0, TO_STRING,
-                            TO_STRING);
-                } else {
-                    op = MethodHandles.filterArguments(op, 0, TO_STRING);
-                    op = MethodHandles.explicitCastArguments(op, type);
-                }
-            } else {
-                if (opType.parameterType(1) == String.class) {
-                    op = MethodHandles.filterArguments(op, 1, TO_STRING);
-                }
-                op = MethodHandles.explicitCastArguments(op, type);
-            }
-
-            // prepare guard
-            MethodHandle guard = MethodHandles.guardWithTest(TEST1
-                    .bindTo(class1), MethodHandles.guardWithTest(
-                    TEST2.bindTo(class2), op, fallback), fallback);
-
-            // install the inlining cache
-            setTarget(guard);
-            return op.invokeWithArguments(v1, v2);
-        }
-
-        public static boolean test1(Class<?> v1Class, Object v1, Object v2) {
-            return v1.getClass() == v1Class;
-        }
-
-        public static boolean test2(Class<?> v2Class, Object v1, Object v2) {
-            return v2.getClass() == v2Class;
-        }
-
-        private static final MethodHandle TO_STRING;
-
-        private static final MethodHandle TEST1;
-
-        private static final MethodHandle TEST2;
-
-        private static final MethodHandle FALLBACK;
-
-        static {
-            Lookup lookup = MethodHandles.lookup();
-            try {
-                TO_STRING = lookup.findVirtual(Object.class, "toString",
-                        MethodType.methodType(String.class));
-                MethodType testType = MethodType.methodType(boolean.class,
-                        Class.class, Object.class, Object.class);
-                TEST1 = lookup.findStatic(BinaryOpCallSite.class, "test1",
-                        testType);
-                TEST2 = lookup.findStatic(BinaryOpCallSite.class, "test2",
-                        testType);
-                FALLBACK = lookup.findVirtual(BinaryOpCallSite.class,
-                        "fallback", MethodType.genericMethodType(2));
-            } catch (ReflectiveOperationException e) {
-                throw new LinkageError(e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * Garbage class that contains the raw operations used for binary
-     * operations. All methods must be static returns an Object and takes the
-     * same type for the two parameter types.
-     * 
-     * See {@link RT#lookupBinaryOp(String, Class, Class)} for more info.
-     */
-    public static class BinaryOps {
-
-        public static Object add(int v1, int v2) {
-            return v1 + v2;
-        }
-
-        public static Object add(double v1, double v2) {
-            return v1 + v2;
-        }
-
-        public static Object add(String v1, String v2) {
-            return v1 + v2;
-        }
-
-        public static Object mul(int v1, int v2) {
-            return v1 * v2;
-        }
-
-        public static Object mul(double v1, double v2) {
-            return v1 * v2;
-        }
-
-        public static Object gt(int v1, int v2) {
-            return v1 > v2;
-        }
-
-        public static Object gt(double v1, double v2) {
-            return v1 > v2;
-        }
-
-        public static Object gt(String v1, String v2) {
-            return v1.compareTo(v2) > 0;
-        }
-    }
-
-    /**
-     * Select a most specific method among the ones defined in
-     * {@link RT.BinaryOps}. The algorithm first find the most specific subtype
-     * between class1 and class2. The order of the types is defined in
-     * {@link RT#RANK_MAP}: Boolean < Byte < Short < Character < Integer < Long
-     * < Float < Double < String then the algorithm lookup in
-     * {@link RT.BinaryOps} to find a method with the name opName taking as
-     * argument the primitive corresponding to the most specific subtype. If no
-     * such method exist, the algorithm retry but looking for a method with a
-     * more specific type (using the same order). The result of the lookup is
-     * cached in {@link RT#BINARY_CACHE} to avoid to avoid to do a lookup (a
-     * reflective call) on the same method twice.
-     */
-    static MethodHandle lookupBinaryOp(String opName, Class<?> class1,
-            Class<?> class2) {
-        int rank = Math.max(RANK_MAP.get(class1), RANK_MAP.get(class2));
-        String mangledName = opName + rank;
-        MethodHandle mh = BINARY_CACHE.get(mangledName);
-        if (mh != null) {
-            return mh;
-        }
-
-        for (; rank < PRIMITIVE_ARRAY.length;) {
-            Class<?> primitive = PRIMITIVE_ARRAY[rank];
-            try {
-                mh = MethodHandles.publicLookup().findStatic(
-                        BinaryOps.class,
-                        opName,
-                        MethodType.methodType(Object.class, primitive,
-                                primitive));
-            } catch (NoSuchMethodException e) {
-                rank = rank + 1;
-                continue;
-            } catch (IllegalAccessException e) {
-                throw new LinkageError(e.getMessage(), e);
-            }
-
-            BINARY_CACHE.put(mangledName, mh);
-            return mh;
-        }
-        throw new LinkageError("unknown operation " + opName + " ("
-                + class1.getName() + ',' + class2.getName() + ')');
-    }
-
-    private static final HashMap<Class<?>, Integer> RANK_MAP;
-
-    private static final Class<?>[] PRIMITIVE_ARRAY;
-
-    private static final HashMap<String, MethodHandle> BINARY_CACHE;
-
-    static {
-        Class<?>[] primitives = new Class<?>[] { boolean.class, byte.class,
-                short.class, char.class, int.class, long.class, float.class,
-                double.class, String.class };
-        Class<?>[] wrappers = new Class<?>[] { Boolean.class, Byte.class,
-                Short.class, Character.class, Integer.class, Long.class,
-                Float.class, Double.class, String.class };
-        HashMap<Class<?>, Integer> rankMap = new HashMap<Class<?>, Integer>();
-        for (int i = 0; i < wrappers.length; i++) {
-            rankMap.put(wrappers[i], i);
-        }
-
-        RANK_MAP = rankMap;
-        PRIMITIVE_ARRAY = primitives;
-        BINARY_CACHE = new HashMap<String, MethodHandle>();
-    }
-}
diff --git a/asm4/examples/compile/etc/execute.properties b/asm4/examples/compile/etc/execute.properties
deleted file mode 100644
index 43f5d75..0000000
--- a/asm4/examples/compile/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname Compile
-run.parameters
diff --git a/asm4/examples/compile/src/Compile.java b/asm4/examples/compile/src/Compile.java
deleted file mode 100644
index 7972867..0000000
--- a/asm4/examples/compile/src/Compile.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.io.FileOutputStream;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * @author Eric Bruneton
- */
-public class Compile extends ClassLoader {
-
-    public static void main(final String[] args) throws Exception {
-        // creates the expression tree corresponding to
-        // exp(i) = i > 3 && 6 > i
-        Exp exp = new And(new GT(new Var(0), new Cst(3)), new GT(new Cst(6),
-                new Var(0)));
-        // compiles this expression into an Expression class
-        Compile main = new Compile();
-        byte[] b = exp.compile("Example");
-        FileOutputStream fos = new FileOutputStream("Example.class");
-        fos.write(b);
-        fos.close();
-        Class<?> expClass = main.defineClass("Example", b, 0, b.length);
-        // instantiates this compiled expression class...
-        Expression iexp = (Expression) expClass.newInstance();
-        // ... and uses it to evaluate exp(0) to exp(9)
-        for (int i = 0; i < 10; ++i) {
-            boolean val = iexp.eval(i, 0) == 1;
-            System.out.println(i + " > 3 && " + i + " < 6 = " + val);
-        }
-    }
-}
-
-/**
- * An abstract expression.
- * 
- * @author Eric Bruneton
- */
-abstract class Exp implements Opcodes {
-
-    /*
-     * Returns the byte code of an Expression class corresponding to this
-     * expression.
-     */
-    byte[] compile(final String name) {
-        // class header
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cw.visit(V1_1, ACC_PUBLIC, name, null, "java/lang/Object",
-                new String[] { Expression.class.getName() });
-
-        // default public constructor
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null,
-                null);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(1, 1);
-        mv.visitEnd();
-
-        // eval method
-        mv = cw.visitMethod(ACC_PUBLIC, "eval", "(II)I", null, null);
-        compile(mv);
-        mv.visitInsn(IRETURN);
-        // max stack and max locals automatically computed
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    /*
-     * Compile this expression. This method must append to the given code writer
-     * the byte code that evaluates and pushes on the stack the value of this
-     * expression.
-     */
-    abstract void compile(MethodVisitor mv);
-}
-
-/**
- * A constant expression.
- */
-class Cst extends Exp {
-
-    int value;
-
-    Cst(final int value) {
-        this.value = value;
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // pushes the constant's value onto the stack
-        mv.visitLdcInsn(new Integer(value));
-    }
-}
-
-/**
- * A variable reference expression.
- */
-class Var extends Exp {
-
-    int index;
-
-    Var(final int index) {
-        this.index = index + 1;
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // pushes the 'index' local variable onto the stack
-        mv.visitVarInsn(ILOAD, index);
-    }
-}
-
-/**
- * An abstract binary expression.
- */
-abstract class BinaryExp extends Exp {
-
-    Exp e1;
-
-    Exp e2;
-
-    BinaryExp(final Exp e1, final Exp e2) {
-        this.e1 = e1;
-        this.e2 = e2;
-    }
-}
-
-/**
- * An addition expression.
- */
-class Add extends BinaryExp {
-
-    Add(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1, e2, and adds an instruction to add the two values
-        e1.compile(mv);
-        e2.compile(mv);
-        mv.visitInsn(IADD);
-    }
-}
-
-/**
- * A multiplication expression.
- */
-class Mul extends BinaryExp {
-
-    Mul(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1, e2, and adds an instruction to multiply the two values
-        e1.compile(mv);
-        e2.compile(mv);
-        mv.visitInsn(IMUL);
-    }
-}
-
-/**
- * A "greater than" expression.
- */
-class GT extends BinaryExp {
-
-    GT(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1, e2, and adds the instructions to compare the two values
-        e1.compile(mv);
-        e2.compile(mv);
-        Label iftrue = new Label();
-        Label end = new Label();
-        mv.visitJumpInsn(IF_ICMPGT, iftrue);
-        // case where e1 <= e2 : pushes false and jump to "end"
-        mv.visitLdcInsn(new Integer(0));
-        mv.visitJumpInsn(GOTO, end);
-        // case where e1 > e2 : pushes true
-        mv.visitLabel(iftrue);
-        mv.visitLdcInsn(new Integer(1));
-        mv.visitLabel(end);
-    }
-}
-
-/**
- * A logical "and" expression.
- */
-class And extends BinaryExp {
-
-    And(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1
-        e1.compile(mv);
-        // tests if e1 is false
-        mv.visitInsn(DUP);
-        Label end = new Label();
-        mv.visitJumpInsn(IFEQ, end);
-        // case where e1 is true : e1 && e2 is equal to e2
-        mv.visitInsn(POP);
-        e2.compile(mv);
-        // if e1 is false, e1 && e2 is equal to e1:
-        // we jump directly to this label, without evaluating e2
-        mv.visitLabel(end);
-    }
-}
-
-/**
- * A logical "or" expression.
- */
-class Or extends BinaryExp {
-
-    Or(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1
-        e1.compile(mv);
-        // tests if e1 is true
-        mv.visitInsn(DUP);
-        Label end = new Label();
-        mv.visitJumpInsn(IFNE, end);
-        // case where e1 is false : e1 || e2 is equal to e2
-        mv.visitInsn(POP);
-        e2.compile(mv);
-        // if e1 is true, e1 || e2 is equal to e1:
-        // we jump directly to this label, without evaluating e2
-        mv.visitLabel(end);
-    }
-}
-
-/**
- * A logical "not" expression.
- */
-class Not extends Exp {
-
-    Exp e;
-
-    Not(final Exp e) {
-        this.e = e;
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // computes !e1 by evaluating 1 - e1
-        mv.visitLdcInsn(new Integer(1));
-        e.compile(mv);
-        mv.visitInsn(ISUB);
-    }
-}
diff --git a/asm4/examples/compile/src/Expression.java b/asm4/examples/compile/src/Expression.java
deleted file mode 100644
index 83d2eb2..0000000
--- a/asm4/examples/compile/src/Expression.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-/**
- * An integer or boolean expression of at most two variables.
- * 
- * @author Eric Bruneton
- */
-public interface Expression {
-
-    /**
-     * Evaluates this expression.
-     * 
-     * @param i
-     *            the value of the first variable.
-     * @param j
-     *            the value of the second variable.
-     * @return the value of this expression for the given variable values.
-     */
-    int eval(int i, int j);
-}
diff --git a/asm4/examples/dependencies/etc/execute.properties b/asm4/examples/dependencies/etc/execute.properties
deleted file mode 100644
index 345cc81..0000000
--- a/asm4/examples/dependencies/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname org.objectweb.asm.depend.DependencyTracker
-run.parameters ../../lib/asm-4.0.jar
diff --git a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyTracker.java b/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyTracker.java
deleted file mode 100644
index e20304c..0000000
--- a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyTracker.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.depend;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import javax.imageio.ImageIO;
-
-import org.objectweb.asm.ClassReader;
-
-/**
- * DependencyTracker
- * 
- * @author Eugene Kuleshov
- * 
- * @see "http://www.onjava.com/pub/a/onjava/2005/08/17/asm3.html"
- */
-public class DependencyTracker {
-
-    private static final int CELL_PAD = 1;
-
-    private static final int GRID_SIZE = 10;
-
-    private static final int CELLS_SIZE = 8;
-
-    private static final int LABEL_WIDTH = 200;
-
-    private static final String LABEL_FONT = "Tahoma-9";
-
-    public static void main(final String[] args) throws IOException {
-        DependencyVisitor v = new DependencyVisitor();
-
-        ZipFile f = new ZipFile(args[0]);
-
-        long l1 = System.currentTimeMillis();
-        Enumeration<? extends ZipEntry> en = f.entries();
-        while (en.hasMoreElements()) {
-            ZipEntry e = en.nextElement();
-            String name = e.getName();
-            if (name.endsWith(".class")) {
-                new ClassReader(f.getInputStream(e)).accept(v, 0);
-            }
-        }
-        long l2 = System.currentTimeMillis();
-
-        Map<String, Map<String, Integer>> globals = v.getGlobals();
-        Set<String> jarPackages = globals.keySet();
-        Set<String> classPackages = v.getPackages();
-        int size = classPackages.size();
-        System.err.println("time: " + (l2 - l1) / 1000f + "  " + size);
-
-        String[] jarNames = jarPackages.toArray(new String[jarPackages.size()]);
-        String[] classNames = classPackages.toArray(new String[classPackages
-                .size()]);
-        Arrays.sort(jarNames);
-        Arrays.sort(classNames);
-
-        buildDiagram(jarNames, classNames, globals);
-    }
-
-    public static void buildDiagram(final String[] jarNames,
-            final String[] classNames,
-            final Map<String, Map<String, Integer>> globals) throws IOException {
-        // normalize
-        int max = 0;
-        for (int i = 0; i < classNames.length; i++) {
-            Map<String, Integer> map = globals.get(classNames[i]);
-            if (map == null) {
-                continue;
-            }
-            Integer maxCount = Collections.max(map.values());
-            if (maxCount > max) {
-                max = maxCount;
-            }
-        }
-
-        List<Color> colors = new ArrayList<Color>();
-        for (int i = LABEL_WIDTH; i >= 0; i--) {
-            colors.add(new Color(i, i, 255));
-        }
-        for (int i = 255; i >= 128; i--) {
-            colors.add(new Color(0, 0, i));
-        }
-        int maxcolor = colors.size() - 1;
-
-        int heigh = CELL_PAD + (CELLS_SIZE + CELL_PAD) * classNames.length;
-        int width = CELL_PAD + (CELLS_SIZE + CELL_PAD) * jarNames.length;
-
-        BufferedImage img = new BufferedImage(width + LABEL_WIDTH, heigh
-                + LABEL_WIDTH, BufferedImage.TYPE_INT_RGB);
-
-        Graphics2D g = img.createGraphics();
-        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                RenderingHints.VALUE_ANTIALIAS_ON);
-
-        g.setColor(Color.WHITE);
-        g.fillRect(0, 0, width + LABEL_WIDTH, heigh + LABEL_WIDTH);
-
-        // draw lines
-        g.setColor(Color.LIGHT_GRAY);
-        for (int y = GRID_SIZE; y < classNames.length; y += GRID_SIZE) {
-            g.drawLine(0, y * (CELLS_SIZE + CELL_PAD), width, y
-                    * (CELLS_SIZE + CELL_PAD));
-        }
-        for (int x = GRID_SIZE; x < jarNames.length; x += GRID_SIZE) {
-            g.drawLine(x * (CELLS_SIZE + CELL_PAD), 0, x
-                    * (CELLS_SIZE + CELL_PAD), heigh);
-        }
-
-        // draw diagram
-        for (int y = 0; y < classNames.length; y++) {
-            // System.err.println( y+" : "+classNames[ y]);
-
-            for (int x = 0; x < jarNames.length; x++) {
-                Map<String, Integer> map = globals.get(jarNames[x]);
-
-                Integer count = map == null ? null : map.get(classNames[y]);
-                if (count != null) {
-                    int b = (int) ((float) count * maxcolor / max);
-
-                    g.setColor(colors.get(b));
-                    g.fillRect(CELL_PAD + x * (CELLS_SIZE + CELL_PAD), CELL_PAD
-                            + y * (CELLS_SIZE + CELL_PAD), CELLS_SIZE,
-                            CELLS_SIZE);
-                }
-            }
-        }
-
-        // draw labels
-        Font f = Font.decode(LABEL_FONT);
-        g.setFont(f);
-        // g.setColor( new Color( 70, 70, 255));
-        g.setColor(Color.GRAY);
-
-        for (int y = 0; y < classNames.length; y++) {
-            AffineTransform trans = g.getTransform();
-            g.transform(AffineTransform.getTranslateInstance(CELL_PAD * 2
-                    + width, CELLS_SIZE + y * (CELLS_SIZE + CELL_PAD)));
-            g.transform(AffineTransform.getRotateInstance(Math.PI / 12));
-            g.drawString(classNames[y], 0, 0);
-            g.setTransform(trans);
-        }
-
-        for (int x = 0; x < jarNames.length; x++) {
-            AffineTransform trans = g.getTransform();
-            g.transform(AffineTransform.getTranslateInstance(CELL_PAD * 2 + x
-                    * (CELLS_SIZE + CELL_PAD), heigh + CELL_PAD * 2));
-            g.transform(AffineTransform.getRotateInstance(Math.PI / 2.5));
-            g.drawString(jarNames[x], 0, 0);
-            g.setTransform(trans);
-        }
-
-        FileOutputStream fos = new FileOutputStream("test.png");
-        ImageIO.write(img, "png", fos);
-        fos.flush();
-        fos.close();
-    }
-}
diff --git a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyVisitor.java b/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyVisitor.java
deleted file mode 100644
index bd8d76e..0000000
--- a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyVisitor.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.depend;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.signature.SignatureReader;
-import org.objectweb.asm.signature.SignatureVisitor;
-
-/**
- * DependencyVisitor
- * 
- * @author Eugene Kuleshov
- */
-public class DependencyVisitor extends ClassVisitor {
-    Set<String> packages = new HashSet<String>();
-
-    Map<String, Map<String, Integer>> groups = new HashMap<String, Map<String, Integer>>();
-
-    Map<String, Integer> current;
-
-    public Map<String, Map<String, Integer>> getGlobals() {
-        return groups;
-    }
-
-    public Set<String> getPackages() {
-        return packages;
-    }
-
-    public DependencyVisitor() {
-        super(Opcodes.ASM4);
-    }
-
-    // ClassVisitor
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        String p = getGroupKey(name);
-        current = groups.get(p);
-        if (current == null) {
-            current = new HashMap<String, Integer>();
-            groups.put(p, current);
-        }
-
-        if (signature == null) {
-            if (superName != null) {
-                addInternalName(superName);
-            }
-            addInternalNames(interfaces);
-        } else {
-            addSignature(signature);
-        }
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        addDesc(desc);
-        return new AnnotationDependencyVisitor();
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        if (signature == null) {
-            addDesc(desc);
-        } else {
-            addTypeSignature(signature);
-        }
-        if (value instanceof Type) {
-            addType((Type) value);
-        }
-        return new FieldDependencyVisitor();
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        if (signature == null) {
-            addMethodDesc(desc);
-        } else {
-            addSignature(signature);
-        }
-        addInternalNames(exceptions);
-        return new MethodDependencyVisitor();
-    }
-
-    class AnnotationDependencyVisitor extends AnnotationVisitor {
-
-        public AnnotationDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public void visit(final String name, final Object value) {
-            if (value instanceof Type) {
-                addType((Type) value);
-            }
-        }
-
-        @Override
-        public void visitEnum(final String name, final String desc,
-                final String value) {
-            addDesc(desc);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String name,
-                final String desc) {
-            addDesc(desc);
-            return this;
-        }
-
-        @Override
-        public AnnotationVisitor visitArray(final String name) {
-            return this;
-        }
-    }
-
-    class FieldDependencyVisitor extends FieldVisitor {
-
-        public FieldDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-            addDesc(desc);
-            return new AnnotationDependencyVisitor();
-        }
-    }
-
-    class MethodDependencyVisitor extends MethodVisitor {
-
-        public MethodDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotationDefault() {
-            return new AnnotationDependencyVisitor();
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String desc,
-                final boolean visible) {
-            addDesc(desc);
-            return new AnnotationDependencyVisitor();
-        }
-
-        @Override
-        public AnnotationVisitor visitParameterAnnotation(final int parameter,
-                final String desc, final boolean visible) {
-            addDesc(desc);
-            return new AnnotationDependencyVisitor();
-        }
-
-        @Override
-        public void visitTypeInsn(final int opcode, final String type) {
-            addType(Type.getObjectType(type));
-        }
-
-        @Override
-        public void visitFieldInsn(final int opcode, final String owner,
-                final String name, final String desc) {
-            addInternalName(owner);
-            addDesc(desc);
-        }
-
-        @Override
-        public void visitMethodInsn(final int opcode, final String owner,
-                final String name, final String desc) {
-            addInternalName(owner);
-            addMethodDesc(desc);
-        }
-
-        @Override
-        public void visitInvokeDynamicInsn(String name, String desc,
-                Handle bsm, Object... bsmArgs) {
-            addMethodDesc(desc);
-            addConstant(bsm);
-            for (int i = 0; i < bsmArgs.length; i++) {
-                addConstant(bsmArgs[i]);
-            }
-        }
-
-        @Override
-        public void visitLdcInsn(final Object cst) {
-            addConstant(cst);
-        }
-
-        @Override
-        public void visitMultiANewArrayInsn(final String desc, final int dims) {
-            addDesc(desc);
-        }
-
-        @Override
-        public void visitLocalVariable(final String name, final String desc,
-                final String signature, final Label start, final Label end,
-                final int index) {
-            addTypeSignature(signature);
-        }
-
-        @Override
-        public void visitTryCatchBlock(final Label start, final Label end,
-                final Label handler, final String type) {
-            if (type != null) {
-                addInternalName(type);
-            }
-        }
-    }
-
-    class SignatureDependencyVisitor extends SignatureVisitor {
-
-        String signatureClassName;
-
-        public SignatureDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public void visitClassType(final String name) {
-            signatureClassName = name;
-            addInternalName(name);
-        }
-
-        @Override
-        public void visitInnerClassType(final String name) {
-            signatureClassName = signatureClassName + "$" + name;
-            addInternalName(signatureClassName);
-        }
-    }
-
-    // ---------------------------------------------
-
-    private String getGroupKey(String name) {
-        int n = name.lastIndexOf('/');
-        if (n > -1) {
-            name = name.substring(0, n);
-        }
-        packages.add(name);
-        return name;
-    }
-
-    private void addName(final String name) {
-        if (name == null) {
-            return;
-        }
-        String p = getGroupKey(name);
-        if (current.containsKey(p)) {
-            current.put(p, current.get(p) + 1);
-        } else {
-            current.put(p, 1);
-        }
-    }
-
-    void addInternalName(final String name) {
-        addType(Type.getObjectType(name));
-    }
-
-    private void addInternalNames(final String[] names) {
-        for (int i = 0; names != null && i < names.length; i++) {
-            addInternalName(names[i]);
-        }
-    }
-
-    void addDesc(final String desc) {
-        addType(Type.getType(desc));
-    }
-
-    void addMethodDesc(final String desc) {
-        addType(Type.getReturnType(desc));
-        Type[] types = Type.getArgumentTypes(desc);
-        for (int i = 0; i < types.length; i++) {
-            addType(types[i]);
-        }
-    }
-
-    void addType(final Type t) {
-        switch (t.getSort()) {
-        case Type.ARRAY:
-            addType(t.getElementType());
-            break;
-        case Type.OBJECT:
-            addName(t.getInternalName());
-            break;
-        case Type.METHOD:
-            addMethodDesc(t.getDescriptor());
-            break;
-        }
-    }
-
-    private void addSignature(final String signature) {
-        if (signature != null) {
-            new SignatureReader(signature)
-                    .accept(new SignatureDependencyVisitor());
-        }
-    }
-
-    void addTypeSignature(final String signature) {
-        if (signature != null) {
-            new SignatureReader(signature)
-                    .acceptType(new SignatureDependencyVisitor());
-        }
-    }
-
-    void addConstant(final Object cst) {
-        if (cst instanceof Type) {
-            addType((Type) cst);
-        } else if (cst instanceof Handle) {
-            Handle h = (Handle) cst;
-            addInternalName(h.getOwner());
-            addMethodDesc(h.getDesc());
-        }
-    }
-}
diff --git a/asm4/examples/helloworld/etc/execute.properties b/asm4/examples/helloworld/etc/execute.properties
deleted file mode 100644
index f735b79..0000000
--- a/asm4/examples/helloworld/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname Helloworld
-run.parameters
diff --git a/asm4/examples/helloworld/src/Helloworld.java b/asm4/examples/helloworld/src/Helloworld.java
deleted file mode 100644
index dcc905a..0000000
--- a/asm4/examples/helloworld/src/Helloworld.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.GeneratorAdapter;
-import org.objectweb.asm.commons.Method;
-
-/**
- * @author Eric Bruneton
- */
-public class Helloworld extends ClassLoader implements Opcodes {
-
-    public static void main(final String args[]) throws Exception {
-
-        // Generates the bytecode corresponding to the following Java class:
-        //
-        // public class Example {
-        // public static void main (String[] args) {
-        // System.out.println("Hello world!");
-        // }
-        // }
-
-        // creates a ClassWriter for the Example public class,
-        // which inherits from Object
-        ClassWriter cw = new ClassWriter(0);
-        cw.visit(V1_1, ACC_PUBLIC, "Example", null, "java/lang/Object", null);
-
-        // creates a MethodWriter for the (implicit) constructor
-        MethodVisitor mw = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null,
-                null);
-        // pushes the 'this' variable
-        mw.visitVarInsn(ALOAD, 0);
-        // invokes the super class constructor
-        mw.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mw.visitInsn(RETURN);
-        // this code uses a maximum of one stack element and one local variable
-        mw.visitMaxs(1, 1);
-        mw.visitEnd();
-
-        // creates a MethodWriter for the 'main' method
-        mw = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main",
-                "([Ljava/lang/String;)V", null, null);
-        // pushes the 'out' field (of type PrintStream) of the System class
-        mw.visitFieldInsn(GETSTATIC, "java/lang/System", "out",
-                "Ljava/io/PrintStream;");
-        // pushes the "Hello World!" String constant
-        mw.visitLdcInsn("Hello world!");
-        // invokes the 'println' method (defined in the PrintStream class)
-        mw.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
-                "(Ljava/lang/String;)V");
-        mw.visitInsn(RETURN);
-        // this code uses a maximum of two stack elements and two local
-        // variables
-        mw.visitMaxs(2, 2);
-        mw.visitEnd();
-
-        // gets the bytecode of the Example class, and loads it dynamically
-        byte[] code = cw.toByteArray();
-
-        FileOutputStream fos = new FileOutputStream("Example.class");
-        fos.write(code);
-        fos.close();
-
-        Helloworld loader = new Helloworld();
-        Class<?> exampleClass = loader.defineClass("Example", code, 0,
-                code.length);
-
-        // uses the dynamically generated class to print 'Helloworld'
-        exampleClass.getMethods()[0].invoke(null, new Object[] { null });
-
-        // ------------------------------------------------------------------------
-        // Same example with a GeneratorAdapter (more convenient but slower)
-        // ------------------------------------------------------------------------
-
-        cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cw.visit(V1_1, ACC_PUBLIC, "Example", null, "java/lang/Object", null);
-
-        // creates a GeneratorAdapter for the (implicit) constructor
-        Method m = Method.getMethod("void <init> ()");
-        GeneratorAdapter mg = new GeneratorAdapter(ACC_PUBLIC, m, null, null,
-                cw);
-        mg.loadThis();
-        mg.invokeConstructor(Type.getType(Object.class), m);
-        mg.returnValue();
-        mg.endMethod();
-
-        // creates a GeneratorAdapter for the 'main' method
-        m = Method.getMethod("void main (String[])");
-        mg = new GeneratorAdapter(ACC_PUBLIC + ACC_STATIC, m, null, null, cw);
-        mg.getStatic(Type.getType(System.class), "out",
-                Type.getType(PrintStream.class));
-        mg.push("Hello world!");
-        mg.invokeVirtual(Type.getType(PrintStream.class),
-                Method.getMethod("void println (String)"));
-        mg.returnValue();
-        mg.endMethod();
-
-        cw.visitEnd();
-
-        code = cw.toByteArray();
-        loader = new Helloworld();
-        exampleClass = loader.defineClass("Example", code, 0, code.length);
-
-        // uses the dynamically generated class to print 'Helloworld'
-        exampleClass.getMethods()[0].invoke(null, new Object[] { null });
-    }
-}
diff --git a/asm4/examples/jasmin/etc/execute.properties b/asm4/examples/jasmin/etc/execute.properties
deleted file mode 100644
index 3c53857..0000000
--- a/asm4/examples/jasmin/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-run.classname JasminifierClassAdapter
-run.parameters java.lang.Object
diff --git a/asm4/examples/jasmin/src/JasminifierClassAdapter.java b/asm4/examples/jasmin/src/JasminifierClassAdapter.java
deleted file mode 100644
index 45d9073..0000000
--- a/asm4/examples/jasmin/src/JasminifierClassAdapter.java
+++ /dev/null
@@ -1,900 +0,0 @@
-/***

- * ASM: a very small and fast Java bytecode manipulation framework

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * 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.

- */

-

-import java.io.FileInputStream;

-import java.io.PrintWriter;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-import org.objectweb.asm.ClassReader;

-import org.objectweb.asm.ClassVisitor;

-import org.objectweb.asm.Label;

-import org.objectweb.asm.MethodVisitor;

-import org.objectweb.asm.Opcodes;

-import org.objectweb.asm.Type;

-import org.objectweb.asm.tree.AbstractInsnNode;

-import org.objectweb.asm.tree.AnnotationNode;

-import org.objectweb.asm.tree.ClassNode;

-import org.objectweb.asm.tree.FieldNode;

-import org.objectweb.asm.tree.InnerClassNode;

-import org.objectweb.asm.tree.LabelNode;

-import org.objectweb.asm.tree.LocalVariableNode;

-import org.objectweb.asm.tree.MethodNode;

-import org.objectweb.asm.tree.TryCatchBlockNode;

-import org.objectweb.asm.util.Printer;

-

-/**

- * A {@link ClassVisitor} that prints a disassembled view of the classes it

- * visits in Jasmin assembler format. This class visitor can be used alone (see

- * the {@link #main main} method) to disassemble a class. It can also be used in

- * the middle of class visitor chain to trace the class that is visited at a

- * given point in this chain. This may be uselful for debugging purposes.

- * <p>

- * The trace printed when visiting the <tt>Hello</tt> class is the following:

- * <p>

- * <blockquote>

- * 

- * <pre>

- * .bytecode 45.3

- * .class public Hello

- * .super java/lang/Object

- * 

- * .method public <init>()V

- * aload 0

- * invokespecial java/lang/Object/<init>()V

- * return

- * .limit locals 1

- * .limit stack 1

- * .end method

- * 

- * .method public static main([Ljava/lang/String;)V

- * getstatic java/lang/System/out Ljava/io/PrintStream;

- * ldc "hello"

- * invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V

- * return

- * .limit locals 2

- * .limit stack 2

- * .end method

- * </pre>

- * 

- * </blockquote> where <tt>Hello</tt> is defined by:

- * <p>

- * <blockquote>

- * 

- * <pre>

- * public class Hello {

- * 

- *     public static void main(String[] args) {

- *         System.out.println(&quot;hello&quot;);

- *     }

- * }

- * </pre>

- * 

- * </blockquote>

- * 

- * @author Eric Bruneton

- */

-public class JasminifierClassAdapter extends ClassVisitor {

-

-    /**

-     * The print writer to be used to print the class.

-     */

-    protected PrintWriter pw;

-

-    /**

-     * The label names. This map associate String values to Label keys.

-     */

-    protected final Map<Label, String> labelNames;

-

-    /**

-     * Prints a disassembled view of the given class in Jasmin assembler format

-     * to the standard output.

-     * <p>

-     * Usage: JasminifierClassAdapter [-debug] &lt;fully qualified class name or

-     * class file name &gt;

-     * 

-     * @param args

-     *            the command line arguments.

-     * 

-     * @throws Exception

-     *             if the class cannot be found, or if an IO exception occurs.

-     */

-    public static void main(final String[] args) throws Exception {

-        int i = 0;

-        int flags = ClassReader.SKIP_DEBUG;

-

-        boolean ok = true;

-        if (args.length < 1 || args.length > 2) {

-            ok = false;

-        }

-        if (ok && "-debug".equals(args[0])) {

-            i = 1;

-            flags = 0;

-            if (args.length != 2) {

-                ok = false;

-            }

-        }

-        if (!ok) {

-            System.err

-                    .println("Prints a disassembled view of the given class.");

-            System.err.println("Usage: JasminifierClassAdapter [-debug] "

-                    + "<fully qualified class name or class file name>");

-            return;

-        }

-        ClassReader cr;

-        if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1

-                || args[i].indexOf('/') > -1) {

-            cr = new ClassReader(new FileInputStream(args[i]));

-        } else {

-            cr = new ClassReader(args[i]);

-        }

-        cr.accept(new JasminifierClassAdapter(

-                new PrintWriter(System.out, true), null), flags

-                | ClassReader.EXPAND_FRAMES);

-    }

-

-    /**

-     * Constructs a new {@link JasminifierClassAdapter}.

-     * 

-     * @param pw

-     *            the print writer to be used to print the class.

-     * @param cv

-     *            the {@link ClassVisitor} to which this visitor delegates

-     *            calls. May be <tt>null</tt>.

-     */

-    public JasminifierClassAdapter(final PrintWriter pw, final ClassVisitor cv) {

-        super(Opcodes.ASM4, new ClassNode() {

-            @Override

-            public void visitEnd() {

-                if (cv != null) {

-                    accept(cv);

-                }

-            }

-        });

-        this.pw = pw;

-        labelNames = new HashMap<Label, String>();

-    }

-

-    @Override

-    public void visitEnd() {

-        ClassNode cn = (ClassNode) cv;

-        pw.print(".bytecode ");

-        pw.print(cn.version & 0xFFFF);

-        pw.print('.');

-        pw.println(cn.version >>> 16);

-        println(".source ", cn.sourceFile);

-        pw.print(".class");

-        pw.print(access(cn.access));

-        pw.print(' ');

-        pw.println(cn.name);

-        if (cn.superName == null) { // TODO Jasmin bug workaround

-            println(".super ", "java/lang/Object");

-        } else {

-            println(".super ", cn.superName);

-        }

-        for (int i = 0; i < cn.interfaces.size(); ++i) {

-            println(".implements ", cn.interfaces.get(i));

-        }

-        if (cn.signature != null)

-            println(".signature ", '"' + cn.signature + '"');

-        if (cn.outerClass != null) {

-            pw.print(".enclosing method ");

-            pw.print(cn.outerClass);

-            if (cn.outerMethod != null) {

-                pw.print('/');

-                pw.print(cn.outerMethod);

-                pw.println(cn.outerMethodDesc);

-            } else {

-                pw.println();

-            }

-        }

-        if ((cn.access & Opcodes.ACC_DEPRECATED) != 0) {

-            pw.println(".deprecated");

-        }

-        printAnnotations(cn.visibleAnnotations, 1);

-        printAnnotations(cn.invisibleAnnotations, 2);

-        println(".debug ", cn.sourceDebug == null ? null

-                : '"' + cn.sourceDebug + '"');

-

-        for (int i = 0; i < cn.innerClasses.size(); ++i) {

-            InnerClassNode in = cn.innerClasses.get(i);

-            pw.print(".inner class");

-            pw.print(access(in.access));

-            if (in.innerName != null) {

-                pw.print(' ');

-                pw.print(in.innerName);

-            }

-            if (in.name != null) {

-                pw.print(" inner ");

-                pw.print(in.name);

-            }

-            if (in.outerName != null) {

-                pw.print(" outer ");

-                pw.print(in.outerName);

-            }

-            pw.println();

-        }

-

-        for (int i = 0; i < cn.fields.size(); ++i) {

-            FieldNode fn = cn.fields.get(i);

-            boolean annotations = false;

-            if (fn.visibleAnnotations != null

-                    && fn.visibleAnnotations.size() > 0) {

-                annotations = true;

-            }

-            if (fn.invisibleAnnotations != null

-                    && fn.invisibleAnnotations.size() > 0) {

-                annotations = true;

-            }

-            boolean deprecated = (fn.access & Opcodes.ACC_DEPRECATED) != 0;

-            pw.print("\n.field");

-            pw.print(access(fn.access));

-            pw.print(" '");

-            pw.print(fn.name);

-            pw.print("' ");

-            pw.print(fn.desc);

-            if (fn.signature != null && (!deprecated && !annotations)) {

-                pw.print(" signature \"");

-                pw.print(fn.signature);

-                pw.print("\"");

-            }

-            if (fn.value instanceof String) {

-                StringBuffer buf = new StringBuffer();

-                Printer.appendString(buf, (String) fn.value);

-                pw.print(" = ");

-                pw.print(buf.toString());

-            } else if (fn.value != null) {

-                pw.print(" = ");

-                print(fn.value);

-                pw.println();

-            }

-            pw.println();

-            if (fn.signature != null && (deprecated || annotations)) {

-                pw.print(".signature \"");

-                pw.print(fn.signature);

-                pw.println("\"");

-            }

-            if (deprecated) {

-                pw.println(".deprecated");

-            }

-            printAnnotations(fn.visibleAnnotations, 1);

-            printAnnotations(fn.invisibleAnnotations, 2);

-            if (deprecated || annotations) {

-                pw.println(".end field");

-            }

-        }

-

-        for (int i = 0; i < cn.methods.size(); ++i) {

-            MethodNode mn = cn.methods.get(i);

-            pw.print("\n.method");

-            pw.print(access(mn.access));

-            pw.print(' ');

-            pw.print(mn.name);

-            pw.println(mn.desc);

-            if (mn.signature != null) {

-                pw.print(".signature \"");

-                pw.print(mn.signature);

-                pw.println("\"");

-            }

-            if (mn.annotationDefault != null) {

-                pw.println(".annotation default");

-                printAnnotationValue(mn.annotationDefault);

-                pw.println(".end annotation");

-            }

-            printAnnotations(mn.visibleAnnotations, 1);

-            printAnnotations(mn.invisibleAnnotations, 2);

-            if (mn.visibleParameterAnnotations != null) {

-                for (int j = 0; j < mn.visibleParameterAnnotations.length; ++j) {

-                    printAnnotations(mn.visibleParameterAnnotations[j], 1);

-                }

-            }

-            if (mn.invisibleParameterAnnotations != null) {

-                for (int j = 0; j < mn.invisibleParameterAnnotations.length; ++j) {

-                    printAnnotations(mn.invisibleParameterAnnotations[j], 2);

-                }

-            }

-            for (int j = 0; j < mn.exceptions.size(); ++j) {

-                println(".throws ", mn.exceptions.get(j));

-            }

-            if ((mn.access & Opcodes.ACC_DEPRECATED) != 0) {

-                pw.println(".deprecated");

-            }

-            if (mn.instructions.size() > 0) {

-                labelNames.clear();

-                for (int j = 0; j < mn.tryCatchBlocks.size(); ++j) {

-                    TryCatchBlockNode tcb = mn.tryCatchBlocks.get(j);

-                    pw.print(".catch ");

-                    pw.print(tcb.type);

-                    pw.print(" from ");

-                    print(tcb.start);

-                    pw.print(" to ");

-                    print(tcb.end);

-                    pw.print(" using ");

-                    print(tcb.handler);

-                    pw.println();

-                }

-                for (int j = 0; j < mn.instructions.size(); ++j) {

-                    AbstractInsnNode in = mn.instructions.get(j);

-                    in.accept(new MethodVisitor(Opcodes.ASM4) {

-

-                        @Override

-                        public void visitFrame(int type, int local,

-                                Object[] locals, int stack, Object[] stacks) {

-                            if (type != Opcodes.F_FULL && type != Opcodes.F_NEW) {

-                                throw new RuntimeException(

-                                        "Compressed frames unsupported, use EXPAND_FRAMES option");

-                            }

-                            pw.println(".stack");

-                            for (int i = 0; i < local; ++i) {

-                                pw.print("locals ");

-                                printFrameType(locals[i]);

-                                pw.println();

-                            }

-                            for (int i = 0; i < stack; ++i) {

-                                pw.print("stack ");

-                                printFrameType(stacks[i]);

-                                pw.println();

-                            }

-                            pw.println(".end stack");

-                        }

-

-                        @Override

-                        public void visitInsn(int opcode) {

-                            print(opcode);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitIntInsn(int opcode, int operand) {

-                            print(opcode);

-                            if (opcode == Opcodes.NEWARRAY) {

-                                switch (operand) {

-                                case Opcodes.T_BOOLEAN:

-                                    pw.println(" boolean");

-                                    break;

-                                case Opcodes.T_CHAR:

-                                    pw.println(" char");

-                                    break;

-                                case Opcodes.T_FLOAT:

-                                    pw.println(" float");

-                                    break;

-                                case Opcodes.T_DOUBLE:

-                                    pw.println(" double");

-                                    break;

-                                case Opcodes.T_BYTE:

-                                    pw.println(" byte");

-                                    break;

-                                case Opcodes.T_SHORT:

-                                    pw.println(" short");

-                                    break;

-                                case Opcodes.T_INT:

-                                    pw.println(" int");

-                                    break;

-                                case Opcodes.T_LONG:

-                                default:

-                                    pw.println(" long");

-                                    break;

-                                }

-                            } else {

-                                pw.print(' ');

-                                pw.println(operand);

-                            }

-                        }

-

-                        @Override

-                        public void visitVarInsn(int opcode, int var) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.println(var);

-                        }

-

-                        @Override

-                        public void visitTypeInsn(int opcode, String type) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.println(type);

-                        }

-

-                        @Override

-                        public void visitFieldInsn(int opcode, String owner,

-                                String name, String desc) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.print(owner);

-                            pw.print('/');

-                            pw.print(name);

-                            pw.print(' ');

-                            pw.println(desc);

-                        }

-

-                        @Override

-                        public void visitMethodInsn(int opcode, String owner,

-                                String name, String desc) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.print(owner);

-                            pw.print('/');

-                            pw.print(name);

-                            pw.print(desc);

-                            if (opcode == Opcodes.INVOKEINTERFACE) {

-                                pw.print(' ');

-                                pw.print((Type.getArgumentsAndReturnSizes(desc) >> 2) - 1);

-                            }

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitJumpInsn(int opcode, Label label) {

-                            print(opcode);

-                            pw.print(' ');

-                            print(label);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitLabel(Label label) {

-                            print(label);

-                            pw.println(':');

-                        }

-

-                        @Override

-                        public void visitLdcInsn(Object cst) {

-                            pw.print("ldc ");

-                            if (cst instanceof Type) {

-                                pw.print(((Type) cst).getInternalName());

-                            } else {

-                                print(cst);

-                            }

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitIincInsn(int var, int increment) {

-                            pw.print("iinc ");

-                            pw.print(var);

-                            pw.print(' ');

-                            pw.println(increment);

-                        }

-

-                        @Override

-                        public void visitTableSwitchInsn(int min, int max,

-                                Label dflt, Label... labels) {

-                            pw.print("tableswitch ");

-                            pw.println(min);

-                            for (int i = 0; i < labels.length; ++i) {

-                                print(labels[i]);

-                                pw.println();

-                            }

-                            pw.print("default : ");

-                            print(dflt);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitLookupSwitchInsn(Label dflt,

-                                int[] keys, Label[] labels) {

-                            if (keys.length == 0) {

-                                pw.print("goto "); // TODO Jasmin bug

-                                                   // workaround

-                                print(dflt);

-                                pw.println();

-                                return;

-                            }

-                            pw.println("lookupswitch");

-                            for (int i = 0; i < keys.length; ++i) {

-                                pw.print(keys[i]);

-                                pw.print(" : ");

-                                print(labels[i]);

-                                pw.println();

-                            }

-                            pw.print("default : ");

-                            print(dflt);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitMultiANewArrayInsn(String desc,

-                                int dims) {

-                            pw.print("multianewarray ");

-                            pw.print(desc);

-                            pw.print(' ');

-                            pw.println(dims);

-                        }

-

-                        @Override

-                        public void visitLineNumber(int line, Label start) {

-                            pw.print(".line ");

-                            pw.println(line);

-                        }

-                    });

-                }

-                for (int j = 0; j < mn.localVariables.size(); ++j) {

-                    LocalVariableNode lv = mn.localVariables.get(j);

-                    pw.print(".var ");

-                    pw.print(lv.index);

-                    pw.print(" is '");

-                    pw.print(lv.name);

-                    pw.print("' ");

-                    pw.print(lv.desc);

-                    if (lv.signature != null) {

-                        pw.print(" signature \"");

-                        pw.print(lv.signature);

-                        pw.print("\"");

-                    }

-                    pw.print(" from ");

-                    print(lv.start);

-                    pw.print(" to ");

-                    print(lv.end);

-                    pw.println();

-                }

-                println(".limit locals ", Integer.toString(mn.maxLocals));

-                println(".limit stack ", Integer.toString(mn.maxStack));

-            }

-            pw.println(".end method");

-        }

-        super.visitEnd();

-    }

-

-    protected void println(final String directive, final String arg) {

-        if (arg != null) {

-            pw.print(directive);

-            pw.println(arg);

-        }

-    }

-

-    protected String access(final int access) {

-        StringBuffer b = new StringBuffer();

-        if ((access & Opcodes.ACC_PUBLIC) != 0) {

-            b.append(" public");

-        }

-        if ((access & Opcodes.ACC_PRIVATE) != 0) {

-            b.append(" private");

-        }

-        if ((access & Opcodes.ACC_PROTECTED) != 0) {

-            b.append(" protected");

-        }

-        if ((access & Opcodes.ACC_STATIC) != 0) {

-            b.append(" static");

-        }

-        if ((access & Opcodes.ACC_FINAL) != 0) {

-            b.append(" final");

-        }

-        if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {

-            b.append(" synchronized");

-        }

-        if ((access & Opcodes.ACC_VOLATILE) != 0) {

-            b.append(" volatile");

-        }

-        if ((access & Opcodes.ACC_TRANSIENT) != 0) {

-            b.append(" transient");

-        }

-        if ((access & Opcodes.ACC_NATIVE) != 0) {

-            b.append(" native");

-        }

-        if ((access & Opcodes.ACC_ABSTRACT) != 0) {

-            b.append(" abstract");

-        }

-        if ((access & Opcodes.ACC_STRICT) != 0) {

-            b.append(" fpstrict");

-        }

-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {

-            b.append(" synthetic");

-        }

-        if ((access & Opcodes.ACC_INTERFACE) != 0) {

-            b.append(" interface");

-        }

-        if ((access & Opcodes.ACC_ANNOTATION) != 0) {

-            b.append(" annotation");

-        }

-        if ((access & Opcodes.ACC_ENUM) != 0) {

-            b.append(" enum");

-        }

-        return b.toString();

-    }

-

-    protected void print(final int opcode) {

-        pw.print(Printer.OPCODES[opcode].toLowerCase());

-    }

-

-    protected void print(final Object cst) {

-        if (cst instanceof String) {

-            StringBuffer buf = new StringBuffer();

-            Printer.appendString(buf, (String) cst);

-            pw.print(buf.toString());

-        } else if (cst instanceof Float) {

-            Float f = (Float) cst;

-            if (f.isNaN() || f.isInfinite()) {

-                pw.print("0.0"); // TODO Jasmin bug workaround

-            } else {

-                pw.print(f);

-            }

-        } else if (cst instanceof Double) {

-            Double d = (Double) cst;

-            if (d.isNaN() || d.isInfinite()) {

-                pw.print("0.0"); // TODO Jasmin bug workaround

-            } else {

-                pw.print(d);

-            }

-        } else {

-            pw.print(cst);

-        }

-    }

-

-    protected void print(final Label l) {

-        String name = labelNames.get(l);

-        if (name == null) {

-            name = "L" + labelNames.size();

-            labelNames.put(l, name);

-        }

-        pw.print(name);

-    }

-

-    protected void print(final LabelNode l) {

-        print(l.getLabel());

-    }

-

-    protected void printAnnotations(final List<AnnotationNode> annotations,

-            int visible) {

-        if (annotations != null) {

-            for (int j = 0; j < annotations.size(); ++j) {

-                printAnnotation(annotations.get(j), visible, -1);

-            }

-        }

-    }

-

-    protected void printAnnotation(final AnnotationNode n, final int visible,

-            final int param) {

-        pw.print(".annotation ");

-        if (visible > 0) {

-            if (param == -1) {

-                pw.print(visible == 1 ? "visible " : "invisible ");

-            } else {

-                pw.print(visible == 1 ? "visibleparam " : "invisibleparam ");

-                pw.print(param);

-                pw.print(' ');

-            }

-            pw.print(n.desc);

-        }

-        pw.println();

-        if (n.values != null) {

-            for (int i = 0; i < n.values.size(); i += 2) {

-                pw.print(n.values.get(i));

-                pw.print(' ');

-                printAnnotationValue(n.values.get(i + 1));

-            }

-        }

-        pw.println(".end annotation");

-    }

-

-    protected void printAnnotationValue(final Object value) {

-        if (value instanceof String[]) {

-            pw.print("e ");

-            pw.print(((String[]) value)[0]);

-            pw.print(" = ");

-            print(((String[]) value)[1]);

-            pw.println();

-        } else if (value instanceof AnnotationNode) {

-            pw.print("@ ");

-            pw.print(((AnnotationNode) value).desc);

-            pw.print(" = ");

-            printAnnotation((AnnotationNode) value, 0, -1);

-        } else if (value instanceof byte[]) {

-            pw.print("[B = ");

-            byte[] v = (byte[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof boolean[]) {

-            pw.print("[Z = ");

-            boolean[] v = (boolean[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i] ? '1' : '0');

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof short[]) {

-            pw.print("[S = ");

-            short[] v = (short[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof char[]) {

-            pw.print("[C = ");

-            char[] v = (char[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(new Integer(v[i]));

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof int[]) {

-            pw.print("[I = ");

-            int[] v = (int[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof long[]) {

-            pw.print("[J = ");

-            long[] v = (long[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof float[]) {

-            pw.print("[F = ");

-            float[] v = (float[]) value;

-            for (int i = 0; i < v.length; i++) {

-                print(new Float(v[i]));

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof double[]) {

-            pw.print("[D = ");

-            double[] v = (double[]) value;

-            for (int i = 0; i < v.length; i++) {

-                print(new Double(v[i]));

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof List) {

-            List<?> l = (List<?>) value;

-            if (l.size() > 0) {

-                Object o = l.get(0);

-                if (o instanceof String[]) {

-                    pw.print("[e ");

-                    pw.print(((String[]) o)[0]);

-                    pw.print(" = ");

-                } else if (o instanceof AnnotationNode) {

-                    pw.print("[& ");

-                    pw.print(((AnnotationNode) o).desc);

-                    pw.print(" = ");

-                    pw.print("[@ = ");

-                } else if (o instanceof String) {

-                    pw.print("[s = ");

-                } else if (o instanceof Byte) {

-                    pw.print("[B = ");

-                } else if (o instanceof Boolean) {

-                    pw.print("[Z = ");

-                } else if (o instanceof Character) {

-                    pw.print("[C = ");

-                } else if (o instanceof Short) {

-                    pw.print("[S = ");

-                } else if (o instanceof Type) {

-                    pw.print("[c = ");

-                } else if (o instanceof Integer) {

-                    pw.print("[I = ");

-                } else if (o instanceof Float) {

-                    pw.print("[F = ");

-                } else if (o instanceof Long) {

-                    pw.print("[J = ");

-                } else if (o instanceof Double) {

-                    pw.print("[D = ");

-                }

-                for (int j = 0; j < l.size(); ++j) {

-                    printAnnotationArrayValue(l.get(j));

-                    pw.print(' ');

-                }

-            } else {

-                pw.print("; empty array annotation value");

-            }

-            pw.println();

-        } else if (value instanceof String) {

-            pw.print("s = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Byte) {

-            pw.print("B = ");

-            pw.println(((Byte) value).intValue());

-        } else if (value instanceof Boolean) {

-            pw.print("Z = ");

-            pw.println(((Boolean) value).booleanValue() ? 1 : 0);

-        } else if (value instanceof Character) {

-            pw.print("C = ");

-            pw.println(new Integer(((Character) value).charValue()));

-        } else if (value instanceof Short) {

-            pw.print("S = ");

-            pw.println(((Short) value).intValue());

-        } else if (value instanceof Type) {

-            pw.print("c = ");

-            pw.println(((Type) value).getDescriptor());

-        } else if (value instanceof Integer) {

-            pw.print("I = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Float) {

-            pw.print("F = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Long) {

-            pw.print("J = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Double) {

-            pw.print("D = ");

-            print(value);

-            pw.println();

-        } else {

-            throw new RuntimeException();

-        }

-    }

-

-    protected void printAnnotationArrayValue(final Object value) {

-        if (value instanceof String[]) {

-            print(((String[]) value)[1]);

-        } else if (value instanceof AnnotationNode) {

-            printAnnotation((AnnotationNode) value, 0, -1);

-        } else if (value instanceof String) {

-            print(value);

-        } else if (value instanceof Byte) {

-            pw.print(((Byte) value).intValue());

-        } else if (value instanceof Boolean) {

-            pw.print(((Boolean) value).booleanValue() ? 1 : 0);

-        } else if (value instanceof Character) {

-            pw.print(new Integer(((Character) value).charValue()));

-        } else if (value instanceof Short) {

-            pw.print(((Short) value).intValue());

-        } else if (value instanceof Type) {

-            pw.print(((Type) value).getDescriptor());

-        } else {

-            print(value);

-        }

-    }

-

-    protected void printFrameType(final Object type) {

-        if (type == Opcodes.TOP) {

-            pw.print("Top");

-        } else if (type == Opcodes.INTEGER) {

-            pw.print("Integer");

-        } else if (type == Opcodes.FLOAT) {

-            pw.print("Float");

-        } else if (type == Opcodes.LONG) {

-            pw.print("Long");

-        } else if (type == Opcodes.DOUBLE) {

-            pw.print("Double");

-        } else if (type == Opcodes.NULL) {

-            pw.print("Null");

-        } else if (type == Opcodes.UNINITIALIZED_THIS) {

-            pw.print("UninitializedThis");

-        } else if (type instanceof Label) {

-            pw.print("Uninitialized ");

-            print((Label) type);

-        } else {

-            pw.print("Object ");

-            pw.print(type);

-        }

-    }

-}

diff --git a/asm4/examples/jasmin/test/JasminifierClassAdapterTest.java b/asm4/examples/jasmin/test/JasminifierClassAdapterTest.java
deleted file mode 100644
index 888ec0a..0000000
--- a/asm4/examples/jasmin/test/JasminifierClassAdapterTest.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-import jas.jasError;
-import jasmin.ClassFile;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-class ClassFilter extends ClassVisitor {
-
-    public ClassFilter() {
-        super(Opcodes.ASM4, null);
-    }
-
-    public void setNext(final ClassVisitor cv) {
-        this.cv = cv;
-    }
-}
-
-class Comment extends Attribute {
-
-    public Comment() {
-        super("Comment");
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-
-        return new Comment();
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector();
-    }
-}
-
-class CodeComment extends Attribute {
-
-    public CodeComment() {
-        super("CodeComment");
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    public boolean isCodeAttribute() {
-        return true;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        return new CodeComment();
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector();
-    }
-
-    @Override
-    protected Label[] getLabels() {
-        super.getLabels();
-        return new Label[] { new Label() };
-    }
-}
-
-/**
- * JasminifierAdapterTest tests.
- * 
- * @author Eric Bruneton
- */
-public class JasminifierClassAdapterTest extends TestCase {
-
-    protected String n;
-
-    protected InputStream is;
-
-    public static TestSuite suite() throws Exception {
-        return new JasminifierClassAdapterTest().getSuite();
-    }
-
-    public JasminifierClassAdapterTest() {
-        super("test");
-    }
-
-    protected void init(final String n, final InputStream is) {
-        this.n = n;
-        this.is = is;
-    }
-
-    protected TestSuite getSuite() throws Exception {
-        TestSuite suite = new TestSuite(getClass().getName());
-        String files = System.getProperty("asm.test") + ",";
-        String clazz = System.getProperty("asm.test.class");
-        String partcount = System.getProperty("parts");
-        String partid = System.getProperty("part");
-        int parts = partcount == null ? 1 : Integer.parseInt(partcount);
-        int part = partid == null ? 0 : Integer.parseInt(partid);
-        int id = 0;
-        while (files.indexOf(',') != -1) {
-            String file = files.substring(0, files.indexOf(','));
-            files = files.substring(files.indexOf(',') + 1);
-            File f = new File(file);
-            if (f.isDirectory()) {
-                scanDirectory("", f, suite, clazz);
-            } else {
-                ZipFile zip = new ZipFile(file);
-                Enumeration<? extends ZipEntry> entries = zip.entries();
-                while (entries.hasMoreElements()) {
-                    ZipEntry e = entries.nextElement();
-                    String n = e.getName();
-                    String p = n.replace('/', '.');
-                    System.out.println(n + " " + clazz);
-                    if (n.endsWith(".class")
-                            && (clazz == null || p.indexOf(clazz) != -1)) {
-                        n = p.substring(0, p.length() - 6);
-                        if (id % parts == part) {
-                            JasminifierClassAdapterTest t;
-                            InputStream is = zip.getInputStream(e);
-                            t = new JasminifierClassAdapterTest();
-                            t.init(n, is);
-                            suite.addTest(t);
-                        }
-                        ++id;
-                    }
-                }
-            }
-        }
-        return suite;
-    }
-
-    private void scanDirectory(final String path, final File f,
-            final TestSuite suite, final String clazz) throws Exception {
-        File[] fs = f.listFiles();
-        for (int i = 0; i < fs.length; ++i) {
-            String n = fs[i].getName();
-            String qn = path.length() == 0 ? n : path + "." + n;
-            if (fs[i].isDirectory()) {
-                scanDirectory(qn, fs[i], suite, clazz);
-            } else if (qn.endsWith(".class")
-                    && (clazz == null || qn.indexOf(clazz) != -1)) {
-                qn = qn.substring(0, qn.length() - 6);
-                InputStream is = new FileInputStream(fs[i]);
-                JasminifierClassAdapterTest t;
-                t = new JasminifierClassAdapterTest();
-                t.init(qn, is);
-                suite.addTest(t);
-            }
-        }
-    }
-
-    public void assertEquals(final ClassReader cr1, final ClassReader cr2)
-            throws Exception {
-        assertEquals(cr1, cr2, null, null);
-    }
-
-    public void assertEquals(final ClassReader cr1, final ClassReader cr2,
-            final ClassFilter filter1, final ClassFilter filter2)
-            throws Exception {
-        if (!Arrays.equals(cr1.b, cr2.b)) {
-            StringWriter sw1 = new StringWriter();
-            StringWriter sw2 = new StringWriter();
-            ClassVisitor cv1 = new TraceClassVisitor(new PrintWriter(sw1));
-            ClassVisitor cv2 = new TraceClassVisitor(new PrintWriter(sw2));
-            if (filter1 != null) {
-                filter1.setNext(cv1);
-            }
-            if (filter2 != null) {
-                filter2.setNext(cv2);
-            }
-            cr1.accept(filter1 == null ? cv1 : filter1, 0);
-            cr2.accept(filter2 == null ? cv2 : filter2, 0);
-            String s1 = sw1.toString();
-            String s2 = sw2.toString();
-            assertEquals("different data", s1, s2);
-        }
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + ": " + n;
-    }
-
-    public void test() throws Exception {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        ClassVisitor cv = new JasminifierClassAdapter(pw, cw);
-        cr.accept(cv, new Attribute[] { new Comment(), new CodeComment() },
-                ClassReader.EXPAND_FRAMES);
-        pw.close();
-        String jasmin = sw.toString();
-
-        ClassFile cf = new ClassFile();
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        cf.readJasmin(new StringReader(jasmin), "test", false);
-        if (cf.errorCount() != 0) {
-            throw new jasError();
-        }
-        cf.write(bos);
-        bos.close();
-
-        assertEquals(cr, new ClassReader(bos.toByteArray()), new ClassFilter() {
-
-            @Override
-            public void visit(int version, int access, String name,
-                    String signature, String superName, String[] interfaces) {
-                access |= Opcodes.ACC_SUPER; // Jasmin bug workaround
-                super.visit(version, access, name, signature, superName,
-                        interfaces);
-            }
-
-        }, null);
-    }
-}
diff --git a/asm4/examples/jasmin/test/build.xml b/asm4/examples/jasmin/test/build.xml
deleted file mode 100644
index 9ddf2a0..0000000
--- a/asm4/examples/jasmin/test/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="jasmin" default="test">
-
-  <condition property="asm.test" value="${java.home}/lib/rt.jar">
-    <not><isset property="asm.test"/></not>
-  </condition>
-
-  <condition property="asm.test.class" value="">
-    <not><isset property="asm.test.class"/></not>
-  </condition>
-
-  <path id="classpath">
-    <fileset dir="${basedir}/../../../lib">
-      <include name="*.jar"/>
-    </fileset>
-    <pathelement location="${basedir}/jasmin.jar"/>
-    <pathelement location="${basedir}/../build"/>
-  </path>
-
-  <target name="compile">
-    <javac srcdir="${basedir}" destdir="${basedir}" debug="on">
-      <classpath refid="classpath"/>
-      <include name="*.java"/>
-    </javac>
-  </target>
-
-  <target name="test" depends="compile">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${basedir}">
-        <fileset dir="${basedir}">
-          <include name="JasminifierClassAdapterTest.java"/>
-          <include name="JasminifierClassAdapterUnitTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/examples/jasmin/test/jasmin.jar b/asm4/examples/jasmin/test/jasmin.jar
deleted file mode 100644
index e276b1f..0000000
--- a/asm4/examples/jasmin/test/jasmin.jar
+++ /dev/null
Binary files differ
diff --git a/asm4/examples/jbfc/etc/execute.properties b/asm4/examples/jbfc/etc/execute.properties
deleted file mode 100644
index bc81fc9..0000000
--- a/asm4/examples/jbfc/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################

-#ASM: a very small and fast Java bytecode manipulation framework

-#Copyright (c) 2000-2011 INRIA, France Telecom

-#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.

-###############################################################################

-

-run.classname org.objectweb.asm.jbfc.BFCompilerTest

-run.parameters

diff --git a/asm4/examples/jbfc/src/jbfc.java b/asm4/examples/jbfc/src/jbfc.java
deleted file mode 100644
index 7a35504..0000000
--- a/asm4/examples/jbfc/src/jbfc.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.jbfc.BFCompiler;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * A naive implementation of compiler for Brain**** language.
- * http://www.muppetlabs.com/~breadbox/bf/ *
- * 
- * @author Eugene Kuleshov
- */
-public class jbfc {
-
-    public static void main(final String[] args) throws IOException {
-        if (args.length < 2) {
-            System.out
-                    .println("Usage: jbfc [-v] <bf program file> <java class name>");
-            return;
-        }
-
-        boolean verbose = false;
-        String fileName = null;
-        String className = null;
-        for (int i = 0; i < args.length; i++) {
-            if ("-v".equals(args[i])) {
-                verbose = true;
-            } else {
-                fileName = args[i];
-                className = args[i + 1];
-                break;
-            }
-        }
-
-        FileReader r = new FileReader(fileName);
-
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        BFCompiler c = new BFCompiler();
-        if (verbose) {
-            c.compile(r, className, fileName, new TraceClassVisitor(cw,
-                    new PrintWriter(System.out)));
-        } else {
-            c.compile(r, className, fileName, cw);
-        }
-
-        r.close();
-
-        FileOutputStream os = new FileOutputStream(className + ".class");
-        os.write(cw.toByteArray());
-        os.flush();
-        os.close();
-    }
-
-}
diff --git a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompiler.java b/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompiler.java
deleted file mode 100644
index be7a1f6..0000000
--- a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompiler.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.jbfc;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Stack;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A naive implementation of compiler for Brain**** language.
- * http://www.muppetlabs.com/~breadbox/bf/ *
- * 
- * @author Eugene Kuleshov
- */
-public class BFCompiler implements Opcodes {
-
-    private static final int V_IS = 0;
-
-    private static final int V_OS = 1;
-
-    private static final int V_P = 2;
-
-    private static final int V_D = 3;
-
-    public void compile(final Reader r, final String className,
-            final String sourceName, final ClassVisitor cv) throws IOException {
-        cv.visit(Opcodes.V1_3, ACC_PUBLIC, className.replace('.', '/'), null,
-                "java/lang/Object", null);
-        cv.visitSource(sourceName, null);
-
-        MethodVisitor mv;
-        {
-            mv = cv.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-            mv.visitCode();
-            mv.visitVarInsn(ALOAD, 0);
-            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>",
-                    "()V");
-            mv.visitInsn(RETURN);
-            mv.visitMaxs(1, 1);
-            mv.visitEnd();
-        }
-
-        {
-            // Init local vars for BF environment:
-            // 0 InputStream
-            // 1 OutputStream
-            // 2 Data Pointer
-            // 3 Data Array (int[ 30000])
-
-            mv = cv.visitMethod(ACC_PUBLIC + ACC_STATIC, "main",
-                    "([Ljava/lang/String;)V", null, null);
-            mv.visitCode();
-
-            mv.visitFieldInsn(GETSTATIC, "java/lang/System", "in",
-                    "Ljava/io/InputStream;");
-            mv.visitVarInsn(ASTORE, V_IS);
-
-            mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out",
-                    "Ljava/io/PrintStream;");
-            mv.visitVarInsn(ASTORE, V_OS);
-
-            mv.visitInsn(ICONST_0);
-            mv.visitVarInsn(ISTORE, V_P);
-
-            mv.visitIntInsn(SIPUSH, 30000);
-            mv.visitIntInsn(NEWARRAY, T_INT);
-            mv.visitVarInsn(ASTORE, V_D);
-
-            Stack<Label> labels = new Stack<Label>();
-
-            int d = 0;
-            int p = 0;
-
-            int c;
-            while ((c = r.read()) != -1) {
-                switch (c) {
-                case '>':
-                    d = storeD(mv, d);
-                    p++;
-                    break;
-
-                case '<':
-                    d = storeD(mv, d);
-                    p--;
-                    break;
-
-                case '+':
-                    p = storeP(mv, p);
-                    d++;
-                    break;
-
-                case '-':
-                    p = storeP(mv, p);
-                    d--;
-                    break;
-
-                case '.':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    mv.visitVarInsn(ALOAD, V_OS);
-                    mv.visitVarInsn(ALOAD, V_D);
-                    mv.visitVarInsn(ILOAD, V_P);
-                    mv.visitInsn(IALOAD);
-                    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/OutputStream",
-                            "write", "(I)V");
-                    break;
-
-                case ',':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    mv.visitVarInsn(ALOAD, V_D);
-                    mv.visitVarInsn(ILOAD, V_P);
-                    mv.visitVarInsn(ALOAD, V_IS);
-                    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/InputStream",
-                            "read", "()I");
-                    mv.visitInsn(IASTORE);
-                    break;
-
-                case '[':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    Label ls = new Label();
-                    Label le = new Label();
-                    labels.push(ls);
-                    labels.push(le);
-                    mv.visitJumpInsn(GOTO, le);
-                    mv.visitLabel(ls);
-                    break;
-
-                case ']':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    mv.visitLabel(labels.pop());
-                    mv.visitVarInsn(ALOAD, V_D);
-                    mv.visitVarInsn(ILOAD, V_P);
-                    mv.visitInsn(IALOAD);
-                    mv.visitJumpInsn(IFNE, labels.pop());
-                    break;
-                }
-            }
-
-            mv.visitInsn(RETURN);
-
-            mv.visitMaxs(1, 1);
-            mv.visitEnd();
-        }
-
-    }
-
-    private int storeD(final MethodVisitor mv, final int d) {
-        if (d != 0) {
-            mv.visitVarInsn(ALOAD, V_D);
-            mv.visitVarInsn(ILOAD, V_P);
-            mv.visitInsn(DUP2);
-            mv.visitInsn(IALOAD);
-            mv.visitIntInsn(SIPUSH, d);
-            mv.visitInsn(IADD);
-            mv.visitInsn(IASTORE);
-        }
-        return 0;
-    }
-
-    private int storeP(final MethodVisitor mv, final int p) {
-        if (p != 0) {
-            mv.visitIincInsn(V_P, p);
-        }
-        return 0;
-    }
-
-}
diff --git a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompilerTest.java b/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompilerTest.java
deleted file mode 100644
index 3fc1ebd..0000000
--- a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompilerTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.jbfc;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.io.StringReader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.ClassWriter;
-
-/**
- * A naive implementation of compiler for Brain**** language.
- * http://www.muppetlabs.com/~breadbox/bf/ *
- * 
- * @author Eugene Kuleshov
- */
-public class BFCompilerTest {
-
-    private BFCompiler bc;
-
-    private ClassWriter cw;
-
-    public static void main(String[] args) throws Throwable {
-        new BFCompilerTest().testCompileHelloWorld();
-        new BFCompilerTest().testCompileEcho();
-        new BFCompilerTest().testCompileYaPi();
-        new BFCompilerTest().testCompileTest1();
-    }
-
-    public BFCompilerTest() throws Exception {
-        bc = new BFCompiler();
-        cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-    }
-
-    public void testCompileHelloWorld() throws Throwable {
-        assertEquals(
-                "Hello World!\n",
-                execute("Hello",
-                        ">+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]"
-                                + "<.#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++["
-                                + "<++++>-]<+.[-]++++++++++.", ""));
-    }
-
-    public void testCompileEcho() throws Throwable {
-        assertEquals("AAA", execute("Echo", ",+[-.,+]", "AAA"));
-    }
-
-    public void testCompileYaPi() throws Throwable {
-        assertEquals("3.1415926\n", execute("YaPi",
-                ">+++++[<+++++++++>-]>>>>>>\r\n\r\n+++++ +++ (7 "
-                        + "digits)\r\n\r\n[<<+>++++++++++>-]<<+>>+++<[->>+"
-                        + "<-[>>>]>[[<+>-]>+>>]<<<<<]>[-]>[-]>[<+>-]<[>+<["
-                        + "-\r\n>>>>>>>+<<<<<<<]>[->+>>>>>>+<<<<<<<]>>>>++"
-                        + ">>-]>[-]<<<[<<<<<<<]<[->>>>>[>>>>>>>]<\r\n<<<<<"
-                        + "<[>>>>[-]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<<[<<++"
-                        + "++++++++>>-]>[<<<<[>+>>+<<<-\r\n]>>>[<<<+>>>-]>"
-                        + "-]<<<<[>>++>+<<<-]>>->[<<<+>>>-]>[-]<<<[->>+<-["
-                        + ">>>]>[[<+>-]>+>>]<\r\n<<<<]>[-]<<<<<<<<<]>+>>>>"
-                        + ">>->>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<[-]++++++++++"
-                        + "<[->>+<-\r\n[>>>]>[[<+>-]>+>>]<<<<<]>[-]>[>>>>>"
-                        + "+<<<<<-]>[<+>>+<-]>[<+>-]<<<+<+>>[-[-[-[-[-[-\r"
-                        + "\n[-[-[-<->[-<+<->>[<<+>>[-]]]]]]]]]]]]<[+++++["
-                        + "<<<<++++++++>>>>>++++++++<-]>+<<<<-\r\n>>[>+>-<"
-                        + "<<<<+++++++++>>>-]<<<<[>>>>>>+<<<<<<-]<[>>>>>>>"
-                        + ".<<<<<<<<[+.[-]]>>]>[<]<+\r\n>>>[<.>-]<[-]>>>>>"
-                        + "[-]<[>>[<<<<<<<+>>>>>>>-]<<-]]>>[-]>+<<<<[-]<]+"
-                        + "+++++++++.", ""));
-    }
-
-    public void testCompileTest1() throws Throwable {
-        assertEquals("H\n", execute("Test1",
-                "[]++++++++++[>++++++++++++++++++>+++++++>+<<<-]A;?@![#>>"
-                        + "+<<]>[>++<[-]]>.>.", ""));
-    }
-
-    public static void assertEquals(String s1, String s2) {
-        if (!s1.equals(s2)) {
-            System.out.println("ERROR: expected '" + s1 + "' but got '" + s2
-                    + "'");
-        }
-    }
-
-    private String execute(final String name, final String code,
-            final String input) throws Throwable {
-        bc.compile(new StringReader(code), name, name, cw);
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        InputStream is = System.in;
-        PrintStream os = System.out;
-        System.setIn(new ByteArrayInputStream(input.getBytes()));
-        System.setOut(new PrintStream(bos));
-
-        try {
-            TestClassLoader cl = new TestClassLoader(getClass()
-                    .getClassLoader(), name, cw.toByteArray());
-            Class<?> c = cl.loadClass(name);
-            Method m = c.getDeclaredMethod("main",
-                    new Class<?>[] { String[].class });
-            m.invoke(null, new Object[] { new String[0] });
-
-        } catch (InvocationTargetException ex) {
-            throw ex.getCause();
-        } finally {
-            System.setIn(is);
-            System.setOut(os);
-        }
-
-        String output = new String(bos.toByteArray(), "ASCII");
-
-        System.out
-                .println(code + " WITH INPUT '" + input + "' GIVES " + output);
-
-        return output;
-    }
-
-    private static final class TestClassLoader extends ClassLoader {
-
-        private final String className;
-
-        private final ClassLoader cl;
-
-        private final byte[] bytecode;
-
-        public TestClassLoader(final ClassLoader cl, final String className,
-                final byte[] bytecode) {
-            super();
-            this.cl = cl;
-            this.className = className;
-            this.bytecode = bytecode;
-        }
-
-        @Override
-        public Class<?> loadClass(final String name)
-                throws ClassNotFoundException {
-            if (className.equals(name)) {
-                return super.defineClass(className, bytecode, 0,
-                        bytecode.length);
-            }
-            return cl.loadClass(name);
-        }
-
-    }
-}
diff --git a/asm4/examples/xml/annotate.xsl b/asm4/examples/xml/annotate.xsl
deleted file mode 100644
index 82a5bf2..0000000
--- a/asm4/examples/xml/annotate.xsl
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  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.
--->
-
-<!--
-  XSL transformation for ASM XML document to add annotational comments to the local
-  variables (name, type and visibility) and labels (line number, try/catch info, 
-  number of incoming calls)
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII" />
-
-<!--
-  Annotate opcodes that are working with local variables
--->
-<xsl:template match="//ILOAD | //LLOAD | //FLOAD | //DLOAD | //ALOAD | //ISTORE | //LSTORE | //FSTORE | //DSTORE | //ASTORE | //RET">
-  <xsl:variable name="n"><xsl:value-of select="@var"/></xsl:variable>
-
-  <xsl:apply-templates select="../LocalVar[@var=$n]" mode="localVar"/>
-  
-  <xsl:element name="{name()}">
-    <xsl:attribute name="var"><xsl:value-of select="$n"/></xsl:attribute>
-  </xsl:element>
-</xsl:template>
-
-
-<xsl:template match="*" mode="localVar">
-  <xsl:comment><xsl:text> </xsl:text><xsl:value-of select="concat( @name, ' ', @desc, '  ', @start, ' - ', @end)"/><xsl:text> </xsl:text></xsl:comment>
-</xsl:template>
-
-
-<!--
-  Annotate labels
--->
-<xsl:template match="//method/code/Label">
-  <xsl:variable name="n"><xsl:value-of select="@name"/></xsl:variable>
-
-  <xsl:apply-templates select="../LineNumber[@start=$n]" mode="lineNumber"/>
-  <xsl:apply-templates select="../TryCatch[@start=$n]" mode="tryStart"/>
-  <xsl:apply-templates select="../TryCatch[@end=$n]" mode="tryEnd"/>
-  <xsl:apply-templates select="../TryCatch[@handler=$n]" mode="catch"/>
-
-  <xsl:variable name="c">
-    <!-- this is the slowest part -->
-    <xsl:value-of select="count(../IFEQ[@label=$n] | ../IFNE[@label=$n] | ../IFLT[@label=$n] | ../IFGE[@label=$n] | ../IFGT[@label=$n] | ../IFLE[@label=$n] | ../IF_ICMPEQ[@label=$n] | ../IF_ICMPNE[@label=$n] | ../IF_ICMPLT[@label=$n] | ../IF_ICMPGE[@label=$n] | ../IF_ICMPGT[@label=$n] | ../IF_ICMPLE[@label=$n] | ../IF_ACMPEQ[@label=$n] | ../IF_ACMPNE[@label=$n] | ../GOTO[@label=$n] | ../JSR[@label=$n] | ../IFNULL[@label=$n] | ../IFNONNULL[@label=$n] | ../TABLESWITCHINSN[@dflt=$n] | ../TABLESWITCHINSN/label[@name=$n] | ../LOOKUPSWITCH[@dflt=$n] | ../LOOKUPSWITCH/label[@name=$n])"/>
-  </xsl:variable>
-  <xsl:if test="$c>0">
-    <xsl:comment><xsl:text> Incoming calls: </xsl:text><xsl:value-of select="$c"/><xsl:text> </xsl:text></xsl:comment>
-  </xsl:if>
-
-  <label><xsl:apply-templates select="@*"/></label>
-
-</xsl:template>
-
-
-<xsl:template match="*" mode="lineNumber">
-  <xsl:comment><xsl:text> Line: </xsl:text><xsl:value-of select="@line"/><xsl:text> </xsl:text></xsl:comment>
-</xsl:template>
-
-<xsl:template match="*" mode="tryStart">
-  <xsl:comment><xsl:text> try start </xsl:text></xsl:comment>
-</xsl:template>
-
-<xsl:template match="*" mode="tryEnd">
-  <xsl:comment><xsl:text> try end </xsl:text></xsl:comment>
-</xsl:template>
-
-<xsl:template match="*" mode="catch">
-  <xsl:comment>
-    <xsl:text> catch </xsl:text>
-    <xsl:if test="string-length(@type)>0">
-      <xsl:text>(</xsl:text><xsl:value-of select="@type"/><xsl:text>)</xsl:text>
-    </xsl:if>
-  </xsl:comment>
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/asm4/examples/xml/copy.xsl b/asm4/examples/xml/copy.xsl
deleted file mode 100644
index dae3de6..0000000
--- a/asm4/examples/xml/copy.xsl
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  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.
--->
-
-<!--
-  Copy source document into target without changes.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII" />
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/asm4/examples/xml/linenumbers.xsl b/asm4/examples/xml/linenumbers.xsl
deleted file mode 100644
index dd63825..0000000
--- a/asm4/examples/xml/linenumbers.xsl
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  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.
--->
-
-<!--
-  XSL transformation for ASM XML document to add the equivalent of following 
-  Java code for each label that has source line number information.
-
-  System.err.println( "<class>.<method><desc> Line:<source line number>");
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII" />
-
-<xsl:template match="//method/code/Label">
-  <xsl:variable name="n"><xsl:value-of select="@name"/></xsl:variable>
-  <xsl:variable name="c"><xsl:value-of select="../LineNumber[@start=$n]/@line"/></xsl:variable>
-
-  <label><xsl:apply-templates select="@*"/></label>
-
-  <xsl:if test="string-length($c)>0">
-    <xsl:comment>
-      <xsl:text> Line: </xsl:text><xsl:value-of select="$c"/><xsl:text> </xsl:text>
-    </xsl:comment>
-
-    <GETSTATIC desc="Ljava/io/PrintStream;" name="err" owner="java/lang/System"/>
-    <LDC desc="Ljava/lang/String;">
-      <xsl:attribute name="cst">
-        <xsl:value-of select="concat( /class/@name, '.' ,../../@name, ../../@desc, ' Line:', $c)"/>
-      </xsl:attribute>
-    </LDC>
-    <INVOKEVIRTUAL desc="(Ljava/lang/String;)V" name="println" owner="java/io/PrintStream"/>
-  </xsl:if>    
-
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/asm4/examples/xml/profile.xsl b/asm4/examples/xml/profile.xsl
deleted file mode 100644
index 100a268..0000000
--- a/asm4/examples/xml/profile.xsl
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  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.
--->
-
-<!--
-  XSL transformation for ASM XML document to add the code that will dump
-  an execution time for each method.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII"/>
-
-
-<xsl:template match="//method/code">
-  <code>
-    <!-- add attributes for code element -->
-    <xsl:apply-templates select="@*"/>
-  
-    <!-- store start time into the max variable after method params -->
-    <INVOKESTATIC desc="()J" name="currentTimeMillis" owner="java/lang/System"/>
-    <LSTORE>
-      <xsl:attribute name="var">
-        <xsl:value-of select="./Max/@maxLocals"/>
-      </xsl:attribute>
-    </LSTORE>
-
-    <!-- process child elements -->
-    <xsl:apply-templates select="*"/>
-
-  </code>
-
-</xsl:template>
-
-
-<!--
-  Add print statement before return instructions
-  IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, RETURN, 
-  ATHROW ??
--->
-<xsl:template match="//IRETURN | //LRETURN | //FRETURN | //DRETURN | //ARETURN | //RETURN">
-  <GETSTATIC desc="Ljava/io/PrintStream;" name="err" owner="java/lang/System"/>
-
-  <NEW desc="java/lang/StringBuffer"/>
-  <DUP/>
-  <INVOKESPECIAL owner="java/lang/StringBuffer" name="&lt;init&gt;" desc="()V"/>
-  
-  <INVOKESTATIC desc="()J" name="currentTimeMillis" owner="java/lang/System"/>
-  <LLOAD>
-    <xsl:attribute name="var">
-      <xsl:value-of select="../Max/@maxLocals"/>
-    </xsl:attribute>
-  </LLOAD>
-  <LSUB/>
-  <INVOKEVIRTUAL owner="java/lang/StringBuffer" name="append" desc="(J)Ljava/lang/StringBuffer;"/>
-  
-  <LDC desc="Ljava/lang/String;">
-    <xsl:attribute name="cst">
-      <xsl:value-of select="concat( ' : ', ../../../@name, '.', ../../@name, ../../@desc)"/>
-    </xsl:attribute>
-  </LDC>
-  <INVOKEVIRTUAL owner="java/lang/StringBuffer" name="append" desc="(Ljava/lang/String;)Ljava/lang/StringBuffer;"/>
-  <INVOKEVIRTUAL owner="java/lang/StringBuffer" name="toString" desc="()Ljava/lang/String;"/>
-
-  <INVOKEVIRTUAL desc="(Ljava/lang/String;)V" name="println" owner="java/io/PrintStream"/>
-
-  <xsl:element name="{name()}"/>
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/asm4/examples/xml/readme.txt b/asm4/examples/xml/readme.txt
deleted file mode 100644
index b3da367..0000000
--- a/asm4/examples/xml/readme.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory contains sample XSL transformation templates that
-demonstrate features of org.objectweb.asm.xml package.
-
-
-copy.xsl
-  Copying source document into target without changes.
-
-strip.xsl
-  Strips all attribute values from the target XML. 
-  Result document can't be used to generate bytecode.
-
-annotate.xsl
-  Adds comments for labels and variable instructions
-  to the target XML document.
-
-linenumbers.xsl
-  Adds code to dump source line numbers for the executing code to System.err
-  
-profile.xsl
-  Adds code to dump execution time for each method to System.err
-
-
-You can use the following command to transform
-
-java -jar asm-xml-<version>.jar <in format> <out format> 
-     [-in <input jar>] [-out <output jar>] [-xslt <xslt file>]
-
-  where <in format> and <out format> is one of code, xml or singlexml
-  when -in or -out is omitted sysin and sysout would be used
-
diff --git a/asm4/examples/xml/strip.xsl b/asm4/examples/xml/strip.xsl
deleted file mode 100644
index b181996..0000000
--- a/asm4/examples/xml/strip.xsl
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  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.
--->
-
-<!--
-  Destructive transformation that removes values from all attributes.
-  Result bytecode will be invalid.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" encoding="ASCII" indent="yes"/>
-
-<!--
-  Class name must not be removed!
--->
-<xsl:template match="//class/@name">
-  <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
-</xsl:template>
-
-
-<xsl:template match="@*">
-  <xsl:attribute name="{name()}"/>
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/asm4/findbugsExclude.xml b/asm4/findbugsExclude.xml
deleted file mode 100644
index cc41e7e..0000000
--- a/asm4/findbugsExclude.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-

-<!--

- ! ASM: a very small and fast Java bytecode manipulation framework

- ! Copyright (c) 2000-2011 INRIA, France Telecom

- ! 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.

--->

-

-<FindBugsFilter>

-  <Match>

-    <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>

-  </Match>

-  <Match>

-    <Class name="~.*\$A"/>

-  </Match>

-  <Match>

-    <Class name="~.*\$B"/>

-  </Match>

-  <Match>

-    <Class name="~.*\$Doo.*"/>

-  </Match>

-  <Match>

-    <Class name="Adapt"/>

-  </Match>

-  <Match>

-    <Class name="Analysis"/>

-    <Method name="test"/>

-  </Match>

-  <Match>

-    <Class name="~.*ASMMemTest"/>

-    <Bug pattern="DM_GC"/>

-  </Match>

-  <Match>

-    <Class name="jbfc"/>

-  </Match>

-  <Match>

-    <Class name="~.*apache.*"/>

-  </Match>

-</FindBugsFilter>

diff --git a/asm4/jdoc/README.txt b/asm4/jdoc/README.txt
deleted file mode 100644
index 499f31f..0000000
--- a/asm4/jdoc/README.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory contains ant files to build the javadocs of the product.
-The following rules describe the convention to write such files:
-
-- An ant file must build only one javadoc.
-
-- As there may exist several javadocs, all javadocs must be produced
-  in a sub dir of ${out.dist.jdoc}. For example the user javadoc could be 
-  produced into the ${out.dist.jdoc}/user directory
-
-- The name of the ant file must be the name of the destination directory of the 
-  javadoc it builds.
-
-- Only the default task is called on an xml file.
-
-Sample ant file:
-
-<project name="FOO" default="dist.jdoc">
-
-  <property name="jdoc.name" value="user"/>
-  <property name="jdoc.dir" value="${out.dist.jdoc}/${jdoc.name}"/>
-
-  <target name="dist.jdoc">
-    <uptodate property="jdoc.required" targetfile="${jdoc.dir}/index.html">
-      <srcfiles dir="${src}" includes="**/*.java"/>
-    </uptodate>
-    <antcall target="dist.jdoc.${jdoc.name}"/>
-  </target>
-
-  <target name="dist.jdoc.user" unless="jdoc.required">
-    <mkdir dir="${jdoc.dir}"/>
-    <javadoc destdir="${jdoc.dir}"
-             windowtitle="FOO User Documentation"
-             doctitle="FOO User Documentation">
-
-       ...
-       
-    </javadoc>
-  </target>
-</project>
diff --git a/asm4/jdoc/package-list b/asm4/jdoc/package-list
deleted file mode 100644
index 6159048..0000000
--- a/asm4/jdoc/package-list
+++ /dev/null
@@ -1,78 +0,0 @@
-java.applet
-java.awt
-java.awt.color
-java.awt.datatransfer
-java.awt.dnd
-java.awt.event
-java.awt.font
-java.awt.geom
-java.awt.im
-java.awt.im.spi
-java.awt.image
-java.awt.image.renderable
-java.awt.print
-java.beans
-java.beans.beancontext
-java.io
-java.lang
-java.lang.ref
-java.lang.reflect
-java.math
-java.net
-java.rmi
-java.rmi.activation
-java.rmi.dgc
-java.rmi.registry
-java.rmi.server
-java.security
-java.security.acl
-java.security.cert
-java.security.interfaces
-java.security.spec
-java.sql
-java.text
-java.util
-java.util.jar
-java.util.zip
-javax.accessibility
-javax.naming
-javax.naming.directory
-javax.naming.event
-javax.naming.ldap
-javax.naming.spi
-javax.rmi
-javax.rmi.CORBA
-javax.sound.midi
-javax.sound.midi.spi
-javax.sound.sampled
-javax.sound.sampled.spi
-javax.swing
-javax.swing.border
-javax.swing.colorchooser
-javax.swing.event
-javax.swing.filechooser
-javax.swing.plaf
-javax.swing.plaf.basic
-javax.swing.plaf.metal
-javax.swing.plaf.multi
-javax.swing.table
-javax.swing.text
-javax.swing.text.html
-javax.swing.text.html.parser
-javax.swing.text.rtf
-javax.swing.tree
-javax.swing.undo
-javax.transaction
-org.omg.CORBA
-org.omg.CORBA_2_3
-org.omg.CORBA_2_3.portable
-org.omg.CORBA.DynAnyPackage
-org.omg.CORBA.ORBPackage
-org.omg.CORBA.portable
-org.omg.CORBA.TypeCodePackage
-org.omg.CosNaming
-org.omg.CosNaming.NamingContextPackage
-org.omg.SendingContext
-org.omg.stub.java.rmi
-org.xml.sax
-org.xml.sax.helpers
\ No newline at end of file
diff --git a/asm4/jdoc/user.xml b/asm4/jdoc/user.xml
deleted file mode 100644
index a448897..0000000
--- a/asm4/jdoc/user.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="asm" default="dist.jdoc">
-
-  <property name="jdoc.name" value="user"/>
-  <property name="jdoc.dir" value="${out.dist.jdoc}/${jdoc.name}"/>
-
-  <target name="dist.jdoc">
-    <uptodate property="jdoc.required" targetfile="${jdoc.dir}/index.html">
-      <srcfiles dir="${src}" includes="**/*.java,**/*.html"/>
-    </uptodate>
-    <antcall target="dist.jdoc.${jdoc.name}"/>
-  </target>
-
-  <target name="dist.jdoc.user" unless="jdoc.required">
-    <mkdir dir="${jdoc.dir}"/>
-    <javadoc destdir="${jdoc.dir}"
-             windowtitle="ASM ${product.version} Documentation"
-             doctitle="ASM ${product.version} Documentation"
-             use="true">
-
-      <sourcepath path="${src}"/>
-      <package name="org.objectweb.asm"/>
-      <package name="org.objectweb.asm.attrs"/>
-      <package name="org.objectweb.asm.commons"/>
-      <package name="org.objectweb.asm.signature"/>
-      <package name="org.objectweb.asm.tree"/>
-      <package name="org.objectweb.asm.tree.analysis"/>
-      <package name="org.objectweb.asm.util"/>
-      <package name="org.objectweb.asm.util.attrs"/>
-      <package name="org.objectweb.asm.xml"/>
-
-      <link href="${jdk.url}" offline="true" packagelistLoc="${jdoc}"/>
-
-    </javadoc>
-
-    <copy todir="${jdoc.dir}">
-      <fileset dir="${src}" includes="**/*.dtd"/>
-    </copy>
-  </target>
-
-</project>
diff --git a/asm4/src/org/objectweb/asm/AnnotationVisitor.java b/asm4/src/org/objectweb/asm/AnnotationVisitor.java
deleted file mode 100644
index 3c8a740..0000000
--- a/asm4/src/org/objectweb/asm/AnnotationVisitor.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java annotation. The methods of this class must be
- * called in the following order: ( <tt>visit</tt> | <tt>visitEnum</tt> |
- * <tt>visitAnnotation</tt> | <tt>visitArray</tt> )* <tt>visitEnd</tt>.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public abstract class AnnotationVisitor {
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * The annotation visitor to which this visitor must delegate method calls.
-     * May be null.
-     */
-    protected AnnotationVisitor av;
-
-    /**
-     * Constructs a new {@link AnnotationVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public AnnotationVisitor(final int api) {
-        this(api, null);
-    }
-
-    /**
-     * Constructs a new {@link AnnotationVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param av
-     *            the annotation visitor to which this visitor must delegate
-     *            method calls. May be null.
-     */
-    public AnnotationVisitor(final int api, final AnnotationVisitor av) {
-        if (api != Opcodes.ASM4) {
-            throw new IllegalArgumentException();
-        }
-        this.api = api;
-        this.av = av;
-    }
-
-    /**
-     * Visits a primitive value of the annotation.
-     * 
-     * @param name
-     *            the value name.
-     * @param value
-     *            the actual value, whose type must be {@link Byte},
-     *            {@link Boolean}, {@link Character}, {@link Short},
-     *            {@link Integer} , {@link Long}, {@link Float}, {@link Double},
-     *            {@link String} or {@link Type} or OBJECT or ARRAY sort. This
-     *            value can also be an array of byte, boolean, short, char, int,
-     *            long, float or double values (this is equivalent to using
-     *            {@link #visitArray visitArray} and visiting each array element
-     *            in turn, but is more convenient).
-     */
-    public void visit(String name, Object value) {
-        if (av != null) {
-            av.visit(name, value);
-        }
-    }
-
-    /**
-     * Visits an enumeration value of the annotation.
-     * 
-     * @param name
-     *            the value name.
-     * @param desc
-     *            the class descriptor of the enumeration class.
-     * @param value
-     *            the actual enumeration value.
-     */
-    public void visitEnum(String name, String desc, String value) {
-        if (av != null) {
-            av.visitEnum(name, desc, value);
-        }
-    }
-
-    /**
-     * Visits a nested annotation value of the annotation.
-     * 
-     * @param name
-     *            the value name.
-     * @param desc
-     *            the class descriptor of the nested annotation class.
-     * @return a visitor to visit the actual nested annotation value, or
-     *         <tt>null</tt> if this visitor is not interested in visiting this
-     *         nested annotation. <i>The nested annotation value must be fully
-     *         visited before calling other methods on this annotation
-     *         visitor</i>.
-     */
-    public AnnotationVisitor visitAnnotation(String name, String desc) {
-        if (av != null) {
-            return av.visitAnnotation(name, desc);
-        }
-        return null;
-    }
-
-    /**
-     * Visits an array value of the annotation. Note that arrays of primitive
-     * types (such as byte, boolean, short, char, int, long, float or double)
-     * can be passed as value to {@link #visit visit}. This is what
-     * {@link ClassReader} does.
-     * 
-     * @param name
-     *            the value name.
-     * @return a visitor to visit the actual array value elements, or
-     *         <tt>null</tt> if this visitor is not interested in visiting these
-     *         values. The 'name' parameters passed to the methods of this
-     *         visitor are ignored. <i>All the array values must be visited
-     *         before calling other methods on this annotation visitor</i>.
-     */
-    public AnnotationVisitor visitArray(String name) {
-        if (av != null) {
-            return av.visitArray(name);
-        }
-        return null;
-    }
-
-    /**
-     * Visits the end of the annotation.
-     */
-    public void visitEnd() {
-        if (av != null) {
-            av.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/AnnotationWriter.java b/asm4/src/org/objectweb/asm/AnnotationWriter.java
deleted file mode 100644
index 53a0a7c..0000000
--- a/asm4/src/org/objectweb/asm/AnnotationWriter.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * An {@link AnnotationVisitor} that generates annotations in bytecode form.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-final class AnnotationWriter extends AnnotationVisitor {
-
-    /**
-     * The class writer to which this annotation must be added.
-     */
-    private final ClassWriter cw;
-
-    /**
-     * The number of values in this annotation.
-     */
-    private int size;
-
-    /**
-     * <tt>true<tt> if values are named, <tt>false</tt> otherwise. Annotation
-     * writers used for annotation default and annotation arrays use unnamed
-     * values.
-     */
-    private final boolean named;
-
-    /**
-     * The annotation values in bytecode form. This byte vector only contains
-     * the values themselves, i.e. the number of values must be stored as a
-     * unsigned short just before these bytes.
-     */
-    private final ByteVector bv;
-
-    /**
-     * The byte vector to be used to store the number of values of this
-     * annotation. See {@link #bv}.
-     */
-    private final ByteVector parent;
-
-    /**
-     * Where the number of values of this annotation must be stored in
-     * {@link #parent}.
-     */
-    private final int offset;
-
-    /**
-     * Next annotation writer. This field is used to store annotation lists.
-     */
-    AnnotationWriter next;
-
-    /**
-     * Previous annotation writer. This field is used to store annotation lists.
-     */
-    AnnotationWriter prev;
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link AnnotationWriter}.
-     * 
-     * @param cw
-     *            the class writer to which this annotation must be added.
-     * @param named
-     *            <tt>true<tt> if values are named, <tt>false</tt> otherwise.
-     * @param bv
-     *            where the annotation values must be stored.
-     * @param parent
-     *            where the number of annotation values must be stored.
-     * @param offset
-     *            where in <tt>parent</tt> the number of annotation values must
-     *            be stored.
-     */
-    AnnotationWriter(final ClassWriter cw, final boolean named,
-            final ByteVector bv, final ByteVector parent, final int offset) {
-        super(Opcodes.ASM4);
-        this.cw = cw;
-        this.named = named;
-        this.bv = bv;
-        this.parent = parent;
-        this.offset = offset;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the AnnotationVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final String name, final Object value) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        if (value instanceof String) {
-            bv.put12('s', cw.newUTF8((String) value));
-        } else if (value instanceof Byte) {
-            bv.put12('B', cw.newInteger(((Byte) value).byteValue()).index);
-        } else if (value instanceof Boolean) {
-            int v = ((Boolean) value).booleanValue() ? 1 : 0;
-            bv.put12('Z', cw.newInteger(v).index);
-        } else if (value instanceof Character) {
-            bv.put12('C', cw.newInteger(((Character) value).charValue()).index);
-        } else if (value instanceof Short) {
-            bv.put12('S', cw.newInteger(((Short) value).shortValue()).index);
-        } else if (value instanceof Type) {
-            bv.put12('c', cw.newUTF8(((Type) value).getDescriptor()));
-        } else if (value instanceof byte[]) {
-            byte[] v = (byte[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('B', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof boolean[]) {
-            boolean[] v = (boolean[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('Z', cw.newInteger(v[i] ? 1 : 0).index);
-            }
-        } else if (value instanceof short[]) {
-            short[] v = (short[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('S', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof char[]) {
-            char[] v = (char[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('C', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof int[]) {
-            int[] v = (int[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('I', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof long[]) {
-            long[] v = (long[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('J', cw.newLong(v[i]).index);
-            }
-        } else if (value instanceof float[]) {
-            float[] v = (float[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('F', cw.newFloat(v[i]).index);
-            }
-        } else if (value instanceof double[]) {
-            double[] v = (double[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('D', cw.newDouble(v[i]).index);
-            }
-        } else {
-            Item i = cw.newConstItem(value);
-            bv.put12(".s.IFJDCS".charAt(i.type), i.index);
-        }
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        bv.put12('e', cw.newUTF8(desc)).putShort(cw.newUTF8(value));
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        // write tag and type, and reserve space for values count
-        bv.put12('@', cw.newUTF8(desc)).putShort(0);
-        return new AnnotationWriter(cw, true, bv, bv, bv.length - 2);
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        // write tag, and reserve space for array size
-        bv.put12('[', 0);
-        return new AnnotationWriter(cw, false, bv, bv, bv.length - 2);
-    }
-
-    @Override
-    public void visitEnd() {
-        if (parent != null) {
-            byte[] data = parent.data;
-            data[offset] = (byte) (size >>> 8);
-            data[offset + 1] = (byte) size;
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the size of this annotation writer list.
-     * 
-     * @return the size of this annotation writer list.
-     */
-    int getSize() {
-        int size = 0;
-        AnnotationWriter aw = this;
-        while (aw != null) {
-            size += aw.bv.length;
-            aw = aw.next;
-        }
-        return size;
-    }
-
-    /**
-     * Puts the annotations of this annotation writer list into the given byte
-     * vector.
-     * 
-     * @param out
-     *            where the annotations must be put.
-     */
-    void put(final ByteVector out) {
-        int n = 0;
-        int size = 2;
-        AnnotationWriter aw = this;
-        AnnotationWriter last = null;
-        while (aw != null) {
-            ++n;
-            size += aw.bv.length;
-            aw.visitEnd(); // in case user forgot to call visitEnd
-            aw.prev = last;
-            last = aw;
-            aw = aw.next;
-        }
-        out.putInt(size);
-        out.putShort(n);
-        aw = last;
-        while (aw != null) {
-            out.putByteArray(aw.bv.data, 0, aw.bv.length);
-            aw = aw.prev;
-        }
-    }
-
-    /**
-     * Puts the given annotation lists into the given byte vector.
-     * 
-     * @param panns
-     *            an array of annotation writer lists.
-     * @param off
-     *            index of the first annotation to be written.
-     * @param out
-     *            where the annotations must be put.
-     */
-    static void put(final AnnotationWriter[] panns, final int off,
-            final ByteVector out) {
-        int size = 1 + 2 * (panns.length - off);
-        for (int i = off; i < panns.length; ++i) {
-            size += panns[i] == null ? 0 : panns[i].getSize();
-        }
-        out.putInt(size).putByte(panns.length - off);
-        for (int i = off; i < panns.length; ++i) {
-            AnnotationWriter aw = panns[i];
-            AnnotationWriter last = null;
-            int n = 0;
-            while (aw != null) {
-                ++n;
-                aw.visitEnd(); // in case user forgot to call visitEnd
-                aw.prev = last;
-                last = aw;
-                aw = aw.next;
-            }
-            out.putShort(n);
-            aw = last;
-            while (aw != null) {
-                out.putByteArray(aw.bv.data, 0, aw.bv.length);
-                aw = aw.prev;
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Attribute.java b/asm4/src/org/objectweb/asm/Attribute.java
deleted file mode 100644
index 8a2a882..0000000
--- a/asm4/src/org/objectweb/asm/Attribute.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A non standard class, field, method or code attribute.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class Attribute {
-
-    /**
-     * The type of this attribute.
-     */
-    public final String type;
-
-    /**
-     * The raw value of this attribute, used only for unknown attributes.
-     */
-    byte[] value;
-
-    /**
-     * The next attribute in this attribute list. May be <tt>null</tt>.
-     */
-    Attribute next;
-
-    /**
-     * Constructs a new empty attribute.
-     * 
-     * @param type
-     *            the type of the attribute.
-     */
-    protected Attribute(final String type) {
-        this.type = type;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this type of attribute is unknown. The default
-     * implementation of this method always returns <tt>true</tt>.
-     * 
-     * @return <tt>true</tt> if this type of attribute is unknown.
-     */
-    public boolean isUnknown() {
-        return true;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this type of attribute is a code attribute.
-     * 
-     * @return <tt>true</tt> if this type of attribute is a code attribute.
-     */
-    public boolean isCodeAttribute() {
-        return false;
-    }
-
-    /**
-     * Returns the labels corresponding to this attribute.
-     * 
-     * @return the labels corresponding to this attribute, or <tt>null</tt> if
-     *         this attribute is not a code attribute that contains labels.
-     */
-    protected Label[] getLabels() {
-        return null;
-    }
-
-    /**
-     * Reads a {@link #type type} attribute. This method must return a
-     * <i>new</i> {@link Attribute} object, of type {@link #type type},
-     * corresponding to the <tt>len</tt> bytes starting at the given offset, in
-     * the given class reader.
-     * 
-     * @param cr
-     *            the class that contains the attribute to be read.
-     * @param off
-     *            index of the first byte of the attribute's content in
-     *            {@link ClassReader#b cr.b}. The 6 attribute header bytes,
-     *            containing the type and the length of the attribute, are not
-     *            taken into account here.
-     * @param len
-     *            the length of the attribute's content.
-     * @param buf
-     *            buffer to be used to call {@link ClassReader#readUTF8
-     *            readUTF8}, {@link ClassReader#readClass(int,char[]) readClass}
-     *            or {@link ClassReader#readConst readConst}.
-     * @param codeOff
-     *            index of the first byte of code's attribute content in
-     *            {@link ClassReader#b cr.b}, or -1 if the attribute to be read
-     *            is not a code attribute. The 6 attribute header bytes,
-     *            containing the type and the length of the attribute, are not
-     *            taken into account here.
-     * @param labels
-     *            the labels of the method's code, or <tt>null</tt> if the
-     *            attribute to be read is not a code attribute.
-     * @return a <i>new</i> {@link Attribute} object corresponding to the given
-     *         bytes.
-     */
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        Attribute attr = new Attribute(type);
-        attr.value = new byte[len];
-        System.arraycopy(cr.b, off, attr.value, 0, len);
-        return attr;
-    }
-
-    /**
-     * Returns the byte array form of this attribute.
-     * 
-     * @param cw
-     *            the class to which this attribute must be added. This
-     *            parameter can be used to add to the constant pool of this
-     *            class the items that corresponds to this attribute.
-     * @param code
-     *            the bytecode of the method corresponding to this code
-     *            attribute, or <tt>null</tt> if this attribute is not a code
-     *            attributes.
-     * @param len
-     *            the length of the bytecode of the method corresponding to this
-     *            code attribute, or <tt>null</tt> if this attribute is not a
-     *            code attribute.
-     * @param maxStack
-     *            the maximum stack size of the method corresponding to this
-     *            code attribute, or -1 if this attribute is not a code
-     *            attribute.
-     * @param maxLocals
-     *            the maximum number of local variables of the method
-     *            corresponding to this code attribute, or -1 if this attribute
-     *            is not a code attribute.
-     * @return the byte array form of this attribute.
-     */
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        ByteVector v = new ByteVector();
-        v.data = value;
-        v.length = value.length;
-        return v;
-    }
-
-    /**
-     * Returns the length of the attribute list that begins with this attribute.
-     * 
-     * @return the length of the attribute list that begins with this attribute.
-     */
-    final int getCount() {
-        int count = 0;
-        Attribute attr = this;
-        while (attr != null) {
-            count += 1;
-            attr = attr.next;
-        }
-        return count;
-    }
-
-    /**
-     * Returns the size of all the attributes in this attribute list.
-     * 
-     * @param cw
-     *            the class writer to be used to convert the attributes into
-     *            byte arrays, with the {@link #write write} method.
-     * @param code
-     *            the bytecode of the method corresponding to these code
-     *            attributes, or <tt>null</tt> if these attributes are not code
-     *            attributes.
-     * @param len
-     *            the length of the bytecode of the method corresponding to
-     *            these code attributes, or <tt>null</tt> if these attributes
-     *            are not code attributes.
-     * @param maxStack
-     *            the maximum stack size of the method corresponding to these
-     *            code attributes, or -1 if these attributes are not code
-     *            attributes.
-     * @param maxLocals
-     *            the maximum number of local variables of the method
-     *            corresponding to these code attributes, or -1 if these
-     *            attributes are not code attributes.
-     * @return the size of all the attributes in this attribute list. This size
-     *         includes the size of the attribute headers.
-     */
-    final int getSize(final ClassWriter cw, final byte[] code, final int len,
-            final int maxStack, final int maxLocals) {
-        Attribute attr = this;
-        int size = 0;
-        while (attr != null) {
-            cw.newUTF8(attr.type);
-            size += attr.write(cw, code, len, maxStack, maxLocals).length + 6;
-            attr = attr.next;
-        }
-        return size;
-    }
-
-    /**
-     * Writes all the attributes of this attribute list in the given byte
-     * vector.
-     * 
-     * @param cw
-     *            the class writer to be used to convert the attributes into
-     *            byte arrays, with the {@link #write write} method.
-     * @param code
-     *            the bytecode of the method corresponding to these code
-     *            attributes, or <tt>null</tt> if these attributes are not code
-     *            attributes.
-     * @param len
-     *            the length of the bytecode of the method corresponding to
-     *            these code attributes, or <tt>null</tt> if these attributes
-     *            are not code attributes.
-     * @param maxStack
-     *            the maximum stack size of the method corresponding to these
-     *            code attributes, or -1 if these attributes are not code
-     *            attributes.
-     * @param maxLocals
-     *            the maximum number of local variables of the method
-     *            corresponding to these code attributes, or -1 if these
-     *            attributes are not code attributes.
-     * @param out
-     *            where the attributes must be written.
-     */
-    final void put(final ClassWriter cw, final byte[] code, final int len,
-            final int maxStack, final int maxLocals, final ByteVector out) {
-        Attribute attr = this;
-        while (attr != null) {
-            ByteVector b = attr.write(cw, code, len, maxStack, maxLocals);
-            out.putShort(cw.newUTF8(attr.type)).putInt(b.length);
-            out.putByteArray(b.data, 0, b.length);
-            attr = attr.next;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ByteVector.java b/asm4/src/org/objectweb/asm/ByteVector.java
deleted file mode 100644
index 54d4e65..0000000
--- a/asm4/src/org/objectweb/asm/ByteVector.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A dynamically extensible vector of bytes. This class is roughly equivalent to
- * a DataOutputStream on top of a ByteArrayOutputStream, but is more efficient.
- * 
- * @author Eric Bruneton
- */
-public class ByteVector {
-
-    /**
-     * The content of this vector.
-     */
-    byte[] data;
-
-    /**
-     * Actual number of bytes in this vector.
-     */
-    int length;
-
-    /**
-     * Constructs a new {@link ByteVector ByteVector} with a default initial
-     * size.
-     */
-    public ByteVector() {
-        data = new byte[64];
-    }
-
-    /**
-     * Constructs a new {@link ByteVector ByteVector} with the given initial
-     * size.
-     * 
-     * @param initialSize
-     *            the initial size of the byte vector to be constructed.
-     */
-    public ByteVector(final int initialSize) {
-        data = new byte[initialSize];
-    }
-
-    /**
-     * Puts a byte into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param b
-     *            a byte.
-     * @return this byte vector.
-     */
-    public ByteVector putByte(final int b) {
-        int length = this.length;
-        if (length + 1 > data.length) {
-            enlarge(1);
-        }
-        data[length++] = (byte) b;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts two bytes into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param b1
-     *            a byte.
-     * @param b2
-     *            another byte.
-     * @return this byte vector.
-     */
-    ByteVector put11(final int b1, final int b2) {
-        int length = this.length;
-        if (length + 2 > data.length) {
-            enlarge(2);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) b1;
-        data[length++] = (byte) b2;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts a short into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param s
-     *            a short.
-     * @return this byte vector.
-     */
-    public ByteVector putShort(final int s) {
-        int length = this.length;
-        if (length + 2 > data.length) {
-            enlarge(2);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) (s >>> 8);
-        data[length++] = (byte) s;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts a byte and a short into this byte vector. The byte vector is
-     * automatically enlarged if necessary.
-     * 
-     * @param b
-     *            a byte.
-     * @param s
-     *            a short.
-     * @return this byte vector.
-     */
-    ByteVector put12(final int b, final int s) {
-        int length = this.length;
-        if (length + 3 > data.length) {
-            enlarge(3);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) b;
-        data[length++] = (byte) (s >>> 8);
-        data[length++] = (byte) s;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts an int into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param i
-     *            an int.
-     * @return this byte vector.
-     */
-    public ByteVector putInt(final int i) {
-        int length = this.length;
-        if (length + 4 > data.length) {
-            enlarge(4);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) (i >>> 24);
-        data[length++] = (byte) (i >>> 16);
-        data[length++] = (byte) (i >>> 8);
-        data[length++] = (byte) i;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts a long into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param l
-     *            a long.
-     * @return this byte vector.
-     */
-    public ByteVector putLong(final long l) {
-        int length = this.length;
-        if (length + 8 > data.length) {
-            enlarge(8);
-        }
-        byte[] data = this.data;
-        int i = (int) (l >>> 32);
-        data[length++] = (byte) (i >>> 24);
-        data[length++] = (byte) (i >>> 16);
-        data[length++] = (byte) (i >>> 8);
-        data[length++] = (byte) i;
-        i = (int) l;
-        data[length++] = (byte) (i >>> 24);
-        data[length++] = (byte) (i >>> 16);
-        data[length++] = (byte) (i >>> 8);
-        data[length++] = (byte) i;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts an UTF8 string into this byte vector. The byte vector is
-     * automatically enlarged if necessary.
-     * 
-     * @param s
-     *            a String.
-     * @return this byte vector.
-     */
-    public ByteVector putUTF8(final String s) {
-        int charLength = s.length();
-        int len = length;
-        if (len + 2 + charLength > data.length) {
-            enlarge(2 + charLength);
-        }
-        byte[] data = this.data;
-        // optimistic algorithm: instead of computing the byte length and then
-        // serializing the string (which requires two loops), we assume the byte
-        // length is equal to char length (which is the most frequent case), and
-        // we start serializing the string right away. During the serialization,
-        // if we find that this assumption is wrong, we continue with the
-        // general method.
-        data[len++] = (byte) (charLength >>> 8);
-        data[len++] = (byte) charLength;
-        for (int i = 0; i < charLength; ++i) {
-            char c = s.charAt(i);
-            if (c >= '\001' && c <= '\177') {
-                data[len++] = (byte) c;
-            } else {
-                int byteLength = i;
-                for (int j = i; j < charLength; ++j) {
-                    c = s.charAt(j);
-                    if (c >= '\001' && c <= '\177') {
-                        byteLength++;
-                    } else if (c > '\u07FF') {
-                        byteLength += 3;
-                    } else {
-                        byteLength += 2;
-                    }
-                }
-                data[length] = (byte) (byteLength >>> 8);
-                data[length + 1] = (byte) byteLength;
-                if (length + 2 + byteLength > data.length) {
-                    length = len;
-                    enlarge(2 + byteLength);
-                    data = this.data;
-                }
-                for (int j = i; j < charLength; ++j) {
-                    c = s.charAt(j);
-                    if (c >= '\001' && c <= '\177') {
-                        data[len++] = (byte) c;
-                    } else if (c > '\u07FF') {
-                        data[len++] = (byte) (0xE0 | c >> 12 & 0xF);
-                        data[len++] = (byte) (0x80 | c >> 6 & 0x3F);
-                        data[len++] = (byte) (0x80 | c & 0x3F);
-                    } else {
-                        data[len++] = (byte) (0xC0 | c >> 6 & 0x1F);
-                        data[len++] = (byte) (0x80 | c & 0x3F);
-                    }
-                }
-                break;
-            }
-        }
-        length = len;
-        return this;
-    }
-
-    /**
-     * Puts an array of bytes into this byte vector. The byte vector is
-     * automatically enlarged if necessary.
-     * 
-     * @param b
-     *            an array of bytes. May be <tt>null</tt> to put <tt>len</tt>
-     *            null bytes into this byte vector.
-     * @param off
-     *            index of the fist byte of b that must be copied.
-     * @param len
-     *            number of bytes of b that must be copied.
-     * @return this byte vector.
-     */
-    public ByteVector putByteArray(final byte[] b, final int off, final int len) {
-        if (length + len > data.length) {
-            enlarge(len);
-        }
-        if (b != null) {
-            System.arraycopy(b, off, data, length, len);
-        }
-        length += len;
-        return this;
-    }
-
-    /**
-     * Enlarge this byte vector so that it can receive n more bytes.
-     * 
-     * @param size
-     *            number of additional bytes that this byte vector should be
-     *            able to receive.
-     */
-    private void enlarge(final int size) {
-        int length1 = 2 * data.length;
-        int length2 = length + size;
-        byte[] newData = new byte[length1 > length2 ? length1 : length2];
-        System.arraycopy(data, 0, newData, 0, length);
-        data = newData;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ClassReader.java b/asm4/src/org/objectweb/asm/ClassReader.java
deleted file mode 100644
index 0f0dd89..0000000
--- a/asm4/src/org/objectweb/asm/ClassReader.java
+++ /dev/null
@@ -1,2202 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A Java class parser to make a {@link ClassVisitor} visit an existing class.
- * This class parses a byte array conforming to the Java class file format and
- * calls the appropriate visit methods of a given class visitor for each field,
- * method and bytecode instruction encountered.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ClassReader {
-
-    /**
-     * True to enable signatures support.
-     */
-    static final boolean SIGNATURES = true;
-
-    /**
-     * True to enable annotations support.
-     */
-    static final boolean ANNOTATIONS = true;
-
-    /**
-     * True to enable stack map frames support.
-     */
-    static final boolean FRAMES = true;
-
-    /**
-     * True to enable bytecode writing support.
-     */
-    static final boolean WRITER = true;
-
-    /**
-     * True to enable JSR_W and GOTO_W support.
-     */
-    static final boolean RESIZE = true;
-
-    /**
-     * Flag to skip method code. If this class is set <code>CODE</code>
-     * attribute won't be visited. This can be used, for example, to retrieve
-     * annotations for methods and method parameters.
-     */
-    public static final int SKIP_CODE = 1;
-
-    /**
-     * Flag to skip the debug information in the class. If this flag is set the
-     * debug information of the class is not visited, i.e. the
-     * {@link MethodVisitor#visitLocalVariable visitLocalVariable} and
-     * {@link MethodVisitor#visitLineNumber visitLineNumber} methods will not be
-     * called.
-     */
-    public static final int SKIP_DEBUG = 2;
-
-    /**
-     * Flag to skip the stack map frames in the class. If this flag is set the
-     * stack map frames of the class is not visited, i.e. the
-     * {@link MethodVisitor#visitFrame visitFrame} method will not be called.
-     * This flag is useful when the {@link ClassWriter#COMPUTE_FRAMES} option is
-     * used: it avoids visiting frames that will be ignored and recomputed from
-     * scratch in the class writer.
-     */
-    public static final int SKIP_FRAMES = 4;
-
-    /**
-     * Flag to expand the stack map frames. By default stack map frames are
-     * visited in their original format (i.e. "expanded" for classes whose
-     * version is less than V1_6, and "compressed" for the other classes). If
-     * this flag is set, stack map frames are always visited in expanded format
-     * (this option adds a decompression/recompression step in ClassReader and
-     * ClassWriter which degrades performances quite a lot).
-     */
-    public static final int EXPAND_FRAMES = 8;
-
-    /**
-     * The class to be parsed. <i>The content of this array must not be
-     * modified. This field is intended for {@link Attribute} sub classes, and
-     * is normally not needed by class generators or adapters.</i>
-     */
-    public final byte[] b;
-
-    /**
-     * The start index of each constant pool item in {@link #b b}, plus one. The
-     * one byte offset skips the constant pool item tag that indicates its type.
-     */
-    private final int[] items;
-
-    /**
-     * The String objects corresponding to the CONSTANT_Utf8 items. This cache
-     * avoids multiple parsing of a given CONSTANT_Utf8 constant pool item,
-     * which GREATLY improves performances (by a factor 2 to 3). This caching
-     * strategy could be extended to all constant pool items, but its benefit
-     * would not be so great for these items (because they are much less
-     * expensive to parse than CONSTANT_Utf8 items).
-     */
-    private final String[] strings;
-
-    /**
-     * Maximum length of the strings contained in the constant pool of the
-     * class.
-     */
-    private final int maxStringLength;
-
-    /**
-     * Start index of the class header information (access, name...) in
-     * {@link #b b}.
-     */
-    public final int header;
-
-    // ------------------------------------------------------------------------
-    // Constructors
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param b
-     *            the bytecode of the class to be read.
-     */
-    public ClassReader(final byte[] b) {
-        this(b, 0, b.length);
-    }
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param b
-     *            the bytecode of the class to be read.
-     * @param off
-     *            the start offset of the class data.
-     * @param len
-     *            the length of the class data.
-     */
-    public ClassReader(final byte[] b, final int off, final int len) {
-        this.b = b;
-        // checks the class version
-        if (readShort(off + 6) > Opcodes.V1_7) {
-            throw new IllegalArgumentException();
-        }
-        // parses the constant pool
-        items = new int[readUnsignedShort(off + 8)];
-        int n = items.length;
-        strings = new String[n];
-        int max = 0;
-        int index = off + 10;
-        for (int i = 1; i < n; ++i) {
-            items[i] = index + 1;
-            int size;
-            switch (b[index]) {
-            case ClassWriter.FIELD:
-            case ClassWriter.METH:
-            case ClassWriter.IMETH:
-            case ClassWriter.INT:
-            case ClassWriter.FLOAT:
-            case ClassWriter.NAME_TYPE:
-            case ClassWriter.INDY:
-                size = 5;
-                break;
-            case ClassWriter.LONG:
-            case ClassWriter.DOUBLE:
-                size = 9;
-                ++i;
-                break;
-            case ClassWriter.UTF8:
-                size = 3 + readUnsignedShort(index + 1);
-                if (size > max) {
-                    max = size;
-                }
-                break;
-            case ClassWriter.HANDLE:
-                size = 4;
-                break;
-            // case ClassWriter.CLASS:
-            // case ClassWriter.STR:
-            // case ClassWriter.MTYPE
-            default:
-                size = 3;
-                break;
-            }
-            index += size;
-        }
-        maxStringLength = max;
-        // the class header information starts just after the constant pool
-        header = index;
-    }
-
-    /**
-     * Returns the class's access flags (see {@link Opcodes}). This value may
-     * not reflect Deprecated and Synthetic flags when bytecode is before 1.5
-     * and those flags are represented by attributes.
-     * 
-     * @return the class access flags
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public int getAccess() {
-        return readUnsignedShort(header);
-    }
-
-    /**
-     * Returns the internal name of the class (see
-     * {@link Type#getInternalName() getInternalName}).
-     * 
-     * @return the internal class name
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public String getClassName() {
-        return readClass(header + 2, new char[maxStringLength]);
-    }
-
-    /**
-     * Returns the internal of name of the super class (see
-     * {@link Type#getInternalName() getInternalName}). For interfaces, the
-     * super class is {@link Object}.
-     * 
-     * @return the internal name of super class, or <tt>null</tt> for
-     *         {@link Object} class.
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public String getSuperName() {
-        return readClass(header + 4, new char[maxStringLength]);
-    }
-
-    /**
-     * Returns the internal names of the class's interfaces (see
-     * {@link Type#getInternalName() getInternalName}).
-     * 
-     * @return the array of internal names for all implemented interfaces or
-     *         <tt>null</tt>.
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public String[] getInterfaces() {
-        int index = header + 6;
-        int n = readUnsignedShort(index);
-        String[] interfaces = new String[n];
-        if (n > 0) {
-            char[] buf = new char[maxStringLength];
-            for (int i = 0; i < n; ++i) {
-                index += 2;
-                interfaces[i] = readClass(index, buf);
-            }
-        }
-        return interfaces;
-    }
-
-    /**
-     * Copies the constant pool data into the given {@link ClassWriter}. Should
-     * be called before the {@link #accept(ClassVisitor,int)} method.
-     * 
-     * @param classWriter
-     *            the {@link ClassWriter} to copy constant pool into.
-     */
-    void copyPool(final ClassWriter classWriter) {
-        char[] buf = new char[maxStringLength];
-        int ll = items.length;
-        Item[] items2 = new Item[ll];
-        for (int i = 1; i < ll; i++) {
-            int index = items[i];
-            int tag = b[index - 1];
-            Item item = new Item(i);
-            int nameType;
-            switch (tag) {
-            case ClassWriter.FIELD:
-            case ClassWriter.METH:
-            case ClassWriter.IMETH:
-                nameType = items[readUnsignedShort(index + 2)];
-                item.set(tag, readClass(index, buf), readUTF8(nameType, buf),
-                        readUTF8(nameType + 2, buf));
-                break;
-            case ClassWriter.INT:
-                item.set(readInt(index));
-                break;
-            case ClassWriter.FLOAT:
-                item.set(Float.intBitsToFloat(readInt(index)));
-                break;
-            case ClassWriter.NAME_TYPE:
-                item.set(tag, readUTF8(index, buf), readUTF8(index + 2, buf),
-                        null);
-                break;
-            case ClassWriter.LONG:
-                item.set(readLong(index));
-                ++i;
-                break;
-            case ClassWriter.DOUBLE:
-                item.set(Double.longBitsToDouble(readLong(index)));
-                ++i;
-                break;
-            case ClassWriter.UTF8: {
-                String s = strings[i];
-                if (s == null) {
-                    index = items[i];
-                    s = strings[i] = readUTF(index + 2,
-                            readUnsignedShort(index), buf);
-                }
-                item.set(tag, s, null, null);
-                break;
-            }
-            case ClassWriter.HANDLE: {
-                int fieldOrMethodRef = items[readUnsignedShort(index + 1)];
-                nameType = items[readUnsignedShort(fieldOrMethodRef + 2)];
-                item.set(ClassWriter.HANDLE_BASE + readByte(index),
-                        readClass(fieldOrMethodRef, buf),
-                        readUTF8(nameType, buf), readUTF8(nameType + 2, buf));
-                break;
-            }
-            case ClassWriter.INDY:
-                if (classWriter.bootstrapMethods == null) {
-                    copyBootstrapMethods(classWriter, items2, buf);
-                }
-                nameType = items[readUnsignedShort(index + 2)];
-                item.set(readUTF8(nameType, buf), readUTF8(nameType + 2, buf),
-                        readUnsignedShort(index));
-                break;
-            // case ClassWriter.STR:
-            // case ClassWriter.CLASS:
-            // case ClassWriter.MTYPE
-            default:
-                item.set(tag, readUTF8(index, buf), null, null);
-                break;
-            }
-
-            int index2 = item.hashCode % items2.length;
-            item.next = items2[index2];
-            items2[index2] = item;
-        }
-
-        int off = items[1] - 1;
-        classWriter.pool.putByteArray(b, off, header - off);
-        classWriter.items = items2;
-        classWriter.threshold = (int) (0.75d * ll);
-        classWriter.index = ll;
-    }
-
-    /**
-     * Copies the bootstrap method data into the given {@link ClassWriter}.
-     * Should be called before the {@link #accept(ClassVisitor,int)} method.
-     * 
-     * @param classWriter
-     *            the {@link ClassWriter} to copy bootstrap methods into.
-     */
-    private void copyBootstrapMethods(final ClassWriter classWriter,
-            final Item[] items, final char[] c) {
-        // finds the "BootstrapMethods" attribute
-        int u = getAttributes();
-        boolean found = false;
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            if ("BootstrapMethods".equals(attrName)) {
-                found = true;
-                break;
-            }
-            u += 6 + readInt(u + 4);
-        }
-        if (!found) {
-            return;
-        }
-        // copies the bootstrap methods in the class writer
-        int boostrapMethodCount = readUnsignedShort(u + 8);
-        for (int j = 0, v = u + 10; j < boostrapMethodCount; j++) {
-            int position = v - u - 10;
-            int hashCode = readConst(readUnsignedShort(v), c).hashCode();
-            for (int k = readUnsignedShort(v + 2); k > 0; --k) {
-                hashCode ^= readConst(readUnsignedShort(v + 4), c).hashCode();
-                v += 2;
-            }
-            v += 4;
-            Item item = new Item(j);
-            item.set(position, hashCode & 0x7FFFFFFF);
-            int index = item.hashCode % items.length;
-            item.next = items[index];
-            items[index] = item;
-        }
-        int attrSize = readInt(u + 4);
-        ByteVector bootstrapMethods = new ByteVector(attrSize + 62);
-        bootstrapMethods.putByteArray(b, u + 10, attrSize - 2);
-        classWriter.bootstrapMethodsCount = boostrapMethodCount;
-        classWriter.bootstrapMethods = bootstrapMethods;
-    }
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param is
-     *            an input stream from which to read the class.
-     * @throws IOException
-     *             if a problem occurs during reading.
-     */
-    public ClassReader(final InputStream is) throws IOException {
-        this(readClass(is, false));
-    }
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param name
-     *            the binary qualified name of the class to be read.
-     * @throws IOException
-     *             if an exception occurs during reading.
-     */
-    public ClassReader(final String name) throws IOException {
-        this(readClass(
-                ClassLoader.getSystemResourceAsStream(name.replace('.', '/')
-                        + ".class"), true));
-    }
-
-    /**
-     * Reads the bytecode of a class.
-     * 
-     * @param is
-     *            an input stream from which to read the class.
-     * @param close
-     *            true to close the input stream after reading.
-     * @return the bytecode read from the given input stream.
-     * @throws IOException
-     *             if a problem occurs during reading.
-     */
-    private static byte[] readClass(final InputStream is, boolean close)
-            throws IOException {
-        if (is == null) {
-            throw new IOException("Class not found");
-        }
-        try {
-            byte[] b = new byte[is.available()];
-            int len = 0;
-            while (true) {
-                int n = is.read(b, len, b.length - len);
-                if (n == -1) {
-                    if (len < b.length) {
-                        byte[] c = new byte[len];
-                        System.arraycopy(b, 0, c, 0, len);
-                        b = c;
-                    }
-                    return b;
-                }
-                len += n;
-                if (len == b.length) {
-                    int last = is.read();
-                    if (last < 0) {
-                        return b;
-                    }
-                    byte[] c = new byte[b.length + 1000];
-                    System.arraycopy(b, 0, c, 0, len);
-                    c[len++] = (byte) last;
-                    b = c;
-                }
-            }
-        } finally {
-            if (close) {
-                is.close();
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Public methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Makes the given visitor visit the Java class of this {@link ClassReader}
-     * . This class is the one specified in the constructor (see
-     * {@link #ClassReader(byte[]) ClassReader}).
-     * 
-     * @param classVisitor
-     *            the visitor that must visit this class.
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES}
-     *            , {@link #SKIP_FRAMES}, {@link #SKIP_CODE}.
-     */
-    public void accept(final ClassVisitor classVisitor, final int flags) {
-        accept(classVisitor, new Attribute[0], flags);
-    }
-
-    /**
-     * Makes the given visitor visit the Java class of this {@link ClassReader}.
-     * This class is the one specified in the constructor (see
-     * {@link #ClassReader(byte[]) ClassReader}).
-     * 
-     * @param classVisitor
-     *            the visitor that must visit this class.
-     * @param attrs
-     *            prototypes of the attributes that must be parsed during the
-     *            visit of the class. Any attribute whose type is not equal to
-     *            the type of one the prototypes will not be parsed: its byte
-     *            array value will be passed unchanged to the ClassWriter.
-     *            <i>This may corrupt it if this value contains references to
-     *            the constant pool, or has syntactic or semantic links with a
-     *            class element that has been transformed by a class adapter
-     *            between the reader and the writer</i>.
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES}
-     *            , {@link #SKIP_FRAMES}, {@link #SKIP_CODE}.
-     */
-    public void accept(final ClassVisitor classVisitor,
-            final Attribute[] attrs, final int flags) {
-        int u = header; // current offset in the class file
-        char[] c = new char[maxStringLength]; // buffer used to read strings
-
-        Context context = new Context();
-        context.attrs = attrs;
-        context.flags = flags;
-        context.buffer = c;
-
-        // reads the class declaration
-        int access = readUnsignedShort(u);
-        String name = readClass(u + 2, c);
-        String superClass = readClass(u + 4, c);
-        String[] interfaces = new String[readUnsignedShort(u + 6)];
-        u += 8;
-        for (int i = 0; i < interfaces.length; ++i) {
-            interfaces[i] = readClass(u, c);
-            u += 2;
-        }
-
-        // reads the class attributes
-        String signature = null;
-        String sourceFile = null;
-        String sourceDebug = null;
-        String enclosingOwner = null;
-        String enclosingName = null;
-        String enclosingDesc = null;
-        int anns = 0;
-        int ianns = 0;
-        int innerClasses = 0;
-        Attribute attributes = null;
-
-        u = getAttributes();
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            // tests are sorted in decreasing frequency order
-            // (based on frequencies observed on typical classes)
-            if ("SourceFile".equals(attrName)) {
-                sourceFile = readUTF8(u + 8, c);
-            } else if ("InnerClasses".equals(attrName)) {
-                innerClasses = u + 8;
-            } else if ("EnclosingMethod".equals(attrName)) {
-                enclosingOwner = readClass(u + 8, c);
-                int item = readUnsignedShort(u + 10);
-                if (item != 0) {
-                    enclosingName = readUTF8(items[item], c);
-                    enclosingDesc = readUTF8(items[item] + 2, c);
-                }
-            } else if (SIGNATURES && "Signature".equals(attrName)) {
-                signature = readUTF8(u + 8, c);
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleAnnotations".equals(attrName)) {
-                anns = u + 8;
-            } else if ("Deprecated".equals(attrName)) {
-                access |= Opcodes.ACC_DEPRECATED;
-            } else if ("Synthetic".equals(attrName)) {
-                access |= Opcodes.ACC_SYNTHETIC
-                        | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
-            } else if ("SourceDebugExtension".equals(attrName)) {
-                int len = readInt(u + 4);
-                sourceDebug = readUTF(u + 8, len, new char[len]);
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleAnnotations".equals(attrName)) {
-                ianns = u + 8;
-            } else if ("BootstrapMethods".equals(attrName)) {
-                int[] bootstrapMethods = new int[readUnsignedShort(u + 8)];
-                for (int j = 0, v = u + 10; j < bootstrapMethods.length; j++) {
-                    bootstrapMethods[j] = v;
-                    v += 2 + readUnsignedShort(v + 2) << 1;
-                }
-                context.bootstrapMethods = bootstrapMethods;
-            } else {
-                Attribute attr = readAttribute(attrs, attrName, u + 8,
-                        readInt(u + 4), c, -1, null);
-                if (attr != null) {
-                    attr.next = attributes;
-                    attributes = attr;
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-
-        // visits the class declaration
-        classVisitor.visit(readInt(items[1] - 7), access, name, signature,
-                superClass, interfaces);
-
-        // visits the source and debug info
-        if ((flags & SKIP_DEBUG) == 0
-                && (sourceFile != null || sourceDebug != null)) {
-            classVisitor.visitSource(sourceFile, sourceDebug);
-        }
-
-        // visits the outer class
-        if (enclosingOwner != null) {
-            classVisitor.visitOuterClass(enclosingOwner, enclosingName,
-                    enclosingDesc);
-        }
-
-        // visits the class annotations
-        if (ANNOTATIONS && anns != 0) {
-            for (int i = readUnsignedShort(anns), v = anns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        classVisitor.visitAnnotation(readUTF8(v, c), true));
-            }
-        }
-        if (ANNOTATIONS && ianns != 0) {
-            for (int i = readUnsignedShort(ianns), v = ianns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        classVisitor.visitAnnotation(readUTF8(v, c), false));
-            }
-        }
-
-        // visits the attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            classVisitor.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the inner classes
-        if (innerClasses != 0) {
-            int v = innerClasses + 2;
-            for (int i = readUnsignedShort(innerClasses); i > 0; --i) {
-                classVisitor.visitInnerClass(readClass(v, c),
-                        readClass(v + 2, c), readUTF8(v + 4, c),
-                        readUnsignedShort(v + 6));
-                v += 8;
-            }
-        }
-
-        // visits the fields and methods
-        u = header + 10 + 2 * interfaces.length;
-        for (int i = readUnsignedShort(u - 2); i > 0; --i) {
-            u = readField(classVisitor, context, u);
-        }
-        u += 2;
-        for (int i = readUnsignedShort(u - 2); i > 0; --i) {
-            u = readMethod(classVisitor, context, u);
-        }
-
-        // visits the end of the class
-        classVisitor.visitEnd();
-    }
-
-    /**
-     * Reads a field and makes the given visitor visit it.
-     * 
-     * @param classVisitor
-     *            the visitor that must visit the field.
-     * @param context
-     *            information about the class being parsed.
-     * @param u
-     *            the start offset of the field in the class file.
-     * @return the offset of the first byte following the field in the class.
-     */
-    private int readField(final ClassVisitor classVisitor,
-            final Context context, int u) {
-        // reads the field declaration
-        char[] c = context.buffer;
-        int access = readUnsignedShort(u);
-        String name = readUTF8(u + 2, c);
-        String desc = readUTF8(u + 4, c);
-        u += 6;
-
-        // reads the field attributes
-        String signature = null;
-        int anns = 0;
-        int ianns = 0;
-        Object value = null;
-        Attribute attributes = null;
-
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            // tests are sorted in decreasing frequency order
-            // (based on frequencies observed on typical classes)
-            if ("ConstantValue".equals(attrName)) {
-                int item = readUnsignedShort(u + 8);
-                value = item == 0 ? null : readConst(item, c);
-            } else if (SIGNATURES && "Signature".equals(attrName)) {
-                signature = readUTF8(u + 8, c);
-            } else if ("Deprecated".equals(attrName)) {
-                access |= Opcodes.ACC_DEPRECATED;
-            } else if ("Synthetic".equals(attrName)) {
-                access |= Opcodes.ACC_SYNTHETIC
-                        | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleAnnotations".equals(attrName)) {
-                anns = u + 8;
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleAnnotations".equals(attrName)) {
-                ianns = u + 8;
-            } else {
-                Attribute attr = readAttribute(context.attrs, attrName, u + 8,
-                        readInt(u + 4), c, -1, null);
-                if (attr != null) {
-                    attr.next = attributes;
-                    attributes = attr;
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-        u += 2;
-
-        // visits the field declaration
-        FieldVisitor fv = classVisitor.visitField(access, name, desc,
-                signature, value);
-        if (fv == null) {
-            return u;
-        }
-
-        // visits the field annotations
-        if (ANNOTATIONS && anns != 0) {
-            for (int i = readUnsignedShort(anns), v = anns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        fv.visitAnnotation(readUTF8(v, c), true));
-            }
-        }
-        if (ANNOTATIONS && ianns != 0) {
-            for (int i = readUnsignedShort(ianns), v = ianns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        fv.visitAnnotation(readUTF8(v, c), false));
-            }
-        }
-
-        // visits the field attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            fv.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the end of the field
-        fv.visitEnd();
-
-        return u;
-    }
-
-    /**
-     * Reads a method and makes the given visitor visit it.
-     * 
-     * @param classVisitor
-     *            the visitor that must visit the method.
-     * @param context
-     *            information about the class being parsed.
-     * @param u
-     *            the start offset of the method in the class file.
-     * @return the offset of the first byte following the method in the class.
-     */
-    private int readMethod(final ClassVisitor classVisitor,
-            final Context context, int u) {
-        // reads the method declaration
-        char[] c = context.buffer;
-        int access = readUnsignedShort(u);
-        String name = readUTF8(u + 2, c);
-        String desc = readUTF8(u + 4, c);
-        u += 6;
-
-        // reads the method attributes
-        int code = 0;
-        int exception = 0;
-        String[] exceptions = null;
-        String signature = null;
-        int anns = 0;
-        int ianns = 0;
-        int dann = 0;
-        int mpanns = 0;
-        int impanns = 0;
-        int firstAttribute = u;
-        Attribute attributes = null;
-
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            // tests are sorted in decreasing frequency order
-            // (based on frequencies observed on typical classes)
-            if ("Code".equals(attrName)) {
-                if ((context.flags & SKIP_CODE) == 0) {
-                    code = u + 8;
-                }
-            } else if ("Exceptions".equals(attrName)) {
-                exceptions = new String[readUnsignedShort(u + 8)];
-                exception = u + 10;
-                for (int j = 0; j < exceptions.length; ++j) {
-                    exceptions[j] = readClass(exception, c);
-                    exception += 2;
-                }
-            } else if (SIGNATURES && "Signature".equals(attrName)) {
-                signature = readUTF8(u + 8, c);
-            } else if ("Deprecated".equals(attrName)) {
-                access |= Opcodes.ACC_DEPRECATED;
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleAnnotations".equals(attrName)) {
-                anns = u + 8;
-            } else if (ANNOTATIONS && "AnnotationDefault".equals(attrName)) {
-                dann = u + 8;
-            } else if ("Synthetic".equals(attrName)) {
-                access |= Opcodes.ACC_SYNTHETIC
-                        | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleAnnotations".equals(attrName)) {
-                ianns = u + 8;
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleParameterAnnotations".equals(attrName)) {
-                mpanns = u + 8;
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleParameterAnnotations".equals(attrName)) {
-                impanns = u + 8;
-            } else {
-                Attribute attr = readAttribute(context.attrs, attrName, u + 8,
-                        readInt(u + 4), c, -1, null);
-                if (attr != null) {
-                    attr.next = attributes;
-                    attributes = attr;
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-        u += 2;
-
-        // visits the method declaration
-        MethodVisitor mv = classVisitor.visitMethod(access, name, desc,
-                signature, exceptions);
-        if (mv == null) {
-            return u;
-        }
-
-        /*
-         * if the returned MethodVisitor is in fact a MethodWriter, it means
-         * there is no method adapter between the reader and the writer. If, in
-         * addition, the writer's constant pool was copied from this reader
-         * (mw.cw.cr == this), and the signature and exceptions of the method
-         * have not been changed, then it is possible to skip all visit events
-         * and just copy the original code of the method to the writer (the
-         * access, name and descriptor can have been changed, this is not
-         * important since they are not copied as is from the reader).
-         */
-        if (WRITER && mv instanceof MethodWriter) {
-            MethodWriter mw = (MethodWriter) mv;
-            if (mw.cw.cr == this && signature == mw.signature) {
-                boolean sameExceptions = false;
-                if (exceptions == null) {
-                    sameExceptions = mw.exceptionCount == 0;
-                } else if (exceptions.length == mw.exceptionCount) {
-                    sameExceptions = true;
-                    for (int j = exceptions.length - 1; j >= 0; --j) {
-                        exception -= 2;
-                        if (mw.exceptions[j] != readUnsignedShort(exception)) {
-                            sameExceptions = false;
-                            break;
-                        }
-                    }
-                }
-                if (sameExceptions) {
-                    /*
-                     * we do not copy directly the code into MethodWriter to
-                     * save a byte array copy operation. The real copy will be
-                     * done in ClassWriter.toByteArray().
-                     */
-                    mw.classReaderOffset = firstAttribute;
-                    mw.classReaderLength = u - firstAttribute;
-                    return u;
-                }
-            }
-        }
-
-        // visits the method annotations
-        if (ANNOTATIONS && dann != 0) {
-            AnnotationVisitor dv = mv.visitAnnotationDefault();
-            readAnnotationValue(dann, c, null, dv);
-            if (dv != null) {
-                dv.visitEnd();
-            }
-        }
-        if (ANNOTATIONS && anns != 0) {
-            for (int i = readUnsignedShort(anns), v = anns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        mv.visitAnnotation(readUTF8(v, c), true));
-            }
-        }
-        if (ANNOTATIONS && ianns != 0) {
-            for (int i = readUnsignedShort(ianns), v = ianns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        mv.visitAnnotation(readUTF8(v, c), false));
-            }
-        }
-        if (ANNOTATIONS && mpanns != 0) {
-            readParameterAnnotations(mpanns, desc, c, true, mv);
-        }
-        if (ANNOTATIONS && impanns != 0) {
-            readParameterAnnotations(impanns, desc, c, false, mv);
-        }
-
-        // visits the method attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            mv.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the method code
-        if (code != 0) {
-            context.access = access;
-            context.name = name;
-            context.desc = desc;
-            mv.visitCode();
-            readCode(mv, context, code);
-        }
-
-        // visits the end of the method
-        mv.visitEnd();
-
-        return u;
-    }
-
-    /**
-     * Reads the bytecode of a method and makes the given visitor visit it.
-     * 
-     * @param mv
-     *            the visitor that must visit the method's code.
-     * @param context
-     *            information about the class being parsed.
-     * @param u
-     *            the start offset of the code attribute in the class file.
-     */
-    private void readCode(final MethodVisitor mv, final Context context, int u) {
-        // reads the header
-        byte[] b = this.b;
-        char[] c = context.buffer;
-        int maxStack = readUnsignedShort(u);
-        int maxLocals = readUnsignedShort(u + 2);
-        int codeLength = readInt(u + 4);
-        u += 8;
-
-        // reads the bytecode to find the labels
-        int codeStart = u;
-        int codeEnd = u + codeLength;
-        Label[] labels = new Label[codeLength + 2];
-        readLabel(codeLength + 1, labels);
-        while (u < codeEnd) {
-            int offset = u - codeStart;
-            int opcode = b[u] & 0xFF;
-            switch (ClassWriter.TYPE[opcode]) {
-            case ClassWriter.NOARG_INSN:
-            case ClassWriter.IMPLVAR_INSN:
-                u += 1;
-                break;
-            case ClassWriter.LABEL_INSN:
-                readLabel(offset + readShort(u + 1), labels);
-                u += 3;
-                break;
-            case ClassWriter.LABELW_INSN:
-                readLabel(offset + readInt(u + 1), labels);
-                u += 5;
-                break;
-            case ClassWriter.WIDE_INSN:
-                opcode = b[u + 1] & 0xFF;
-                if (opcode == Opcodes.IINC) {
-                    u += 6;
-                } else {
-                    u += 4;
-                }
-                break;
-            case ClassWriter.TABL_INSN:
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                readLabel(offset + readInt(u), labels);
-                for (int i = readInt(u + 8) - readInt(u + 4) + 1; i > 0; --i) {
-                    readLabel(offset + readInt(u + 12), labels);
-                    u += 4;
-                }
-                u += 12;
-                break;
-            case ClassWriter.LOOK_INSN:
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                readLabel(offset + readInt(u), labels);
-                for (int i = readInt(u + 4); i > 0; --i) {
-                    readLabel(offset + readInt(u + 12), labels);
-                    u += 8;
-                }
-                u += 8;
-                break;
-            case ClassWriter.VAR_INSN:
-            case ClassWriter.SBYTE_INSN:
-            case ClassWriter.LDC_INSN:
-                u += 2;
-                break;
-            case ClassWriter.SHORT_INSN:
-            case ClassWriter.LDCW_INSN:
-            case ClassWriter.FIELDORMETH_INSN:
-            case ClassWriter.TYPE_INSN:
-            case ClassWriter.IINC_INSN:
-                u += 3;
-                break;
-            case ClassWriter.ITFMETH_INSN:
-            case ClassWriter.INDYMETH_INSN:
-                u += 5;
-                break;
-            // case MANA_INSN:
-            default:
-                u += 4;
-                break;
-            }
-        }
-
-        // reads the try catch entries to find the labels, and also visits them
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            Label start = readLabel(readUnsignedShort(u + 2), labels);
-            Label end = readLabel(readUnsignedShort(u + 4), labels);
-            Label handler = readLabel(readUnsignedShort(u + 6), labels);
-            String type = readUTF8(items[readUnsignedShort(u + 8)], c);
-            mv.visitTryCatchBlock(start, end, handler, type);
-            u += 8;
-        }
-        u += 2;
-
-        // reads the code attributes
-        int varTable = 0;
-        int varTypeTable = 0;
-        boolean zip = true;
-        boolean unzip = (context.flags & EXPAND_FRAMES) != 0;
-        int stackMap = 0;
-        int stackMapSize = 0;
-        int frameCount = 0;
-        Context frame = null;
-        Attribute attributes = null;
-
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            if ("LocalVariableTable".equals(attrName)) {
-                if ((context.flags & SKIP_DEBUG) == 0) {
-                    varTable = u + 8;
-                    for (int j = readUnsignedShort(u + 8), v = u; j > 0; --j) {
-                        int label = readUnsignedShort(v + 10);
-                        if (labels[label] == null) {
-                            readLabel(label, labels).status |= Label.DEBUG;
-                        }
-                        label += readUnsignedShort(v + 12);
-                        if (labels[label] == null) {
-                            readLabel(label, labels).status |= Label.DEBUG;
-                        }
-                        v += 10;
-                    }
-                }
-            } else if ("LocalVariableTypeTable".equals(attrName)) {
-                varTypeTable = u + 8;
-            } else if ("LineNumberTable".equals(attrName)) {
-                if ((context.flags & SKIP_DEBUG) == 0) {
-                    for (int j = readUnsignedShort(u + 8), v = u; j > 0; --j) {
-                        int label = readUnsignedShort(v + 10);
-                        if (labels[label] == null) {
-                            readLabel(label, labels).status |= Label.DEBUG;
-                        }
-                        labels[label].line = readUnsignedShort(v + 12);
-                        v += 4;
-                    }
-                }
-            } else if (FRAMES && "StackMapTable".equals(attrName)) {
-                if ((context.flags & SKIP_FRAMES) == 0) {
-                    stackMap = u + 10;
-                    stackMapSize = readInt(u + 4);
-                    frameCount = readUnsignedShort(u + 8);
-                }
-                /*
-                 * here we do not extract the labels corresponding to the
-                 * attribute content. This would require a full parsing of the
-                 * attribute, which would need to be repeated in the second
-                 * phase (see below). Instead the content of the attribute is
-                 * read one frame at a time (i.e. after a frame has been
-                 * visited, the next frame is read), and the labels it contains
-                 * are also extracted one frame at a time. Thanks to the
-                 * ordering of frames, having only a "one frame lookahead" is
-                 * not a problem, i.e. it is not possible to see an offset
-                 * smaller than the offset of the current insn and for which no
-                 * Label exist.
-                 */
-                /*
-                 * This is not true for UNINITIALIZED type offsets. We solve
-                 * this by parsing the stack map table without a full decoding
-                 * (see below).
-                 */
-            } else if (FRAMES && "StackMap".equals(attrName)) {
-                if ((context.flags & SKIP_FRAMES) == 0) {
-                    zip = false;
-                    stackMap = u + 10;
-                    stackMapSize = readInt(u + 4);
-                    frameCount = readUnsignedShort(u + 8);
-                }
-                /*
-                 * IMPORTANT! here we assume that the frames are ordered, as in
-                 * the StackMapTable attribute, although this is not guaranteed
-                 * by the attribute format.
-                 */
-            } else {
-                for (int j = 0; j < context.attrs.length; ++j) {
-                    if (context.attrs[j].type.equals(attrName)) {
-                        Attribute attr = context.attrs[j].read(this, u + 8,
-                                readInt(u + 4), c, codeStart - 8, labels);
-                        if (attr != null) {
-                            attr.next = attributes;
-                            attributes = attr;
-                        }
-                    }
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-        u += 2;
-
-        // generates the first (implicit) stack map frame
-        if (FRAMES && stackMap != 0) {
-            /*
-             * for the first explicit frame the offset is not offset_delta + 1
-             * but only offset_delta; setting the implicit frame offset to -1
-             * allow the use of the "offset_delta + 1" rule in all cases
-             */
-            frame = context;
-            frame.offset = -1;
-            frame.mode = 0;
-            frame.localCount = 0;
-            frame.localDiff = 0;
-            frame.stackCount = 0;
-            frame.local = new Object[maxLocals];
-            frame.stack = new Object[maxStack];
-            if (unzip) {
-                getImplicitFrame(context);
-            }
-            /*
-             * Finds labels for UNINITIALIZED frame types. Instead of decoding
-             * each element of the stack map table, we look for 3 consecutive
-             * bytes that "look like" an UNINITIALIZED type (tag 8, offset
-             * within code bounds, NEW instruction at this offset). We may find
-             * false positives (i.e. not real UNINITIALIZED types), but this
-             * should be rare, and the only consequence will be the creation of
-             * an unneeded label. This is better than creating a label for each
-             * NEW instruction, and faster than fully decoding the whole stack
-             * map table.
-             */
-            for (int i = stackMap; i < stackMap + stackMapSize - 2; ++i) {
-                if (b[i] == 8) { // UNINITIALIZED FRAME TYPE
-                    int v = readUnsignedShort(i + 1);
-                    if (v >= 0 && v < codeLength) {
-                        if ((b[codeStart + v] & 0xFF) == Opcodes.NEW) {
-                            readLabel(v, labels);
-                        }
-                    }
-                }
-            }
-        }
-
-        // visits the instructions
-        u = codeStart;
-        while (u < codeEnd) {
-            int offset = u - codeStart;
-
-            // visits the label and line number for this offset, if any
-            Label l = labels[offset];
-            if (l != null) {
-                mv.visitLabel(l);
-                if ((context.flags & SKIP_DEBUG) == 0 && l.line > 0) {
-                    mv.visitLineNumber(l.line, l);
-                }
-            }
-
-            // visits the frame for this offset, if any
-            while (FRAMES && frame != null
-                    && (frame.offset == offset || frame.offset == -1)) {
-                // if there is a frame for this offset, makes the visitor visit
-                // it, and reads the next frame if there is one.
-                if (frame.offset != -1) {
-                    if (!zip || unzip) {
-                        mv.visitFrame(Opcodes.F_NEW, frame.localCount,
-                                frame.local, frame.stackCount, frame.stack);
-                    } else {
-                        mv.visitFrame(frame.mode, frame.localDiff, frame.local,
-                                frame.stackCount, frame.stack);
-                    }
-                }
-                if (frameCount > 0) {
-                    stackMap = readFrame(stackMap, zip, unzip, labels, frame);
-                    --frameCount;
-                } else {
-                    frame = null;
-                }
-            }
-
-            // visits the instruction at this offset
-            int opcode = b[u] & 0xFF;
-            switch (ClassWriter.TYPE[opcode]) {
-            case ClassWriter.NOARG_INSN:
-                mv.visitInsn(opcode);
-                u += 1;
-                break;
-            case ClassWriter.IMPLVAR_INSN:
-                if (opcode > Opcodes.ISTORE) {
-                    opcode -= 59; // ISTORE_0
-                    mv.visitVarInsn(Opcodes.ISTORE + (opcode >> 2),
-                            opcode & 0x3);
-                } else {
-                    opcode -= 26; // ILOAD_0
-                    mv.visitVarInsn(Opcodes.ILOAD + (opcode >> 2), opcode & 0x3);
-                }
-                u += 1;
-                break;
-            case ClassWriter.LABEL_INSN:
-                mv.visitJumpInsn(opcode, labels[offset + readShort(u + 1)]);
-                u += 3;
-                break;
-            case ClassWriter.LABELW_INSN:
-                mv.visitJumpInsn(opcode - 33, labels[offset + readInt(u + 1)]);
-                u += 5;
-                break;
-            case ClassWriter.WIDE_INSN:
-                opcode = b[u + 1] & 0xFF;
-                if (opcode == Opcodes.IINC) {
-                    mv.visitIincInsn(readUnsignedShort(u + 2), readShort(u + 4));
-                    u += 6;
-                } else {
-                    mv.visitVarInsn(opcode, readUnsignedShort(u + 2));
-                    u += 4;
-                }
-                break;
-            case ClassWriter.TABL_INSN: {
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                int label = offset + readInt(u);
-                int min = readInt(u + 4);
-                int max = readInt(u + 8);
-                Label[] table = new Label[max - min + 1];
-                u += 12;
-                for (int i = 0; i < table.length; ++i) {
-                    table[i] = labels[offset + readInt(u)];
-                    u += 4;
-                }
-                mv.visitTableSwitchInsn(min, max, labels[label], table);
-                break;
-            }
-            case ClassWriter.LOOK_INSN: {
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                int label = offset + readInt(u);
-                int len = readInt(u + 4);
-                int[] keys = new int[len];
-                Label[] values = new Label[len];
-                u += 8;
-                for (int i = 0; i < len; ++i) {
-                    keys[i] = readInt(u);
-                    values[i] = labels[offset + readInt(u + 4)];
-                    u += 8;
-                }
-                mv.visitLookupSwitchInsn(labels[label], keys, values);
-                break;
-            }
-            case ClassWriter.VAR_INSN:
-                mv.visitVarInsn(opcode, b[u + 1] & 0xFF);
-                u += 2;
-                break;
-            case ClassWriter.SBYTE_INSN:
-                mv.visitIntInsn(opcode, b[u + 1]);
-                u += 2;
-                break;
-            case ClassWriter.SHORT_INSN:
-                mv.visitIntInsn(opcode, readShort(u + 1));
-                u += 3;
-                break;
-            case ClassWriter.LDC_INSN:
-                mv.visitLdcInsn(readConst(b[u + 1] & 0xFF, c));
-                u += 2;
-                break;
-            case ClassWriter.LDCW_INSN:
-                mv.visitLdcInsn(readConst(readUnsignedShort(u + 1), c));
-                u += 3;
-                break;
-            case ClassWriter.FIELDORMETH_INSN:
-            case ClassWriter.ITFMETH_INSN: {
-                int cpIndex = items[readUnsignedShort(u + 1)];
-                String iowner = readClass(cpIndex, c);
-                cpIndex = items[readUnsignedShort(cpIndex + 2)];
-                String iname = readUTF8(cpIndex, c);
-                String idesc = readUTF8(cpIndex + 2, c);
-                if (opcode < Opcodes.INVOKEVIRTUAL) {
-                    mv.visitFieldInsn(opcode, iowner, iname, idesc);
-                } else {
-                    mv.visitMethodInsn(opcode, iowner, iname, idesc);
-                }
-                if (opcode == Opcodes.INVOKEINTERFACE) {
-                    u += 5;
-                } else {
-                    u += 3;
-                }
-                break;
-            }
-            case ClassWriter.INDYMETH_INSN: {
-                int cpIndex = items[readUnsignedShort(u + 1)];
-                int bsmIndex = context.bootstrapMethods[readUnsignedShort(cpIndex)];
-                Handle bsm = (Handle) readConst(readUnsignedShort(bsmIndex), c);
-                int bsmArgCount = readUnsignedShort(bsmIndex + 2);
-                Object[] bsmArgs = new Object[bsmArgCount];
-                bsmIndex += 4;
-                for (int i = 0; i < bsmArgCount; i++) {
-                    bsmArgs[i] = readConst(readUnsignedShort(bsmIndex), c);
-                    bsmIndex += 2;
-                }
-                cpIndex = items[readUnsignedShort(cpIndex + 2)];
-                String iname = readUTF8(cpIndex, c);
-                String idesc = readUTF8(cpIndex + 2, c);
-                mv.visitInvokeDynamicInsn(iname, idesc, bsm, bsmArgs);
-                u += 5;
-                break;
-            }
-            case ClassWriter.TYPE_INSN:
-                mv.visitTypeInsn(opcode, readClass(u + 1, c));
-                u += 3;
-                break;
-            case ClassWriter.IINC_INSN:
-                mv.visitIincInsn(b[u + 1] & 0xFF, b[u + 2]);
-                u += 3;
-                break;
-            // case MANA_INSN:
-            default:
-                mv.visitMultiANewArrayInsn(readClass(u + 1, c), b[u + 3] & 0xFF);
-                u += 4;
-                break;
-            }
-        }
-        if (labels[codeLength] != null) {
-            mv.visitLabel(labels[codeLength]);
-        }
-
-        // visits the local variable tables
-        if ((context.flags & SKIP_DEBUG) == 0 && varTable != 0) {
-            int[] typeTable = null;
-            if (varTypeTable != 0) {
-                u = varTypeTable + 2;
-                typeTable = new int[readUnsignedShort(varTypeTable) * 3];
-                for (int i = typeTable.length; i > 0;) {
-                    typeTable[--i] = u + 6; // signature
-                    typeTable[--i] = readUnsignedShort(u + 8); // index
-                    typeTable[--i] = readUnsignedShort(u); // start
-                    u += 10;
-                }
-            }
-            u = varTable + 2;
-            for (int i = readUnsignedShort(varTable); i > 0; --i) {
-                int start = readUnsignedShort(u);
-                int length = readUnsignedShort(u + 2);
-                int index = readUnsignedShort(u + 8);
-                String vsignature = null;
-                if (typeTable != null) {
-                    for (int j = 0; j < typeTable.length; j += 3) {
-                        if (typeTable[j] == start && typeTable[j + 1] == index) {
-                            vsignature = readUTF8(typeTable[j + 2], c);
-                            break;
-                        }
-                    }
-                }
-                mv.visitLocalVariable(readUTF8(u + 4, c), readUTF8(u + 6, c),
-                        vsignature, labels[start], labels[start + length],
-                        index);
-                u += 10;
-            }
-        }
-
-        // visits the code attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            mv.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the max stack and max locals values
-        mv.visitMaxs(maxStack, maxLocals);
-    }
-
-    /**
-     * Reads parameter annotations and makes the given visitor visit them.
-     * 
-     * @param v
-     *            start offset in {@link #b b} of the annotations to be read.
-     * @param desc
-     *            the method descriptor.
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param visible
-     *            <tt>true</tt> if the annotations to be read are visible at
-     *            runtime.
-     * @param mv
-     *            the visitor that must visit the annotations.
-     */
-    private void readParameterAnnotations(int v, final String desc,
-            final char[] buf, final boolean visible, final MethodVisitor mv) {
-        int i;
-        int n = b[v++] & 0xFF;
-        // workaround for a bug in javac (javac compiler generates a parameter
-        // annotation array whose size is equal to the number of parameters in
-        // the Java source file, while it should generate an array whose size is
-        // equal to the number of parameters in the method descriptor - which
-        // includes the synthetic parameters added by the compiler). This work-
-        // around supposes that the synthetic parameters are the first ones.
-        int synthetics = Type.getArgumentTypes(desc).length - n;
-        AnnotationVisitor av;
-        for (i = 0; i < synthetics; ++i) {
-            // virtual annotation to detect synthetic parameters in MethodWriter
-            av = mv.visitParameterAnnotation(i, "Ljava/lang/Synthetic;", false);
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-        for (; i < n + synthetics; ++i) {
-            int j = readUnsignedShort(v);
-            v += 2;
-            for (; j > 0; --j) {
-                av = mv.visitParameterAnnotation(i, readUTF8(v, buf), visible);
-                v = readAnnotationValues(v + 2, buf, true, av);
-            }
-        }
-    }
-
-    /**
-     * Reads the values of an annotation and makes the given visitor visit them.
-     * 
-     * @param v
-     *            the start offset in {@link #b b} of the values to be read
-     *            (including the unsigned short that gives the number of
-     *            values).
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param named
-     *            if the annotation values are named or not.
-     * @param av
-     *            the visitor that must visit the values.
-     * @return the end offset of the annotation values.
-     */
-    private int readAnnotationValues(int v, final char[] buf,
-            final boolean named, final AnnotationVisitor av) {
-        int i = readUnsignedShort(v);
-        v += 2;
-        if (named) {
-            for (; i > 0; --i) {
-                v = readAnnotationValue(v + 2, buf, readUTF8(v, buf), av);
-            }
-        } else {
-            for (; i > 0; --i) {
-                v = readAnnotationValue(v, buf, null, av);
-            }
-        }
-        if (av != null) {
-            av.visitEnd();
-        }
-        return v;
-    }
-
-    /**
-     * Reads a value of an annotation and makes the given visitor visit it.
-     * 
-     * @param v
-     *            the start offset in {@link #b b} of the value to be read
-     *            (<i>not including the value name constant pool index</i>).
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param name
-     *            the name of the value to be read.
-     * @param av
-     *            the visitor that must visit the value.
-     * @return the end offset of the annotation value.
-     */
-    private int readAnnotationValue(int v, final char[] buf, final String name,
-            final AnnotationVisitor av) {
-        int i;
-        if (av == null) {
-            switch (b[v] & 0xFF) {
-            case 'e': // enum_const_value
-                return v + 5;
-            case '@': // annotation_value
-                return readAnnotationValues(v + 3, buf, true, null);
-            case '[': // array_value
-                return readAnnotationValues(v + 1, buf, false, null);
-            default:
-                return v + 3;
-            }
-        }
-        switch (b[v++] & 0xFF) {
-        case 'I': // pointer to CONSTANT_Integer
-        case 'J': // pointer to CONSTANT_Long
-        case 'F': // pointer to CONSTANT_Float
-        case 'D': // pointer to CONSTANT_Double
-            av.visit(name, readConst(readUnsignedShort(v), buf));
-            v += 2;
-            break;
-        case 'B': // pointer to CONSTANT_Byte
-            av.visit(name,
-                    new Byte((byte) readInt(items[readUnsignedShort(v)])));
-            v += 2;
-            break;
-        case 'Z': // pointer to CONSTANT_Boolean
-            av.visit(name,
-                    readInt(items[readUnsignedShort(v)]) == 0 ? Boolean.FALSE
-                            : Boolean.TRUE);
-            v += 2;
-            break;
-        case 'S': // pointer to CONSTANT_Short
-            av.visit(name, new Short(
-                    (short) readInt(items[readUnsignedShort(v)])));
-            v += 2;
-            break;
-        case 'C': // pointer to CONSTANT_Char
-            av.visit(name, new Character(
-                    (char) readInt(items[readUnsignedShort(v)])));
-            v += 2;
-            break;
-        case 's': // pointer to CONSTANT_Utf8
-            av.visit(name, readUTF8(v, buf));
-            v += 2;
-            break;
-        case 'e': // enum_const_value
-            av.visitEnum(name, readUTF8(v, buf), readUTF8(v + 2, buf));
-            v += 4;
-            break;
-        case 'c': // class_info
-            av.visit(name, Type.getType(readUTF8(v, buf)));
-            v += 2;
-            break;
-        case '@': // annotation_value
-            v = readAnnotationValues(v + 2, buf, true,
-                    av.visitAnnotation(name, readUTF8(v, buf)));
-            break;
-        case '[': // array_value
-            int size = readUnsignedShort(v);
-            v += 2;
-            if (size == 0) {
-                return readAnnotationValues(v - 2, buf, false,
-                        av.visitArray(name));
-            }
-            switch (this.b[v++] & 0xFF) {
-            case 'B':
-                byte[] bv = new byte[size];
-                for (i = 0; i < size; i++) {
-                    bv[i] = (byte) readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, bv);
-                --v;
-                break;
-            case 'Z':
-                boolean[] zv = new boolean[size];
-                for (i = 0; i < size; i++) {
-                    zv[i] = readInt(items[readUnsignedShort(v)]) != 0;
-                    v += 3;
-                }
-                av.visit(name, zv);
-                --v;
-                break;
-            case 'S':
-                short[] sv = new short[size];
-                for (i = 0; i < size; i++) {
-                    sv[i] = (short) readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, sv);
-                --v;
-                break;
-            case 'C':
-                char[] cv = new char[size];
-                for (i = 0; i < size; i++) {
-                    cv[i] = (char) readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, cv);
-                --v;
-                break;
-            case 'I':
-                int[] iv = new int[size];
-                for (i = 0; i < size; i++) {
-                    iv[i] = readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, iv);
-                --v;
-                break;
-            case 'J':
-                long[] lv = new long[size];
-                for (i = 0; i < size; i++) {
-                    lv[i] = readLong(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, lv);
-                --v;
-                break;
-            case 'F':
-                float[] fv = new float[size];
-                for (i = 0; i < size; i++) {
-                    fv[i] = Float
-                            .intBitsToFloat(readInt(items[readUnsignedShort(v)]));
-                    v += 3;
-                }
-                av.visit(name, fv);
-                --v;
-                break;
-            case 'D':
-                double[] dv = new double[size];
-                for (i = 0; i < size; i++) {
-                    dv[i] = Double
-                            .longBitsToDouble(readLong(items[readUnsignedShort(v)]));
-                    v += 3;
-                }
-                av.visit(name, dv);
-                --v;
-                break;
-            default:
-                v = readAnnotationValues(v - 3, buf, false, av.visitArray(name));
-            }
-        }
-        return v;
-    }
-
-    /**
-     * Computes the implicit frame of the method currently being parsed (as
-     * defined in the given {@link Context}) and stores it in the given context.
-     * 
-     * @param frame
-     *            information about the class being parsed.
-     */
-    private void getImplicitFrame(final Context frame) {
-        String desc = frame.desc;
-        Object[] locals = frame.local;
-        int local = 0;
-        if ((frame.access & Opcodes.ACC_STATIC) == 0) {
-            if ("<init>".equals(frame.name)) {
-                locals[local++] = Opcodes.UNINITIALIZED_THIS;
-            } else {
-                locals[local++] = readClass(header + 2, frame.buffer);
-            }
-        }
-        int i = 1;
-        loop: while (true) {
-            int j = i;
-            switch (desc.charAt(i++)) {
-            case 'Z':
-            case 'C':
-            case 'B':
-            case 'S':
-            case 'I':
-                locals[local++] = Opcodes.INTEGER;
-                break;
-            case 'F':
-                locals[local++] = Opcodes.FLOAT;
-                break;
-            case 'J':
-                locals[local++] = Opcodes.LONG;
-                break;
-            case 'D':
-                locals[local++] = Opcodes.DOUBLE;
-                break;
-            case '[':
-                while (desc.charAt(i) == '[') {
-                    ++i;
-                }
-                if (desc.charAt(i) == 'L') {
-                    ++i;
-                    while (desc.charAt(i) != ';') {
-                        ++i;
-                    }
-                }
-                locals[local++] = desc.substring(j, ++i);
-                break;
-            case 'L':
-                while (desc.charAt(i) != ';') {
-                    ++i;
-                }
-                locals[local++] = desc.substring(j + 1, i++);
-                break;
-            default:
-                break loop;
-            }
-        }
-        frame.localCount = local;
-    }
-
-    /**
-     * Reads a stack map frame and stores the result in the given
-     * {@link Context} object.
-     * 
-     * @param stackMap
-     *            the start offset of a stack map frame in the class file.
-     * @param zip
-     *            if the stack map frame at stackMap is compressed or not.
-     * @param unzip
-     *            if the stack map frame must be uncompressed.
-     * @param labels
-     *            the labels of the method currently being parsed, indexed by
-     *            their offset. A new label for the parsed stack map frame is
-     *            stored in this array if it does not already exist.
-     * @param frame
-     *            where the parsed stack map frame must be stored.
-     * @return the offset of the first byte following the parsed frame.
-     */
-    private int readFrame(int stackMap, boolean zip, boolean unzip,
-            Label[] labels, Context frame) {
-        char[] c = frame.buffer;
-        int tag;
-        int delta;
-        if (zip) {
-            tag = b[stackMap++] & 0xFF;
-        } else {
-            tag = MethodWriter.FULL_FRAME;
-            frame.offset = -1;
-        }
-        frame.localDiff = 0;
-        if (tag < MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME) {
-            delta = tag;
-            frame.mode = Opcodes.F_SAME;
-            frame.stackCount = 0;
-        } else if (tag < MethodWriter.RESERVED) {
-            delta = tag - MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME;
-            stackMap = readFrameType(frame.stack, 0, stackMap, c, labels);
-            frame.mode = Opcodes.F_SAME1;
-            frame.stackCount = 1;
-        } else {
-            delta = readUnsignedShort(stackMap);
-            stackMap += 2;
-            if (tag == MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED) {
-                stackMap = readFrameType(frame.stack, 0, stackMap, c, labels);
-                frame.mode = Opcodes.F_SAME1;
-                frame.stackCount = 1;
-            } else if (tag >= MethodWriter.CHOP_FRAME
-                    && tag < MethodWriter.SAME_FRAME_EXTENDED) {
-                frame.mode = Opcodes.F_CHOP;
-                frame.localDiff = MethodWriter.SAME_FRAME_EXTENDED - tag;
-                frame.localCount -= frame.localDiff;
-                frame.stackCount = 0;
-            } else if (tag == MethodWriter.SAME_FRAME_EXTENDED) {
-                frame.mode = Opcodes.F_SAME;
-                frame.stackCount = 0;
-            } else if (tag < MethodWriter.FULL_FRAME) {
-                int local = unzip ? frame.localCount : 0;
-                for (int i = tag - MethodWriter.SAME_FRAME_EXTENDED; i > 0; i--) {
-                    stackMap = readFrameType(frame.local, local++, stackMap, c,
-                            labels);
-                }
-                frame.mode = Opcodes.F_APPEND;
-                frame.localDiff = tag - MethodWriter.SAME_FRAME_EXTENDED;
-                frame.localCount += frame.localDiff;
-                frame.stackCount = 0;
-            } else { // if (tag == FULL_FRAME) {
-                frame.mode = Opcodes.F_FULL;
-                int n = readUnsignedShort(stackMap);
-                stackMap += 2;
-                frame.localDiff = n;
-                frame.localCount = n;
-                for (int local = 0; n > 0; n--) {
-                    stackMap = readFrameType(frame.local, local++, stackMap, c,
-                            labels);
-                }
-                n = readUnsignedShort(stackMap);
-                stackMap += 2;
-                frame.stackCount = n;
-                for (int stack = 0; n > 0; n--) {
-                    stackMap = readFrameType(frame.stack, stack++, stackMap, c,
-                            labels);
-                }
-            }
-        }
-        frame.offset += delta + 1;
-        readLabel(frame.offset, labels);
-        return stackMap;
-    }
-
-    /**
-     * Reads a stack map frame type and stores it at the given index in the
-     * given array.
-     * 
-     * @param frame
-     *            the array where the parsed type must be stored.
-     * @param index
-     *            the index in 'frame' where the parsed type must be stored.
-     * @param v
-     *            the start offset of the stack map frame type to read.
-     * @param buf
-     *            a buffer to read strings.
-     * @param labels
-     *            the labels of the method currently being parsed, indexed by
-     *            their offset. If the parsed type is an Uninitialized type, a
-     *            new label for the corresponding NEW instruction is stored in
-     *            this array if it does not already exist.
-     * @return the offset of the first byte after the parsed type.
-     */
-    private int readFrameType(final Object[] frame, final int index, int v,
-            final char[] buf, final Label[] labels) {
-        int type = b[v++] & 0xFF;
-        switch (type) {
-        case 0:
-            frame[index] = Opcodes.TOP;
-            break;
-        case 1:
-            frame[index] = Opcodes.INTEGER;
-            break;
-        case 2:
-            frame[index] = Opcodes.FLOAT;
-            break;
-        case 3:
-            frame[index] = Opcodes.DOUBLE;
-            break;
-        case 4:
-            frame[index] = Opcodes.LONG;
-            break;
-        case 5:
-            frame[index] = Opcodes.NULL;
-            break;
-        case 6:
-            frame[index] = Opcodes.UNINITIALIZED_THIS;
-            break;
-        case 7: // Object
-            frame[index] = readClass(v, buf);
-            v += 2;
-            break;
-        default: // Uninitialized
-            frame[index] = readLabel(readUnsignedShort(v), labels);
-            v += 2;
-        }
-        return v;
-    }
-
-    /**
-     * Returns the label corresponding to the given offset. The default
-     * implementation of this method creates a label for the given offset if it
-     * has not been already created.
-     * 
-     * @param offset
-     *            a bytecode offset in a method.
-     * @param labels
-     *            the already created labels, indexed by their offset. If a
-     *            label already exists for offset this method must not create a
-     *            new one. Otherwise it must store the new label in this array.
-     * @return a non null Label, which must be equal to labels[offset].
-     */
-    protected Label readLabel(int offset, Label[] labels) {
-        if (labels[offset] == null) {
-            labels[offset] = new Label();
-        }
-        return labels[offset];
-    }
-
-    /**
-     * Returns the start index of the attribute_info structure of this class.
-     * 
-     * @return the start index of the attribute_info structure of this class.
-     */
-    private int getAttributes() {
-        // skips the header
-        int u = header + 8 + readUnsignedShort(header + 6) * 2;
-        // skips fields and methods
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            for (int j = readUnsignedShort(u + 8); j > 0; --j) {
-                u += 6 + readInt(u + 12);
-            }
-            u += 8;
-        }
-        u += 2;
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            for (int j = readUnsignedShort(u + 8); j > 0; --j) {
-                u += 6 + readInt(u + 12);
-            }
-            u += 8;
-        }
-        // the attribute_info structure starts just after the methods
-        return u + 2;
-    }
-
-    /**
-     * Reads an attribute in {@link #b b}.
-     * 
-     * @param attrs
-     *            prototypes of the attributes that must be parsed during the
-     *            visit of the class. Any attribute whose type is not equal to
-     *            the type of one the prototypes is ignored (i.e. an empty
-     *            {@link Attribute} instance is returned).
-     * @param type
-     *            the type of the attribute.
-     * @param off
-     *            index of the first byte of the attribute's content in
-     *            {@link #b b}. The 6 attribute header bytes, containing the
-     *            type and the length of the attribute, are not taken into
-     *            account here (they have already been read).
-     * @param len
-     *            the length of the attribute's content.
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param codeOff
-     *            index of the first byte of code's attribute content in
-     *            {@link #b b}, or -1 if the attribute to be read is not a code
-     *            attribute. The 6 attribute header bytes, containing the type
-     *            and the length of the attribute, are not taken into account
-     *            here.
-     * @param labels
-     *            the labels of the method's code, or <tt>null</tt> if the
-     *            attribute to be read is not a code attribute.
-     * @return the attribute that has been read, or <tt>null</tt> to skip this
-     *         attribute.
-     */
-    private Attribute readAttribute(final Attribute[] attrs, final String type,
-            final int off, final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        for (int i = 0; i < attrs.length; ++i) {
-            if (attrs[i].type.equals(type)) {
-                return attrs[i].read(this, off, len, buf, codeOff, labels);
-            }
-        }
-        return new Attribute(type).read(this, off, len, null, -1, null);
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: low level parsing
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the number of constant pool items in {@link #b b}.
-     * 
-     * @return the number of constant pool items in {@link #b b}.
-     */
-    public int getItemCount() {
-        return items.length;
-    }
-
-    /**
-     * Returns the start index of the constant pool item in {@link #b b}, plus
-     * one. <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param item
-     *            the index a constant pool item.
-     * @return the start index of the constant pool item in {@link #b b}, plus
-     *         one.
-     */
-    public int getItem(final int item) {
-        return items[item];
-    }
-
-    /**
-     * Returns the maximum length of the strings contained in the constant pool
-     * of the class.
-     * 
-     * @return the maximum length of the strings contained in the constant pool
-     *         of the class.
-     */
-    public int getMaxStringLength() {
-        return maxStringLength;
-    }
-
-    /**
-     * Reads a byte value in {@link #b b}. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public int readByte(final int index) {
-        return b[index] & 0xFF;
-    }
-
-    /**
-     * Reads an unsigned short value in {@link #b b}. <i>This method is intended
-     * for {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public int readUnsignedShort(final int index) {
-        byte[] b = this.b;
-        return ((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF);
-    }
-
-    /**
-     * Reads a signed short value in {@link #b b}. <i>This method is intended
-     * for {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public short readShort(final int index) {
-        byte[] b = this.b;
-        return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
-    }
-
-    /**
-     * Reads a signed int value in {@link #b b}. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public int readInt(final int index) {
-        byte[] b = this.b;
-        return ((b[index] & 0xFF) << 24) | ((b[index + 1] & 0xFF) << 16)
-                | ((b[index + 2] & 0xFF) << 8) | (b[index + 3] & 0xFF);
-    }
-
-    /**
-     * Reads a signed long value in {@link #b b}. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public long readLong(final int index) {
-        long l1 = readInt(index);
-        long l0 = readInt(index + 4) & 0xFFFFFFFFL;
-        return (l1 << 32) | l0;
-    }
-
-    /**
-     * Reads an UTF8 string constant pool item in {@link #b b}. <i>This method
-     * is intended for {@link Attribute} sub classes, and is normally not needed
-     * by class generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of an unsigned short value in {@link #b b},
-     *            whose value is the index of an UTF8 constant pool item.
-     * @param buf
-     *            buffer to be used to read the item. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the String corresponding to the specified UTF8 item.
-     */
-    public String readUTF8(int index, final char[] buf) {
-        int item = readUnsignedShort(index);
-        if (index == 0 || item == 0) {
-            return null;
-        }
-        String s = strings[item];
-        if (s != null) {
-            return s;
-        }
-        index = items[item];
-        return strings[item] = readUTF(index + 2, readUnsignedShort(index), buf);
-    }
-
-    /**
-     * Reads UTF8 string in {@link #b b}.
-     * 
-     * @param index
-     *            start offset of the UTF8 string to be read.
-     * @param utfLen
-     *            length of the UTF8 string to be read.
-     * @param buf
-     *            buffer to be used to read the string. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the String corresponding to the specified UTF8 string.
-     */
-    private String readUTF(int index, final int utfLen, final char[] buf) {
-        int endIndex = index + utfLen;
-        byte[] b = this.b;
-        int strLen = 0;
-        int c;
-        int st = 0;
-        char cc = 0;
-        while (index < endIndex) {
-            c = b[index++];
-            switch (st) {
-            case 0:
-                c = c & 0xFF;
-                if (c < 0x80) { // 0xxxxxxx
-                    buf[strLen++] = (char) c;
-                } else if (c < 0xE0 && c > 0xBF) { // 110x xxxx 10xx xxxx
-                    cc = (char) (c & 0x1F);
-                    st = 1;
-                } else { // 1110 xxxx 10xx xxxx 10xx xxxx
-                    cc = (char) (c & 0x0F);
-                    st = 2;
-                }
-                break;
-
-            case 1: // byte 2 of 2-byte char or byte 3 of 3-byte char
-                buf[strLen++] = (char) ((cc << 6) | (c & 0x3F));
-                st = 0;
-                break;
-
-            case 2: // byte 2 of 3-byte char
-                cc = (char) ((cc << 6) | (c & 0x3F));
-                st = 1;
-                break;
-            }
-        }
-        return new String(buf, 0, strLen);
-    }
-
-    /**
-     * Reads a class constant pool item in {@link #b b}. <i>This method is
-     * intended for {@link Attribute} sub classes, and is normally not needed by
-     * class generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of an unsigned short value in {@link #b b},
-     *            whose value is the index of a class constant pool item.
-     * @param buf
-     *            buffer to be used to read the item. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the String corresponding to the specified class item.
-     */
-    public String readClass(final int index, final char[] buf) {
-        // computes the start index of the CONSTANT_Class item in b
-        // and reads the CONSTANT_Utf8 item designated by
-        // the first two bytes of this CONSTANT_Class item
-        return readUTF8(items[readUnsignedShort(index)], buf);
-    }
-
-    /**
-     * Reads a numeric or string constant pool item in {@link #b b}. <i>This
-     * method is intended for {@link Attribute} sub classes, and is normally not
-     * needed by class generators or adapters.</i>
-     * 
-     * @param item
-     *            the index of a constant pool item.
-     * @param buf
-     *            buffer to be used to read the item. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the {@link Integer}, {@link Float}, {@link Long}, {@link Double},
-     *         {@link String}, {@link Type} or {@link Handle} corresponding to
-     *         the given constant pool item.
-     */
-    public Object readConst(final int item, final char[] buf) {
-        int index = items[item];
-        switch (b[index - 1]) {
-        case ClassWriter.INT:
-            return new Integer(readInt(index));
-        case ClassWriter.FLOAT:
-            return new Float(Float.intBitsToFloat(readInt(index)));
-        case ClassWriter.LONG:
-            return new Long(readLong(index));
-        case ClassWriter.DOUBLE:
-            return new Double(Double.longBitsToDouble(readLong(index)));
-        case ClassWriter.CLASS:
-            return Type.getObjectType(readUTF8(index, buf));
-        case ClassWriter.STR:
-            return readUTF8(index, buf);
-        case ClassWriter.MTYPE:
-            return Type.getMethodType(readUTF8(index, buf));
-        default: // case ClassWriter.HANDLE_BASE + [1..9]:
-            int tag = readByte(index);
-            int[] items = this.items;
-            int cpIndex = items[readUnsignedShort(index + 1)];
-            String owner = readClass(cpIndex, buf);
-            cpIndex = items[readUnsignedShort(cpIndex + 2)];
-            String name = readUTF8(cpIndex, buf);
-            String desc = readUTF8(cpIndex + 2, buf);
-            return new Handle(tag, owner, name, desc);
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ClassVisitor.java b/asm4/src/org/objectweb/asm/ClassVisitor.java
deleted file mode 100644
index cf3366c..0000000
--- a/asm4/src/org/objectweb/asm/ClassVisitor.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java class. The methods of this class must be called in
- * the following order: <tt>visit</tt> [ <tt>visitSource</tt> ] [
- * <tt>visitOuterClass</tt> ] ( <tt>visitAnnotation</tt> |
- * <tt>visitAttribute</tt> )* ( <tt>visitInnerClass</tt> | <tt>visitField</tt> |
- * <tt>visitMethod</tt> )* <tt>visitEnd</tt>.
- * 
- * @author Eric Bruneton
- */
-public abstract class ClassVisitor {
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * The class visitor to which this visitor must delegate method calls. May
-     * be null.
-     */
-    protected ClassVisitor cv;
-
-    /**
-     * Constructs a new {@link ClassVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public ClassVisitor(final int api) {
-        this(api, null);
-    }
-
-    /**
-     * Constructs a new {@link ClassVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param cv
-     *            the class visitor to which this visitor must delegate method
-     *            calls. May be null.
-     */
-    public ClassVisitor(final int api, final ClassVisitor cv) {
-        if (api != Opcodes.ASM4) {
-            throw new IllegalArgumentException();
-        }
-        this.api = api;
-        this.cv = cv;
-    }
-
-    /**
-     * Visits the header of the class.
-     * 
-     * @param version
-     *            the class version.
-     * @param access
-     *            the class's access flags (see {@link Opcodes}). This parameter
-     *            also indicates if the class is deprecated.
-     * @param name
-     *            the internal name of the class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     * @param signature
-     *            the signature of this class. May be <tt>null</tt> if the class
-     *            is not a generic one, and does not extend or implement generic
-     *            classes or interfaces.
-     * @param superName
-     *            the internal of name of the super class (see
-     *            {@link Type#getInternalName() getInternalName}). For
-     *            interfaces, the super class is {@link Object}. May be
-     *            <tt>null</tt>, but only for the {@link Object} class.
-     * @param interfaces
-     *            the internal names of the class's interfaces (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     */
-    public void visit(int version, int access, String name, String signature,
-            String superName, String[] interfaces) {
-        if (cv != null) {
-            cv.visit(version, access, name, signature, superName, interfaces);
-        }
-    }
-
-    /**
-     * Visits the source of the class.
-     * 
-     * @param source
-     *            the name of the source file from which the class was compiled.
-     *            May be <tt>null</tt>.
-     * @param debug
-     *            additional debug information to compute the correspondance
-     *            between source and compiled elements of the class. May be
-     *            <tt>null</tt>.
-     */
-    public void visitSource(String source, String debug) {
-        if (cv != null) {
-            cv.visitSource(source, debug);
-        }
-    }
-
-    /**
-     * Visits the enclosing class of the class. This method must be called only
-     * if the class has an enclosing class.
-     * 
-     * @param owner
-     *            internal name of the enclosing class of the class.
-     * @param name
-     *            the name of the method that contains the class, or
-     *            <tt>null</tt> if the class is not enclosed in a method of its
-     *            enclosing class.
-     * @param desc
-     *            the descriptor of the method that contains the class, or
-     *            <tt>null</tt> if the class is not enclosed in a method of its
-     *            enclosing class.
-     */
-    public void visitOuterClass(String owner, String name, String desc) {
-        if (cv != null) {
-            cv.visitOuterClass(owner, name, desc);
-        }
-    }
-
-    /**
-     * Visits an annotation of the class.
-     * 
-     * @param desc
-     *            the class descriptor of the annotation class.
-     * @param visible
-     *            <tt>true</tt> if the annotation is visible at runtime.
-     * @return a visitor to visit the annotation values, or <tt>null</tt> if
-     *         this visitor is not interested in visiting this annotation.
-     */
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        if (cv != null) {
-            return cv.visitAnnotation(desc, visible);
-        }
-        return null;
-    }
-
-    /**
-     * Visits a non standard attribute of the class.
-     * 
-     * @param attr
-     *            an attribute.
-     */
-    public void visitAttribute(Attribute attr) {
-        if (cv != null) {
-            cv.visitAttribute(attr);
-        }
-    }
-
-    /**
-     * Visits information about an inner class. This inner class is not
-     * necessarily a member of the class being visited.
-     * 
-     * @param name
-     *            the internal name of an inner class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     * @param outerName
-     *            the internal name of the class to which the inner class
-     *            belongs (see {@link Type#getInternalName() getInternalName}).
-     *            May be <tt>null</tt> for not member classes.
-     * @param innerName
-     *            the (simple) name of the inner class inside its enclosing
-     *            class. May be <tt>null</tt> for anonymous inner classes.
-     * @param access
-     *            the access flags of the inner class as originally declared in
-     *            the enclosing class.
-     */
-    public void visitInnerClass(String name, String outerName,
-            String innerName, int access) {
-        if (cv != null) {
-            cv.visitInnerClass(name, outerName, innerName, access);
-        }
-    }
-
-    /**
-     * Visits a field of the class.
-     * 
-     * @param access
-     *            the field's access flags (see {@link Opcodes}). This parameter
-     *            also indicates if the field is synthetic and/or deprecated.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link Type Type}).
-     * @param signature
-     *            the field's signature. May be <tt>null</tt> if the field's
-     *            type does not use generic types.
-     * @param value
-     *            the field's initial value. This parameter, which may be
-     *            <tt>null</tt> if the field does not have an initial value,
-     *            must be an {@link Integer}, a {@link Float}, a {@link Long}, a
-     *            {@link Double} or a {@link String} (for <tt>int</tt>,
-     *            <tt>float</tt>, <tt>long</tt> or <tt>String</tt> fields
-     *            respectively). <i>This parameter is only used for static
-     *            fields</i>. Its value is ignored for non static fields, which
-     *            must be initialized through bytecode instructions in
-     *            constructors or methods.
-     * @return a visitor to visit field annotations and attributes, or
-     *         <tt>null</tt> if this class visitor is not interested in visiting
-     *         these annotations and attributes.
-     */
-    public FieldVisitor visitField(int access, String name, String desc,
-            String signature, Object value) {
-        if (cv != null) {
-            return cv.visitField(access, name, desc, signature, value);
-        }
-        return null;
-    }
-
-    /**
-     * Visits a method of the class. This method <i>must</i> return a new
-     * {@link MethodVisitor} instance (or <tt>null</tt>) each time it is called,
-     * i.e., it should not return a previously returned visitor.
-     * 
-     * @param access
-     *            the method's access flags (see {@link Opcodes}). This
-     *            parameter also indicates if the method is synthetic and/or
-     *            deprecated.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt> if the method
-     *            parameters, return type and exceptions do not use generic
-     *            types.
-     * @param exceptions
-     *            the internal names of the method's exception classes (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     * @return an object to visit the byte code of the method, or <tt>null</tt>
-     *         if this class visitor is not interested in visiting the code of
-     *         this method.
-     */
-    public MethodVisitor visitMethod(int access, String name, String desc,
-            String signature, String[] exceptions) {
-        if (cv != null) {
-            return cv.visitMethod(access, name, desc, signature, exceptions);
-        }
-        return null;
-    }
-
-    /**
-     * Visits the end of the class. This method, which is the last one to be
-     * called, is used to inform the visitor that all the fields and methods of
-     * the class have been visited.
-     */
-    public void visitEnd() {
-        if (cv != null) {
-            cv.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ClassWriter.java b/asm4/src/org/objectweb/asm/ClassWriter.java
deleted file mode 100644
index d1fc5b4..0000000
--- a/asm4/src/org/objectweb/asm/ClassWriter.java
+++ /dev/null
@@ -1,1693 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A {@link ClassVisitor} that generates classes in bytecode form. More
- * precisely this visitor generates a byte array conforming to the Java class
- * file format. It can be used alone, to generate a Java class "from scratch",
- * or with one or more {@link ClassReader ClassReader} and adapter class visitor
- * to generate a modified class from one or more existing Java classes.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriter extends ClassVisitor {
-
-    /**
-     * Flag to automatically compute the maximum stack size and the maximum
-     * number of local variables of methods. If this flag is set, then the
-     * arguments of the {@link MethodVisitor#visitMaxs visitMaxs} method of the
-     * {@link MethodVisitor} returned by the {@link #visitMethod visitMethod}
-     * method will be ignored, and computed automatically from the signature and
-     * the bytecode of each method.
-     * 
-     * @see #ClassWriter(int)
-     */
-    public static final int COMPUTE_MAXS = 1;
-
-    /**
-     * Flag to automatically compute the stack map frames of methods from
-     * scratch. If this flag is set, then the calls to the
-     * {@link MethodVisitor#visitFrame} method are ignored, and the stack map
-     * frames are recomputed from the methods bytecode. The arguments of the
-     * {@link MethodVisitor#visitMaxs visitMaxs} method are also ignored and
-     * recomputed from the bytecode. In other words, computeFrames implies
-     * computeMaxs.
-     * 
-     * @see #ClassWriter(int)
-     */
-    public static final int COMPUTE_FRAMES = 2;
-
-    /**
-     * Pseudo access flag to distinguish between the synthetic attribute and the
-     * synthetic access flag.
-     */
-    static final int ACC_SYNTHETIC_ATTRIBUTE = 0x40000;
-
-    /**
-     * Factor to convert from ACC_SYNTHETIC_ATTRIBUTE to Opcode.ACC_SYNTHETIC.
-     */
-    static final int TO_ACC_SYNTHETIC = ACC_SYNTHETIC_ATTRIBUTE
-            / Opcodes.ACC_SYNTHETIC;
-
-    /**
-     * The type of instructions without any argument.
-     */
-    static final int NOARG_INSN = 0;
-
-    /**
-     * The type of instructions with an signed byte argument.
-     */
-    static final int SBYTE_INSN = 1;
-
-    /**
-     * The type of instructions with an signed short argument.
-     */
-    static final int SHORT_INSN = 2;
-
-    /**
-     * The type of instructions with a local variable index argument.
-     */
-    static final int VAR_INSN = 3;
-
-    /**
-     * The type of instructions with an implicit local variable index argument.
-     */
-    static final int IMPLVAR_INSN = 4;
-
-    /**
-     * The type of instructions with a type descriptor argument.
-     */
-    static final int TYPE_INSN = 5;
-
-    /**
-     * The type of field and method invocations instructions.
-     */
-    static final int FIELDORMETH_INSN = 6;
-
-    /**
-     * The type of the INVOKEINTERFACE/INVOKEDYNAMIC instruction.
-     */
-    static final int ITFMETH_INSN = 7;
-
-    /**
-     * The type of the INVOKEDYNAMIC instruction.
-     */
-    static final int INDYMETH_INSN = 8;
-
-    /**
-     * The type of instructions with a 2 bytes bytecode offset label.
-     */
-    static final int LABEL_INSN = 9;
-
-    /**
-     * The type of instructions with a 4 bytes bytecode offset label.
-     */
-    static final int LABELW_INSN = 10;
-
-    /**
-     * The type of the LDC instruction.
-     */
-    static final int LDC_INSN = 11;
-
-    /**
-     * The type of the LDC_W and LDC2_W instructions.
-     */
-    static final int LDCW_INSN = 12;
-
-    /**
-     * The type of the IINC instruction.
-     */
-    static final int IINC_INSN = 13;
-
-    /**
-     * The type of the TABLESWITCH instruction.
-     */
-    static final int TABL_INSN = 14;
-
-    /**
-     * The type of the LOOKUPSWITCH instruction.
-     */
-    static final int LOOK_INSN = 15;
-
-    /**
-     * The type of the MULTIANEWARRAY instruction.
-     */
-    static final int MANA_INSN = 16;
-
-    /**
-     * The type of the WIDE instruction.
-     */
-    static final int WIDE_INSN = 17;
-
-    /**
-     * The instruction types of all JVM opcodes.
-     */
-    static final byte[] TYPE;
-
-    /**
-     * The type of CONSTANT_Class constant pool items.
-     */
-    static final int CLASS = 7;
-
-    /**
-     * The type of CONSTANT_Fieldref constant pool items.
-     */
-    static final int FIELD = 9;
-
-    /**
-     * The type of CONSTANT_Methodref constant pool items.
-     */
-    static final int METH = 10;
-
-    /**
-     * The type of CONSTANT_InterfaceMethodref constant pool items.
-     */
-    static final int IMETH = 11;
-
-    /**
-     * The type of CONSTANT_String constant pool items.
-     */
-    static final int STR = 8;
-
-    /**
-     * The type of CONSTANT_Integer constant pool items.
-     */
-    static final int INT = 3;
-
-    /**
-     * The type of CONSTANT_Float constant pool items.
-     */
-    static final int FLOAT = 4;
-
-    /**
-     * The type of CONSTANT_Long constant pool items.
-     */
-    static final int LONG = 5;
-
-    /**
-     * The type of CONSTANT_Double constant pool items.
-     */
-    static final int DOUBLE = 6;
-
-    /**
-     * The type of CONSTANT_NameAndType constant pool items.
-     */
-    static final int NAME_TYPE = 12;
-
-    /**
-     * The type of CONSTANT_Utf8 constant pool items.
-     */
-    static final int UTF8 = 1;
-
-    /**
-     * The type of CONSTANT_MethodType constant pool items.
-     */
-    static final int MTYPE = 16;
-
-    /**
-     * The type of CONSTANT_MethodHandle constant pool items.
-     */
-    static final int HANDLE = 15;
-
-    /**
-     * The type of CONSTANT_InvokeDynamic constant pool items.
-     */
-    static final int INDY = 18;
-
-    /**
-     * The base value for all CONSTANT_MethodHandle constant pool items.
-     * Internally, ASM store the 9 variations of CONSTANT_MethodHandle into 9
-     * different items.
-     */
-    static final int HANDLE_BASE = 20;
-
-    /**
-     * Normal type Item stored in the ClassWriter {@link ClassWriter#typeTable},
-     * instead of the constant pool, in order to avoid clashes with normal
-     * constant pool items in the ClassWriter constant pool's hash table.
-     */
-    static final int TYPE_NORMAL = 30;
-
-    /**
-     * Uninitialized type Item stored in the ClassWriter
-     * {@link ClassWriter#typeTable}, instead of the constant pool, in order to
-     * avoid clashes with normal constant pool items in the ClassWriter constant
-     * pool's hash table.
-     */
-    static final int TYPE_UNINIT = 31;
-
-    /**
-     * Merged type Item stored in the ClassWriter {@link ClassWriter#typeTable},
-     * instead of the constant pool, in order to avoid clashes with normal
-     * constant pool items in the ClassWriter constant pool's hash table.
-     */
-    static final int TYPE_MERGED = 32;
-
-    /**
-     * The type of BootstrapMethods items. These items are stored in a special
-     * class attribute named BootstrapMethods and not in the constant pool.
-     */
-    static final int BSM = 33;
-
-    /**
-     * The class reader from which this class writer was constructed, if any.
-     */
-    ClassReader cr;
-
-    /**
-     * Minor and major version numbers of the class to be generated.
-     */
-    int version;
-
-    /**
-     * Index of the next item to be added in the constant pool.
-     */
-    int index;
-
-    /**
-     * The constant pool of this class.
-     */
-    final ByteVector pool;
-
-    /**
-     * The constant pool's hash table data.
-     */
-    Item[] items;
-
-    /**
-     * The threshold of the constant pool's hash table.
-     */
-    int threshold;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key2;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key3;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key4;
-
-    /**
-     * A type table used to temporarily store internal names that will not
-     * necessarily be stored in the constant pool. This type table is used by
-     * the control flow and data flow analysis algorithm used to compute stack
-     * map frames from scratch. This array associates to each index <tt>i</tt>
-     * the Item whose index is <tt>i</tt>. All Item objects stored in this array
-     * are also stored in the {@link #items} hash table. These two arrays allow
-     * to retrieve an Item from its index or, conversely, to get the index of an
-     * Item from its value. Each Item stores an internal name in its
-     * {@link Item#strVal1} field.
-     */
-    Item[] typeTable;
-
-    /**
-     * Number of elements in the {@link #typeTable} array.
-     */
-    private short typeCount;
-
-    /**
-     * The access flags of this class.
-     */
-    private int access;
-
-    /**
-     * The constant pool item that contains the internal name of this class.
-     */
-    private int name;
-
-    /**
-     * The internal name of this class.
-     */
-    String thisName;
-
-    /**
-     * The constant pool item that contains the signature of this class.
-     */
-    private int signature;
-
-    /**
-     * The constant pool item that contains the internal name of the super class
-     * of this class.
-     */
-    private int superName;
-
-    /**
-     * Number of interfaces implemented or extended by this class or interface.
-     */
-    private int interfaceCount;
-
-    /**
-     * The interfaces implemented or extended by this class or interface. More
-     * precisely, this array contains the indexes of the constant pool items
-     * that contain the internal names of these interfaces.
-     */
-    private int[] interfaces;
-
-    /**
-     * The index of the constant pool item that contains the name of the source
-     * file from which this class was compiled.
-     */
-    private int sourceFile;
-
-    /**
-     * The SourceDebug attribute of this class.
-     */
-    private ByteVector sourceDebug;
-
-    /**
-     * The constant pool item that contains the name of the enclosing class of
-     * this class.
-     */
-    private int enclosingMethodOwner;
-
-    /**
-     * The constant pool item that contains the name and descriptor of the
-     * enclosing method of this class.
-     */
-    private int enclosingMethod;
-
-    /**
-     * The runtime visible annotations of this class.
-     */
-    private AnnotationWriter anns;
-
-    /**
-     * The runtime invisible annotations of this class.
-     */
-    private AnnotationWriter ianns;
-
-    /**
-     * The non standard attributes of this class.
-     */
-    private Attribute attrs;
-
-    /**
-     * The number of entries in the InnerClasses attribute.
-     */
-    private int innerClassesCount;
-
-    /**
-     * The InnerClasses attribute.
-     */
-    private ByteVector innerClasses;
-
-    /**
-     * The number of entries in the BootstrapMethods attribute.
-     */
-    int bootstrapMethodsCount;
-
-    /**
-     * The BootstrapMethods attribute.
-     */
-    ByteVector bootstrapMethods;
-
-    /**
-     * The fields of this class. These fields are stored in a linked list of
-     * {@link FieldWriter} objects, linked to each other by their
-     * {@link FieldWriter#fv} field. This field stores the first element of this
-     * list.
-     */
-    FieldWriter firstField;
-
-    /**
-     * The fields of this class. These fields are stored in a linked list of
-     * {@link FieldWriter} objects, linked to each other by their
-     * {@link FieldWriter#fv} field. This field stores the last element of this
-     * list.
-     */
-    FieldWriter lastField;
-
-    /**
-     * The methods of this class. These methods are stored in a linked list of
-     * {@link MethodWriter} objects, linked to each other by their
-     * {@link MethodWriter#mv} field. This field stores the first element of
-     * this list.
-     */
-    MethodWriter firstMethod;
-
-    /**
-     * The methods of this class. These methods are stored in a linked list of
-     * {@link MethodWriter} objects, linked to each other by their
-     * {@link MethodWriter#mv} field. This field stores the last element of this
-     * list.
-     */
-    MethodWriter lastMethod;
-
-    /**
-     * <tt>true</tt> if the maximum stack size and number of local variables
-     * must be automatically computed.
-     */
-    private final boolean computeMaxs;
-
-    /**
-     * <tt>true</tt> if the stack map frames must be recomputed from scratch.
-     */
-    private final boolean computeFrames;
-
-    /**
-     * <tt>true</tt> if the stack map tables of this class are invalid. The
-     * {@link MethodWriter#resizeInstructions} method cannot transform existing
-     * stack map tables, and so produces potentially invalid classes when it is
-     * executed. In this case the class is reread and rewritten with the
-     * {@link #COMPUTE_FRAMES} option (the resizeInstructions method can resize
-     * stack map tables when this option is used).
-     */
-    boolean invalidFrames;
-
-    // ------------------------------------------------------------------------
-    // Static initializer
-    // ------------------------------------------------------------------------
-
-    /**
-     * Computes the instruction types of JVM opcodes.
-     */
-    static {
-        int i;
-        byte[] b = new byte[220];
-        String s = "AAAAAAAAAAAAAAAABCLMMDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADD"
-                + "DDDEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
-                + "AAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJDOPAA"
-                + "AAAAGGGGGGGHIFBFAAFFAARQJJKKJJJJJJJJJJJJJJJJJJ";
-        for (i = 0; i < b.length; ++i) {
-            b[i] = (byte) (s.charAt(i) - 'A');
-        }
-        TYPE = b;
-
-        // code to generate the above string
-        //
-        // // SBYTE_INSN instructions
-        // b[Constants.NEWARRAY] = SBYTE_INSN;
-        // b[Constants.BIPUSH] = SBYTE_INSN;
-        //
-        // // SHORT_INSN instructions
-        // b[Constants.SIPUSH] = SHORT_INSN;
-        //
-        // // (IMPL)VAR_INSN instructions
-        // b[Constants.RET] = VAR_INSN;
-        // for (i = Constants.ILOAD; i <= Constants.ALOAD; ++i) {
-        // b[i] = VAR_INSN;
-        // }
-        // for (i = Constants.ISTORE; i <= Constants.ASTORE; ++i) {
-        // b[i] = VAR_INSN;
-        // }
-        // for (i = 26; i <= 45; ++i) { // ILOAD_0 to ALOAD_3
-        // b[i] = IMPLVAR_INSN;
-        // }
-        // for (i = 59; i <= 78; ++i) { // ISTORE_0 to ASTORE_3
-        // b[i] = IMPLVAR_INSN;
-        // }
-        //
-        // // TYPE_INSN instructions
-        // b[Constants.NEW] = TYPE_INSN;
-        // b[Constants.ANEWARRAY] = TYPE_INSN;
-        // b[Constants.CHECKCAST] = TYPE_INSN;
-        // b[Constants.INSTANCEOF] = TYPE_INSN;
-        //
-        // // (Set)FIELDORMETH_INSN instructions
-        // for (i = Constants.GETSTATIC; i <= Constants.INVOKESTATIC; ++i) {
-        // b[i] = FIELDORMETH_INSN;
-        // }
-        // b[Constants.INVOKEINTERFACE] = ITFMETH_INSN;
-        // b[Constants.INVOKEDYNAMIC] = INDYMETH_INSN;
-        //
-        // // LABEL(W)_INSN instructions
-        // for (i = Constants.IFEQ; i <= Constants.JSR; ++i) {
-        // b[i] = LABEL_INSN;
-        // }
-        // b[Constants.IFNULL] = LABEL_INSN;
-        // b[Constants.IFNONNULL] = LABEL_INSN;
-        // b[200] = LABELW_INSN; // GOTO_W
-        // b[201] = LABELW_INSN; // JSR_W
-        // // temporary opcodes used internally by ASM - see Label and
-        // MethodWriter
-        // for (i = 202; i < 220; ++i) {
-        // b[i] = LABEL_INSN;
-        // }
-        //
-        // // LDC(_W) instructions
-        // b[Constants.LDC] = LDC_INSN;
-        // b[19] = LDCW_INSN; // LDC_W
-        // b[20] = LDCW_INSN; // LDC2_W
-        //
-        // // special instructions
-        // b[Constants.IINC] = IINC_INSN;
-        // b[Constants.TABLESWITCH] = TABL_INSN;
-        // b[Constants.LOOKUPSWITCH] = LOOK_INSN;
-        // b[Constants.MULTIANEWARRAY] = MANA_INSN;
-        // b[196] = WIDE_INSN; // WIDE
-        //
-        // for (i = 0; i < b.length; ++i) {
-        // System.err.print((char)('A' + b[i]));
-        // }
-        // System.err.println();
-    }
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link ClassWriter} object.
-     * 
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. See {@link #COMPUTE_MAXS},
-     *            {@link #COMPUTE_FRAMES}.
-     */
-    public ClassWriter(final int flags) {
-        super(Opcodes.ASM4);
-        index = 1;
-        pool = new ByteVector();
-        items = new Item[256];
-        threshold = (int) (0.75d * items.length);
-        key = new Item();
-        key2 = new Item();
-        key3 = new Item();
-        key4 = new Item();
-        this.computeMaxs = (flags & COMPUTE_MAXS) != 0;
-        this.computeFrames = (flags & COMPUTE_FRAMES) != 0;
-    }
-
-    /**
-     * Constructs a new {@link ClassWriter} object and enables optimizations for
-     * "mostly add" bytecode transformations. These optimizations are the
-     * following:
-     * 
-     * <ul>
-     * <li>The constant pool from the original class is copied as is in the new
-     * class, which saves time. New constant pool entries will be added at the
-     * end if necessary, but unused constant pool entries <i>won't be
-     * removed</i>.</li>
-     * <li>Methods that are not transformed are copied as is in the new class,
-     * directly from the original class bytecode (i.e. without emitting visit
-     * events for all the method instructions), which saves a <i>lot</i> of
-     * time. Untransformed methods are detected by the fact that the
-     * {@link ClassReader} receives {@link MethodVisitor} objects that come from
-     * a {@link ClassWriter} (and not from any other {@link ClassVisitor}
-     * instance).</li>
-     * </ul>
-     * 
-     * @param classReader
-     *            the {@link ClassReader} used to read the original class. It
-     *            will be used to copy the entire constant pool from the
-     *            original class and also to copy other fragments of original
-     *            bytecode where applicable.
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. <i>These option flags do not affect methods
-     *            that are copied as is in the new class. This means that the
-     *            maximum stack size nor the stack frames will be computed for
-     *            these methods</i>. See {@link #COMPUTE_MAXS},
-     *            {@link #COMPUTE_FRAMES}.
-     */
-    public ClassWriter(final ClassReader classReader, final int flags) {
-        this(flags);
-        classReader.copyPool(this);
-        this.cr = classReader;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the ClassVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public final void visit(final int version, final int access,
-            final String name, final String signature, final String superName,
-            final String[] interfaces) {
-        this.version = version;
-        this.access = access;
-        this.name = newClass(name);
-        thisName = name;
-        if (ClassReader.SIGNATURES && signature != null) {
-            this.signature = newUTF8(signature);
-        }
-        this.superName = superName == null ? 0 : newClass(superName);
-        if (interfaces != null && interfaces.length > 0) {
-            interfaceCount = interfaces.length;
-            this.interfaces = new int[interfaceCount];
-            for (int i = 0; i < interfaceCount; ++i) {
-                this.interfaces[i] = newClass(interfaces[i]);
-            }
-        }
-    }
-
-    @Override
-    public final void visitSource(final String file, final String debug) {
-        if (file != null) {
-            sourceFile = newUTF8(file);
-        }
-        if (debug != null) {
-            sourceDebug = new ByteVector().putUTF8(debug);
-        }
-    }
-
-    @Override
-    public final void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        enclosingMethodOwner = newClass(owner);
-        if (name != null && desc != null) {
-            enclosingMethod = newNameType(name, desc);
-        }
-    }
-
-    @Override
-    public final AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        if (!ClassReader.ANNOTATIONS) {
-            return null;
-        }
-        ByteVector bv = new ByteVector();
-        // write type, and reserve space for values count
-        bv.putShort(newUTF8(desc)).putShort(0);
-        AnnotationWriter aw = new AnnotationWriter(this, true, bv, bv, 2);
-        if (visible) {
-            aw.next = anns;
-            anns = aw;
-        } else {
-            aw.next = ianns;
-            ianns = aw;
-        }
-        return aw;
-    }
-
-    @Override
-    public final void visitAttribute(final Attribute attr) {
-        attr.next = attrs;
-        attrs = attr;
-    }
-
-    @Override
-    public final void visitInnerClass(final String name,
-            final String outerName, final String innerName, final int access) {
-        if (innerClasses == null) {
-            innerClasses = new ByteVector();
-        }
-        ++innerClassesCount;
-        innerClasses.putShort(name == null ? 0 : newClass(name));
-        innerClasses.putShort(outerName == null ? 0 : newClass(outerName));
-        innerClasses.putShort(innerName == null ? 0 : newUTF8(innerName));
-        innerClasses.putShort(access);
-    }
-
-    @Override
-    public final FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        return new FieldWriter(this, access, name, desc, signature, value);
-    }
-
-    @Override
-    public final MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        return new MethodWriter(this, access, name, desc, signature,
-                exceptions, computeMaxs, computeFrames);
-    }
-
-    @Override
-    public final void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Other public methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the bytecode of the class that was build with this class writer.
-     * 
-     * @return the bytecode of the class that was build with this class writer.
-     */
-    public byte[] toByteArray() {
-        if (index > 0xFFFF) {
-            throw new RuntimeException("Class file too large!");
-        }
-        // computes the real size of the bytecode of this class
-        int size = 24 + 2 * interfaceCount;
-        int nbFields = 0;
-        FieldWriter fb = firstField;
-        while (fb != null) {
-            ++nbFields;
-            size += fb.getSize();
-            fb = (FieldWriter) fb.fv;
-        }
-        int nbMethods = 0;
-        MethodWriter mb = firstMethod;
-        while (mb != null) {
-            ++nbMethods;
-            size += mb.getSize();
-            mb = (MethodWriter) mb.mv;
-        }
-        int attributeCount = 0;
-        if (bootstrapMethods != null) {
-            // we put it as first attribute in order to improve a bit
-            // ClassReader.copyBootstrapMethods
-            ++attributeCount;
-            size += 8 + bootstrapMethods.length;
-            newUTF8("BootstrapMethods");
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            ++attributeCount;
-            size += 8;
-            newUTF8("Signature");
-        }
-        if (sourceFile != 0) {
-            ++attributeCount;
-            size += 8;
-            newUTF8("SourceFile");
-        }
-        if (sourceDebug != null) {
-            ++attributeCount;
-            size += sourceDebug.length + 4;
-            newUTF8("SourceDebugExtension");
-        }
-        if (enclosingMethodOwner != 0) {
-            ++attributeCount;
-            size += 10;
-            newUTF8("EnclosingMethod");
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            ++attributeCount;
-            size += 6;
-            newUTF8("Deprecated");
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                ++attributeCount;
-                size += 6;
-                newUTF8("Synthetic");
-            }
-        }
-        if (innerClasses != null) {
-            ++attributeCount;
-            size += 8 + innerClasses.length;
-            newUTF8("InnerClasses");
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            ++attributeCount;
-            size += 8 + anns.getSize();
-            newUTF8("RuntimeVisibleAnnotations");
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            ++attributeCount;
-            size += 8 + ianns.getSize();
-            newUTF8("RuntimeInvisibleAnnotations");
-        }
-        if (attrs != null) {
-            attributeCount += attrs.getCount();
-            size += attrs.getSize(this, null, 0, -1, -1);
-        }
-        size += pool.length;
-        // allocates a byte vector of this size, in order to avoid unnecessary
-        // arraycopy operations in the ByteVector.enlarge() method
-        ByteVector out = new ByteVector(size);
-        out.putInt(0xCAFEBABE).putInt(version);
-        out.putShort(index).putByteArray(pool.data, 0, pool.length);
-        int mask = Opcodes.ACC_DEPRECATED | ACC_SYNTHETIC_ATTRIBUTE
-                | ((access & ACC_SYNTHETIC_ATTRIBUTE) / TO_ACC_SYNTHETIC);
-        out.putShort(access & ~mask).putShort(name).putShort(superName);
-        out.putShort(interfaceCount);
-        for (int i = 0; i < interfaceCount; ++i) {
-            out.putShort(interfaces[i]);
-        }
-        out.putShort(nbFields);
-        fb = firstField;
-        while (fb != null) {
-            fb.put(out);
-            fb = (FieldWriter) fb.fv;
-        }
-        out.putShort(nbMethods);
-        mb = firstMethod;
-        while (mb != null) {
-            mb.put(out);
-            mb = (MethodWriter) mb.mv;
-        }
-        out.putShort(attributeCount);
-        if (bootstrapMethods != null) {
-            out.putShort(newUTF8("BootstrapMethods"));
-            out.putInt(bootstrapMethods.length + 2).putShort(
-                    bootstrapMethodsCount);
-            out.putByteArray(bootstrapMethods.data, 0, bootstrapMethods.length);
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            out.putShort(newUTF8("Signature")).putInt(2).putShort(signature);
-        }
-        if (sourceFile != 0) {
-            out.putShort(newUTF8("SourceFile")).putInt(2).putShort(sourceFile);
-        }
-        if (sourceDebug != null) {
-            int len = sourceDebug.length - 2;
-            out.putShort(newUTF8("SourceDebugExtension")).putInt(len);
-            out.putByteArray(sourceDebug.data, 2, len);
-        }
-        if (enclosingMethodOwner != 0) {
-            out.putShort(newUTF8("EnclosingMethod")).putInt(4);
-            out.putShort(enclosingMethodOwner).putShort(enclosingMethod);
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            out.putShort(newUTF8("Deprecated")).putInt(0);
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                out.putShort(newUTF8("Synthetic")).putInt(0);
-            }
-        }
-        if (innerClasses != null) {
-            out.putShort(newUTF8("InnerClasses"));
-            out.putInt(innerClasses.length + 2).putShort(innerClassesCount);
-            out.putByteArray(innerClasses.data, 0, innerClasses.length);
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            out.putShort(newUTF8("RuntimeVisibleAnnotations"));
-            anns.put(out);
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            out.putShort(newUTF8("RuntimeInvisibleAnnotations"));
-            ianns.put(out);
-        }
-        if (attrs != null) {
-            attrs.put(this, null, 0, -1, -1, out);
-        }
-        if (invalidFrames) {
-            ClassWriter cw = new ClassWriter(COMPUTE_FRAMES);
-            new ClassReader(out.data).accept(cw, ClassReader.SKIP_FRAMES);
-            return cw.toByteArray();
-        }
-        return out.data;
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: constant pool management
-    // ------------------------------------------------------------------------
-
-    /**
-     * Adds a number or string constant to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * 
-     * @param cst
-     *            the value of the constant to be added to the constant pool.
-     *            This parameter must be an {@link Integer}, a {@link Float}, a
-     *            {@link Long}, a {@link Double}, a {@link String} or a
-     *            {@link Type}.
-     * @return a new or already existing constant item with the given value.
-     */
-    Item newConstItem(final Object cst) {
-        if (cst instanceof Integer) {
-            int val = ((Integer) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Byte) {
-            int val = ((Byte) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Character) {
-            int val = ((Character) cst).charValue();
-            return newInteger(val);
-        } else if (cst instanceof Short) {
-            int val = ((Short) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Boolean) {
-            int val = ((Boolean) cst).booleanValue() ? 1 : 0;
-            return newInteger(val);
-        } else if (cst instanceof Float) {
-            float val = ((Float) cst).floatValue();
-            return newFloat(val);
-        } else if (cst instanceof Long) {
-            long val = ((Long) cst).longValue();
-            return newLong(val);
-        } else if (cst instanceof Double) {
-            double val = ((Double) cst).doubleValue();
-            return newDouble(val);
-        } else if (cst instanceof String) {
-            return newString((String) cst);
-        } else if (cst instanceof Type) {
-            Type t = (Type) cst;
-            int s = t.getSort();
-            if (s == Type.OBJECT) {
-                return newClassItem(t.getInternalName());
-            } else if (s == Type.METHOD) {
-                return newMethodTypeItem(t.getDescriptor());
-            } else { // s == primitive type or array
-                return newClassItem(t.getDescriptor());
-            }
-        } else if (cst instanceof Handle) {
-            Handle h = (Handle) cst;
-            return newHandleItem(h.tag, h.owner, h.name, h.desc);
-        } else {
-            throw new IllegalArgumentException("value " + cst);
-        }
-    }
-
-    /**
-     * Adds a number or string constant to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param cst
-     *            the value of the constant to be added to the constant pool.
-     *            This parameter must be an {@link Integer}, a {@link Float}, a
-     *            {@link Long}, a {@link Double} or a {@link String}.
-     * @return the index of a new or already existing constant item with the
-     *         given value.
-     */
-    public int newConst(final Object cst) {
-        return newConstItem(cst).index;
-    }
-
-    /**
-     * Adds an UTF8 string to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item. <i>This
-     * method is intended for {@link Attribute} sub classes, and is normally not
-     * needed by class generators or adapters.</i>
-     * 
-     * @param value
-     *            the String value.
-     * @return the index of a new or already existing UTF8 item.
-     */
-    public int newUTF8(final String value) {
-        key.set(UTF8, value, null, null);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(UTF8).putUTF8(value);
-            result = new Item(index++, key);
-            put(result);
-        }
-        return result.index;
-    }
-
-    /**
-     * Adds a class reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param value
-     *            the internal name of the class.
-     * @return a new or already existing class reference item.
-     */
-    Item newClassItem(final String value) {
-        key2.set(CLASS, value, null, null);
-        Item result = get(key2);
-        if (result == null) {
-            pool.put12(CLASS, newUTF8(value));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a class reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param value
-     *            the internal name of the class.
-     * @return the index of a new or already existing class reference item.
-     */
-    public int newClass(final String value) {
-        return newClassItem(value).index;
-    }
-
-    /**
-     * Adds a method type reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param methodDesc
-     *            method descriptor of the method type.
-     * @return a new or already existing method type reference item.
-     */
-    Item newMethodTypeItem(final String methodDesc) {
-        key2.set(MTYPE, methodDesc, null, null);
-        Item result = get(key2);
-        if (result == null) {
-            pool.put12(MTYPE, newUTF8(methodDesc));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a method type reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param methodDesc
-     *            method descriptor of the method type.
-     * @return the index of a new or already existing method type reference
-     *         item.
-     */
-    public int newMethodType(final String methodDesc) {
-        return newMethodTypeItem(methodDesc).index;
-    }
-
-    /**
-     * Adds a handle to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item. <i>This method is
-     * intended for {@link Attribute} sub classes, and is normally not needed by
-     * class generators or adapters.</i>
-     * 
-     * @param tag
-     *            the kind of this handle. Must be {@link Opcodes#H_GETFIELD},
-     *            {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD},
-     *            {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL},
-     *            {@link Opcodes#H_INVOKESTATIC},
-     *            {@link Opcodes#H_INVOKESPECIAL},
-     *            {@link Opcodes#H_NEWINVOKESPECIAL} or
-     *            {@link Opcodes#H_INVOKEINTERFACE}.
-     * @param owner
-     *            the internal name of the field or method owner class.
-     * @param name
-     *            the name of the field or method.
-     * @param desc
-     *            the descriptor of the field or method.
-     * @return a new or an already existing method type reference item.
-     */
-    Item newHandleItem(final int tag, final String owner, final String name,
-            final String desc) {
-        key4.set(HANDLE_BASE + tag, owner, name, desc);
-        Item result = get(key4);
-        if (result == null) {
-            if (tag <= Opcodes.H_PUTSTATIC) {
-                put112(HANDLE, tag, newField(owner, name, desc));
-            } else {
-                put112(HANDLE,
-                        tag,
-                        newMethod(owner, name, desc,
-                                tag == Opcodes.H_INVOKEINTERFACE));
-            }
-            result = new Item(index++, key4);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a handle to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item. <i>This method is
-     * intended for {@link Attribute} sub classes, and is normally not needed by
-     * class generators or adapters.</i>
-     * 
-     * @param tag
-     *            the kind of this handle. Must be {@link Opcodes#H_GETFIELD},
-     *            {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD},
-     *            {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL},
-     *            {@link Opcodes#H_INVOKESTATIC},
-     *            {@link Opcodes#H_INVOKESPECIAL},
-     *            {@link Opcodes#H_NEWINVOKESPECIAL} or
-     *            {@link Opcodes#H_INVOKEINTERFACE}.
-     * @param owner
-     *            the internal name of the field or method owner class.
-     * @param name
-     *            the name of the field or method.
-     * @param desc
-     *            the descriptor of the field or method.
-     * @return the index of a new or already existing method type reference
-     *         item.
-     */
-    public int newHandle(final int tag, final String owner, final String name,
-            final String desc) {
-        return newHandleItem(tag, owner, name, desc).index;
-    }
-
-    /**
-     * Adds an invokedynamic reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param name
-     *            name of the invoked method.
-     * @param desc
-     *            descriptor of the invoke method.
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the bootstrap method constant arguments.
-     * 
-     * @return a new or an already existing invokedynamic type reference item.
-     */
-    Item newInvokeDynamicItem(final String name, final String desc,
-            final Handle bsm, final Object... bsmArgs) {
-        // cache for performance
-        ByteVector bootstrapMethods = this.bootstrapMethods;
-        if (bootstrapMethods == null) {
-            bootstrapMethods = this.bootstrapMethods = new ByteVector();
-        }
-
-        int position = bootstrapMethods.length; // record current position
-
-        int hashCode = bsm.hashCode();
-        bootstrapMethods.putShort(newHandle(bsm.tag, bsm.owner, bsm.name,
-                bsm.desc));
-
-        int argsLength = bsmArgs.length;
-        bootstrapMethods.putShort(argsLength);
-
-        for (int i = 0; i < argsLength; i++) {
-            Object bsmArg = bsmArgs[i];
-            hashCode ^= bsmArg.hashCode();
-            bootstrapMethods.putShort(newConst(bsmArg));
-        }
-
-        byte[] data = bootstrapMethods.data;
-        int length = (1 + 1 + argsLength) << 1; // (bsm + argCount + arguments)
-        hashCode &= 0x7FFFFFFF;
-        Item result = items[hashCode % items.length];
-        loop: while (result != null) {
-            if (result.type != BSM || result.hashCode != hashCode) {
-                result = result.next;
-                continue;
-            }
-
-            // because the data encode the size of the argument
-            // we don't need to test if these size are equals
-            int resultPosition = result.intVal;
-            for (int p = 0; p < length; p++) {
-                if (data[position + p] != data[resultPosition + p]) {
-                    result = result.next;
-                    continue loop;
-                }
-            }
-            break;
-        }
-
-        int bootstrapMethodIndex;
-        if (result != null) {
-            bootstrapMethodIndex = result.index;
-            bootstrapMethods.length = position; // revert to old position
-        } else {
-            bootstrapMethodIndex = bootstrapMethodsCount++;
-            result = new Item(bootstrapMethodIndex);
-            result.set(position, hashCode);
-            put(result);
-        }
-
-        // now, create the InvokeDynamic constant
-        key3.set(name, desc, bootstrapMethodIndex);
-        result = get(key3);
-        if (result == null) {
-            put122(INDY, bootstrapMethodIndex, newNameType(name, desc));
-            result = new Item(index++, key3);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds an invokedynamic reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param name
-     *            name of the invoked method.
-     * @param desc
-     *            descriptor of the invoke method.
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the bootstrap method constant arguments.
-     * 
-     * @return the index of a new or already existing invokedynamic reference
-     *         item.
-     */
-    public int newInvokeDynamic(final String name, final String desc,
-            final Handle bsm, final Object... bsmArgs) {
-        return newInvokeDynamicItem(name, desc, bsm, bsmArgs).index;
-    }
-
-    /**
-     * Adds a field reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * 
-     * @param owner
-     *            the internal name of the field's owner class.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor.
-     * @return a new or already existing field reference item.
-     */
-    Item newFieldItem(final String owner, final String name, final String desc) {
-        key3.set(FIELD, owner, name, desc);
-        Item result = get(key3);
-        if (result == null) {
-            put122(FIELD, newClass(owner), newNameType(name, desc));
-            result = new Item(index++, key3);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a field reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param owner
-     *            the internal name of the field's owner class.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor.
-     * @return the index of a new or already existing field reference item.
-     */
-    public int newField(final String owner, final String name, final String desc) {
-        return newFieldItem(owner, name, desc).index;
-    }
-
-    /**
-     * Adds a method reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * 
-     * @param owner
-     *            the internal name of the method's owner class.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor.
-     * @param itf
-     *            <tt>true</tt> if <tt>owner</tt> is an interface.
-     * @return a new or already existing method reference item.
-     */
-    Item newMethodItem(final String owner, final String name,
-            final String desc, final boolean itf) {
-        int type = itf ? IMETH : METH;
-        key3.set(type, owner, name, desc);
-        Item result = get(key3);
-        if (result == null) {
-            put122(type, newClass(owner), newNameType(name, desc));
-            result = new Item(index++, key3);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a method reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param owner
-     *            the internal name of the method's owner class.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor.
-     * @param itf
-     *            <tt>true</tt> if <tt>owner</tt> is an interface.
-     * @return the index of a new or already existing method reference item.
-     */
-    public int newMethod(final String owner, final String name,
-            final String desc, final boolean itf) {
-        return newMethodItem(owner, name, desc, itf).index;
-    }
-
-    /**
-     * Adds an integer to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the int value.
-     * @return a new or already existing int item.
-     */
-    Item newInteger(final int value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(INT).putInt(value);
-            result = new Item(index++, key);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a float to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the float value.
-     * @return a new or already existing float item.
-     */
-    Item newFloat(final float value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(FLOAT).putInt(key.intVal);
-            result = new Item(index++, key);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a long to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the long value.
-     * @return a new or already existing long item.
-     */
-    Item newLong(final long value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(LONG).putLong(value);
-            result = new Item(index, key);
-            index += 2;
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a double to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the double value.
-     * @return a new or already existing double item.
-     */
-    Item newDouble(final double value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(DOUBLE).putLong(key.longVal);
-            result = new Item(index, key);
-            index += 2;
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a string to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the String value.
-     * @return a new or already existing string item.
-     */
-    private Item newString(final String value) {
-        key2.set(STR, value, null, null);
-        Item result = get(key2);
-        if (result == null) {
-            pool.put12(STR, newUTF8(value));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a name and type to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item. <i>This
-     * method is intended for {@link Attribute} sub classes, and is normally not
-     * needed by class generators or adapters.</i>
-     * 
-     * @param name
-     *            a name.
-     * @param desc
-     *            a type descriptor.
-     * @return the index of a new or already existing name and type item.
-     */
-    public int newNameType(final String name, final String desc) {
-        return newNameTypeItem(name, desc).index;
-    }
-
-    /**
-     * Adds a name and type to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item.
-     * 
-     * @param name
-     *            a name.
-     * @param desc
-     *            a type descriptor.
-     * @return a new or already existing name and type item.
-     */
-    Item newNameTypeItem(final String name, final String desc) {
-        key2.set(NAME_TYPE, name, desc, null);
-        Item result = get(key2);
-        if (result == null) {
-            put122(NAME_TYPE, newUTF8(name), newUTF8(desc));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds the given internal name to {@link #typeTable} and returns its index.
-     * Does nothing if the type table already contains this internal name.
-     * 
-     * @param type
-     *            the internal name to be added to the type table.
-     * @return the index of this internal name in the type table.
-     */
-    int addType(final String type) {
-        key.set(TYPE_NORMAL, type, null, null);
-        Item result = get(key);
-        if (result == null) {
-            result = addType(key);
-        }
-        return result.index;
-    }
-
-    /**
-     * Adds the given "uninitialized" type to {@link #typeTable} and returns its
-     * index. This method is used for UNINITIALIZED types, made of an internal
-     * name and a bytecode offset.
-     * 
-     * @param type
-     *            the internal name to be added to the type table.
-     * @param offset
-     *            the bytecode offset of the NEW instruction that created this
-     *            UNINITIALIZED type value.
-     * @return the index of this internal name in the type table.
-     */
-    int addUninitializedType(final String type, final int offset) {
-        key.type = TYPE_UNINIT;
-        key.intVal = offset;
-        key.strVal1 = type;
-        key.hashCode = 0x7FFFFFFF & (TYPE_UNINIT + type.hashCode() + offset);
-        Item result = get(key);
-        if (result == null) {
-            result = addType(key);
-        }
-        return result.index;
-    }
-
-    /**
-     * Adds the given Item to {@link #typeTable}.
-     * 
-     * @param item
-     *            the value to be added to the type table.
-     * @return the added Item, which a new Item instance with the same value as
-     *         the given Item.
-     */
-    private Item addType(final Item item) {
-        ++typeCount;
-        Item result = new Item(typeCount, key);
-        put(result);
-        if (typeTable == null) {
-            typeTable = new Item[16];
-        }
-        if (typeCount == typeTable.length) {
-            Item[] newTable = new Item[2 * typeTable.length];
-            System.arraycopy(typeTable, 0, newTable, 0, typeTable.length);
-            typeTable = newTable;
-        }
-        typeTable[typeCount] = result;
-        return result;
-    }
-
-    /**
-     * Returns the index of the common super type of the two given types. This
-     * method calls {@link #getCommonSuperClass} and caches the result in the
-     * {@link #items} hash table to speedup future calls with the same
-     * parameters.
-     * 
-     * @param type1
-     *            index of an internal name in {@link #typeTable}.
-     * @param type2
-     *            index of an internal name in {@link #typeTable}.
-     * @return the index of the common super type of the two given types.
-     */
-    int getMergedType(final int type1, final int type2) {
-        key2.type = TYPE_MERGED;
-        key2.longVal = type1 | (((long) type2) << 32);
-        key2.hashCode = 0x7FFFFFFF & (TYPE_MERGED + type1 + type2);
-        Item result = get(key2);
-        if (result == null) {
-            String t = typeTable[type1].strVal1;
-            String u = typeTable[type2].strVal1;
-            key2.intVal = addType(getCommonSuperClass(t, u));
-            result = new Item((short) 0, key2);
-            put(result);
-        }
-        return result.intVal;
-    }
-
-    /**
-     * Returns the common super type of the two given types. The default
-     * implementation of this method <i>loads<i> the two given classes and uses
-     * the java.lang.Class methods to find the common super class. It can be
-     * overridden to compute this common super type in other ways, in particular
-     * without actually loading any class, or to take into account the class
-     * that is currently being generated by this ClassWriter, which can of
-     * course not be loaded since it is under construction.
-     * 
-     * @param type1
-     *            the internal name of a class.
-     * @param type2
-     *            the internal name of another class.
-     * @return the internal name of the common super class of the two given
-     *         classes.
-     */
-    protected String getCommonSuperClass(final String type1, final String type2) {
-        Class<?> c, d;
-        ClassLoader classLoader = getClass().getClassLoader();
-        try {
-            c = Class.forName(type1.replace('/', '.'), false, classLoader);
-            d = Class.forName(type2.replace('/', '.'), false, classLoader);
-        } catch (Exception e) {
-            throw new RuntimeException(e.toString());
-        }
-        if (c.isAssignableFrom(d)) {
-            return type1;
-        }
-        if (d.isAssignableFrom(c)) {
-            return type2;
-        }
-        if (c.isInterface() || d.isInterface()) {
-            return "java/lang/Object";
-        } else {
-            do {
-                c = c.getSuperclass();
-            } while (!c.isAssignableFrom(d));
-            return c.getName().replace('.', '/');
-        }
-    }
-
-    /**
-     * Returns the constant pool's hash table item which is equal to the given
-     * item.
-     * 
-     * @param key
-     *            a constant pool item.
-     * @return the constant pool's hash table item which is equal to the given
-     *         item, or <tt>null</tt> if there is no such item.
-     */
-    private Item get(final Item key) {
-        Item i = items[key.hashCode % items.length];
-        while (i != null && (i.type != key.type || !key.isEqualTo(i))) {
-            i = i.next;
-        }
-        return i;
-    }
-
-    /**
-     * Puts the given item in the constant pool's hash table. The hash table
-     * <i>must</i> not already contains this item.
-     * 
-     * @param i
-     *            the item to be added to the constant pool's hash table.
-     */
-    private void put(final Item i) {
-        if (index + typeCount > threshold) {
-            int ll = items.length;
-            int nl = ll * 2 + 1;
-            Item[] newItems = new Item[nl];
-            for (int l = ll - 1; l >= 0; --l) {
-                Item j = items[l];
-                while (j != null) {
-                    int index = j.hashCode % newItems.length;
-                    Item k = j.next;
-                    j.next = newItems[index];
-                    newItems[index] = j;
-                    j = k;
-                }
-            }
-            items = newItems;
-            threshold = (int) (nl * 0.75);
-        }
-        int index = i.hashCode % items.length;
-        i.next = items[index];
-        items[index] = i;
-    }
-
-    /**
-     * Puts one byte and two shorts into the constant pool.
-     * 
-     * @param b
-     *            a byte.
-     * @param s1
-     *            a short.
-     * @param s2
-     *            another short.
-     */
-    private void put122(final int b, final int s1, final int s2) {
-        pool.put12(b, s1).putShort(s2);
-    }
-
-    /**
-     * Puts two bytes and one short into the constant pool.
-     * 
-     * @param b1
-     *            a byte.
-     * @param b2
-     *            another byte.
-     * @param s
-     *            a short.
-     */
-    private void put112(final int b1, final int b2, final int s) {
-        pool.put11(b1, b2).putShort(s);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Context.java b/asm4/src/org/objectweb/asm/Context.java
deleted file mode 100644
index 7be6b8e..0000000
--- a/asm4/src/org/objectweb/asm/Context.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/***

- * ASM: a very small and fast Java bytecode manipulation framework

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * 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.

- */

-

-package org.objectweb.asm;

-

-/**

- * Information about a class being parsed in a {@link ClassReader}.

- * 

- * @author Eric Bruneton

- */

-class Context {

-

-    /**

-     * Prototypes of the attributes that must be parsed for this class.

-     */

-    Attribute[] attrs;

-

-    /**

-     * The {@link ClassReader} option flags for the parsing of this class.

-     */

-    int flags;

-

-    /**

-     * The buffer used to read strings.

-     */

-    char[] buffer;

-

-    /**

-     * The start index of each bootstrap method.

-     */

-    int[] bootstrapMethods;

-

-    /**

-     * The access flags of the method currently being parsed.

-     */

-    int access;

-

-    /**

-     * The name of the method currently being parsed.

-     */

-    String name;

-

-    /**

-     * The descriptor of the method currently being parsed.

-     */

-    String desc;

-

-    /**

-     * The offset of the latest stack map frame that has been parsed.

-     */

-    int offset;

-

-    /**

-     * The encoding of the latest stack map frame that has been parsed.

-     */

-    int mode;

-

-    /**

-     * The number of locals in the latest stack map frame that has been parsed.

-     */

-    int localCount;

-

-    /**

-     * The number locals in the latest stack map frame that has been parsed,

-     * minus the number of locals in the previous frame.

-     */

-    int localDiff;

-

-    /**

-     * The local values of the latest stack map frame that has been parsed.

-     */

-    Object[] local;

-

-    /**

-     * The stack size of the latest stack map frame that has been parsed.

-     */

-    int stackCount;

-

-    /**

-     * The stack values of the latest stack map frame that has been parsed.

-     */

-    Object[] stack;

-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/Edge.java b/asm4/src/org/objectweb/asm/Edge.java
deleted file mode 100644
index 4e87cba..0000000
--- a/asm4/src/org/objectweb/asm/Edge.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * An edge in the control flow graph of a method body. See {@link Label Label}.
- * 
- * @author Eric Bruneton
- */
-class Edge {
-
-    /**
-     * Denotes a normal control flow graph edge.
-     */
-    static final int NORMAL = 0;
-
-    /**
-     * Denotes a control flow graph edge corresponding to an exception handler.
-     * More precisely any {@link Edge} whose {@link #info} is strictly positive
-     * corresponds to an exception handler. The actual value of {@link #info} is
-     * the index, in the {@link ClassWriter} type table, of the exception that
-     * is catched.
-     */
-    static final int EXCEPTION = 0x7FFFFFFF;
-
-    /**
-     * Information about this control flow graph edge. If
-     * {@link ClassWriter#COMPUTE_MAXS} is used this field is the (relative)
-     * stack size in the basic block from which this edge originates. This size
-     * is equal to the stack size at the "jump" instruction to which this edge
-     * corresponds, relatively to the stack size at the beginning of the
-     * originating basic block. If {@link ClassWriter#COMPUTE_FRAMES} is used,
-     * this field is the kind of this control flow graph edge (i.e. NORMAL or
-     * EXCEPTION).
-     */
-    int info;
-
-    /**
-     * The successor block of the basic block from which this edge originates.
-     */
-    Label successor;
-
-    /**
-     * The next edge in the list of successors of the originating basic block.
-     * See {@link Label#successors successors}.
-     */
-    Edge next;
-}
diff --git a/asm4/src/org/objectweb/asm/FieldVisitor.java b/asm4/src/org/objectweb/asm/FieldVisitor.java
deleted file mode 100644
index ad6db26..0000000
--- a/asm4/src/org/objectweb/asm/FieldVisitor.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java field. The methods of this class must be called in
- * the following order: ( <tt>visitAnnotation</tt> | <tt>visitAttribute</tt> )*
- * <tt>visitEnd</tt>.
- * 
- * @author Eric Bruneton
- */
-public abstract class FieldVisitor {
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * The field visitor to which this visitor must delegate method calls. May
-     * be null.
-     */
-    protected FieldVisitor fv;
-
-    /**
-     * Constructs a new {@link FieldVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public FieldVisitor(final int api) {
-        this(api, null);
-    }
-
-    /**
-     * Constructs a new {@link FieldVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param fv
-     *            the field visitor to which this visitor must delegate method
-     *            calls. May be null.
-     */
-    public FieldVisitor(final int api, final FieldVisitor fv) {
-        if (api != Opcodes.ASM4) {
-            throw new IllegalArgumentException();
-        }
-        this.api = api;
-        this.fv = fv;
-    }
-
-    /**
-     * Visits an annotation of the field.
-     * 
-     * @param desc
-     *            the class descriptor of the annotation class.
-     * @param visible
-     *            <tt>true</tt> if the annotation is visible at runtime.
-     * @return a visitor to visit the annotation values, or <tt>null</tt> if
-     *         this visitor is not interested in visiting this annotation.
-     */
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        if (fv != null) {
-            return fv.visitAnnotation(desc, visible);
-        }
-        return null;
-    }
-
-    /**
-     * Visits a non standard attribute of the field.
-     * 
-     * @param attr
-     *            an attribute.
-     */
-    public void visitAttribute(Attribute attr) {
-        if (fv != null) {
-            fv.visitAttribute(attr);
-        }
-    }
-
-    /**
-     * Visits the end of the field. This method, which is the last one to be
-     * called, is used to inform the visitor that all the annotations and
-     * attributes of the field have been visited.
-     */
-    public void visitEnd() {
-        if (fv != null) {
-            fv.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/FieldWriter.java b/asm4/src/org/objectweb/asm/FieldWriter.java
deleted file mode 100644
index 5cbd9c7..0000000
--- a/asm4/src/org/objectweb/asm/FieldWriter.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * An {@link FieldVisitor} that generates Java fields in bytecode form.
- * 
- * @author Eric Bruneton
- */
-final class FieldWriter extends FieldVisitor {
-
-    /**
-     * The class writer to which this field must be added.
-     */
-    private final ClassWriter cw;
-
-    /**
-     * Access flags of this field.
-     */
-    private final int access;
-
-    /**
-     * The index of the constant pool item that contains the name of this
-     * method.
-     */
-    private final int name;
-
-    /**
-     * The index of the constant pool item that contains the descriptor of this
-     * field.
-     */
-    private final int desc;
-
-    /**
-     * The index of the constant pool item that contains the signature of this
-     * field.
-     */
-    private int signature;
-
-    /**
-     * The index of the constant pool item that contains the constant value of
-     * this field.
-     */
-    private int value;
-
-    /**
-     * The runtime visible annotations of this field. May be <tt>null</tt>.
-     */
-    private AnnotationWriter anns;
-
-    /**
-     * The runtime invisible annotations of this field. May be <tt>null</tt>.
-     */
-    private AnnotationWriter ianns;
-
-    /**
-     * The non standard attributes of this field. May be <tt>null</tt>.
-     */
-    private Attribute attrs;
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link FieldWriter}.
-     * 
-     * @param cw
-     *            the class writer to which this field must be added.
-     * @param access
-     *            the field's access flags (see {@link Opcodes}).
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link Type}).
-     * @param signature
-     *            the field's signature. May be <tt>null</tt>.
-     * @param value
-     *            the field's constant value. May be <tt>null</tt>.
-     */
-    FieldWriter(final ClassWriter cw, final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        super(Opcodes.ASM4);
-        if (cw.firstField == null) {
-            cw.firstField = this;
-        } else {
-            cw.lastField.fv = this;
-        }
-        cw.lastField = this;
-        this.cw = cw;
-        this.access = access;
-        this.name = cw.newUTF8(name);
-        this.desc = cw.newUTF8(desc);
-        if (ClassReader.SIGNATURES && signature != null) {
-            this.signature = cw.newUTF8(signature);
-        }
-        if (value != null) {
-            this.value = cw.newConstItem(value).index;
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the FieldVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        if (!ClassReader.ANNOTATIONS) {
-            return null;
-        }
-        ByteVector bv = new ByteVector();
-        // write type, and reserve space for values count
-        bv.putShort(cw.newUTF8(desc)).putShort(0);
-        AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
-        if (visible) {
-            aw.next = anns;
-            anns = aw;
-        } else {
-            aw.next = ianns;
-            ianns = aw;
-        }
-        return aw;
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        attr.next = attrs;
-        attrs = attr;
-    }
-
-    @Override
-    public void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the size of this field.
-     * 
-     * @return the size of this field.
-     */
-    int getSize() {
-        int size = 8;
-        if (value != 0) {
-            cw.newUTF8("ConstantValue");
-            size += 8;
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((cw.version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                cw.newUTF8("Synthetic");
-                size += 6;
-            }
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            cw.newUTF8("Deprecated");
-            size += 6;
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            cw.newUTF8("Signature");
-            size += 8;
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            cw.newUTF8("RuntimeVisibleAnnotations");
-            size += 8 + anns.getSize();
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            cw.newUTF8("RuntimeInvisibleAnnotations");
-            size += 8 + ianns.getSize();
-        }
-        if (attrs != null) {
-            size += attrs.getSize(cw, null, 0, -1, -1);
-        }
-        return size;
-    }
-
-    /**
-     * Puts the content of this field into the given byte vector.
-     * 
-     * @param out
-     *            where the content of this field must be put.
-     */
-    void put(final ByteVector out) {
-        final int FACTOR = ClassWriter.TO_ACC_SYNTHETIC;
-        int mask = Opcodes.ACC_DEPRECATED | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE
-                | ((access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) / FACTOR);
-        out.putShort(access & ~mask).putShort(name).putShort(desc);
-        int attributeCount = 0;
-        if (value != 0) {
-            ++attributeCount;
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((cw.version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                ++attributeCount;
-            }
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            ++attributeCount;
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            ++attributeCount;
-        }
-        if (attrs != null) {
-            attributeCount += attrs.getCount();
-        }
-        out.putShort(attributeCount);
-        if (value != 0) {
-            out.putShort(cw.newUTF8("ConstantValue"));
-            out.putInt(2).putShort(value);
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((cw.version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                out.putShort(cw.newUTF8("Synthetic")).putInt(0);
-            }
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            out.putShort(cw.newUTF8("Deprecated")).putInt(0);
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            out.putShort(cw.newUTF8("Signature"));
-            out.putInt(2).putShort(signature);
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            out.putShort(cw.newUTF8("RuntimeVisibleAnnotations"));
-            anns.put(out);
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            out.putShort(cw.newUTF8("RuntimeInvisibleAnnotations"));
-            ianns.put(out);
-        }
-        if (attrs != null) {
-            attrs.put(cw, null, 0, -1, -1, out);
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Frame.java b/asm4/src/org/objectweb/asm/Frame.java
deleted file mode 100644
index 10e15bc..0000000
--- a/asm4/src/org/objectweb/asm/Frame.java
+++ /dev/null
@@ -1,1453 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * Information about the input and output stack map frames of a basic block.
- * 
- * @author Eric Bruneton
- */
-final class Frame {
-
-    /*
-     * Frames are computed in a two steps process: during the visit of each
-     * instruction, the state of the frame at the end of current basic block is
-     * updated by simulating the action of the instruction on the previous state
-     * of this so called "output frame". In visitMaxs, a fix point algorithm is
-     * used to compute the "input frame" of each basic block, i.e. the stack map
-     * frame at the beginning of the basic block, starting from the input frame
-     * of the first basic block (which is computed from the method descriptor),
-     * and by using the previously computed output frames to compute the input
-     * state of the other blocks.
-     * 
-     * All output and input frames are stored as arrays of integers. Reference
-     * and array types are represented by an index into a type table (which is
-     * not the same as the constant pool of the class, in order to avoid adding
-     * unnecessary constants in the pool - not all computed frames will end up
-     * being stored in the stack map table). This allows very fast type
-     * comparisons.
-     * 
-     * Output stack map frames are computed relatively to the input frame of the
-     * basic block, which is not yet known when output frames are computed. It
-     * is therefore necessary to be able to represent abstract types such as
-     * "the type at position x in the input frame locals" or "the type at
-     * position x from the top of the input frame stack" or even "the type at
-     * position x in the input frame, with y more (or less) array dimensions".
-     * This explains the rather complicated type format used in output frames.
-     * 
-     * This format is the following: DIM KIND VALUE (4, 4 and 24 bits). DIM is a
-     * signed number of array dimensions (from -8 to 7). KIND is either BASE,
-     * LOCAL or STACK. BASE is used for types that are not relative to the input
-     * frame. LOCAL is used for types that are relative to the input local
-     * variable types. STACK is used for types that are relative to the input
-     * stack types. VALUE depends on KIND. For LOCAL types, it is an index in
-     * the input local variable types. For STACK types, it is a position
-     * relatively to the top of input frame stack. For BASE types, it is either
-     * one of the constants defined in FrameVisitor, or for OBJECT and
-     * UNINITIALIZED types, a tag and an index in the type table.
-     * 
-     * Output frames can contain types of any kind and with a positive or
-     * negative dimension (and even unassigned types, represented by 0 - which
-     * does not correspond to any valid type value). Input frames can only
-     * contain BASE types of positive or null dimension. In all cases the type
-     * table contains only internal type names (array type descriptors are
-     * forbidden - dimensions must be represented through the DIM field).
-     * 
-     * The LONG and DOUBLE types are always represented by using two slots (LONG
-     * + TOP or DOUBLE + TOP), for local variable types as well as in the
-     * operand stack. This is necessary to be able to simulate DUPx_y
-     * instructions, whose effect would be dependent on the actual type values
-     * if types were always represented by a single slot in the stack (and this
-     * is not possible, since actual type values are not always known - cf LOCAL
-     * and STACK type kinds).
-     */
-
-    /**
-     * Mask to get the dimension of a frame type. This dimension is a signed
-     * integer between -8 and 7.
-     */
-    static final int DIM = 0xF0000000;
-
-    /**
-     * Constant to be added to a type to get a type with one more dimension.
-     */
-    static final int ARRAY_OF = 0x10000000;
-
-    /**
-     * Constant to be added to a type to get a type with one less dimension.
-     */
-    static final int ELEMENT_OF = 0xF0000000;
-
-    /**
-     * Mask to get the kind of a frame type.
-     * 
-     * @see #BASE
-     * @see #LOCAL
-     * @see #STACK
-     */
-    static final int KIND = 0xF000000;
-
-    /**
-     * Flag used for LOCAL and STACK types. Indicates that if this type happens
-     * to be a long or double type (during the computations of input frames),
-     * then it must be set to TOP because the second word of this value has been
-     * reused to store other data in the basic block. Hence the first word no
-     * longer stores a valid long or double value.
-     */
-    static final int TOP_IF_LONG_OR_DOUBLE = 0x800000;
-
-    /**
-     * Mask to get the value of a frame type.
-     */
-    static final int VALUE = 0x7FFFFF;
-
-    /**
-     * Mask to get the kind of base types.
-     */
-    static final int BASE_KIND = 0xFF00000;
-
-    /**
-     * Mask to get the value of base types.
-     */
-    static final int BASE_VALUE = 0xFFFFF;
-
-    /**
-     * Kind of the types that are not relative to an input stack map frame.
-     */
-    static final int BASE = 0x1000000;
-
-    /**
-     * Base kind of the base reference types. The BASE_VALUE of such types is an
-     * index into the type table.
-     */
-    static final int OBJECT = BASE | 0x700000;
-
-    /**
-     * Base kind of the uninitialized base types. The BASE_VALUE of such types
-     * in an index into the type table (the Item at that index contains both an
-     * instruction offset and an internal class name).
-     */
-    static final int UNINITIALIZED = BASE | 0x800000;
-
-    /**
-     * Kind of the types that are relative to the local variable types of an
-     * input stack map frame. The value of such types is a local variable index.
-     */
-    private static final int LOCAL = 0x2000000;
-
-    /**
-     * Kind of the the types that are relative to the stack of an input stack
-     * map frame. The value of such types is a position relatively to the top of
-     * this stack.
-     */
-    private static final int STACK = 0x3000000;
-
-    /**
-     * The TOP type. This is a BASE type.
-     */
-    static final int TOP = BASE | 0;
-
-    /**
-     * The BOOLEAN type. This is a BASE type mainly used for array types.
-     */
-    static final int BOOLEAN = BASE | 9;
-
-    /**
-     * The BYTE type. This is a BASE type mainly used for array types.
-     */
-    static final int BYTE = BASE | 10;
-
-    /**
-     * The CHAR type. This is a BASE type mainly used for array types.
-     */
-    static final int CHAR = BASE | 11;
-
-    /**
-     * The SHORT type. This is a BASE type mainly used for array types.
-     */
-    static final int SHORT = BASE | 12;
-
-    /**
-     * The INTEGER type. This is a BASE type.
-     */
-    static final int INTEGER = BASE | 1;
-
-    /**
-     * The FLOAT type. This is a BASE type.
-     */
-    static final int FLOAT = BASE | 2;
-
-    /**
-     * The DOUBLE type. This is a BASE type.
-     */
-    static final int DOUBLE = BASE | 3;
-
-    /**
-     * The LONG type. This is a BASE type.
-     */
-    static final int LONG = BASE | 4;
-
-    /**
-     * The NULL type. This is a BASE type.
-     */
-    static final int NULL = BASE | 5;
-
-    /**
-     * The UNINITIALIZED_THIS type. This is a BASE type.
-     */
-    static final int UNINITIALIZED_THIS = BASE | 6;
-
-    /**
-     * The stack size variation corresponding to each JVM instruction. This
-     * stack variation is equal to the size of the values produced by an
-     * instruction, minus the size of the values consumed by this instruction.
-     */
-    static final int[] SIZE;
-
-    /**
-     * Computes the stack size variation corresponding to each JVM instruction.
-     */
-    static {
-        int i;
-        int[] b = new int[202];
-        String s = "EFFFFFFFFGGFFFGGFFFEEFGFGFEEEEEEEEEEEEEEEEEEEEDEDEDDDDD"
-                + "CDCDEEEEEEEEEEEEEEEEEEEEBABABBBBDCFFFGGGEDCDCDCDCDCDCDCDCD"
-                + "CDCEEEEDDDDDDDCDCDCEFEFDDEEFFDEDEEEBDDBBDDDDDDCCCCCCCCEFED"
-                + "DDCDCDEEEEEEEEEEFEEEEEEDDEEDDEE";
-        for (i = 0; i < b.length; ++i) {
-            b[i] = s.charAt(i) - 'E';
-        }
-        SIZE = b;
-
-        // code to generate the above string
-        //
-        // int NA = 0; // not applicable (unused opcode or variable size opcode)
-        //
-        // b = new int[] {
-        // 0, //NOP, // visitInsn
-        // 1, //ACONST_NULL, // -
-        // 1, //ICONST_M1, // -
-        // 1, //ICONST_0, // -
-        // 1, //ICONST_1, // -
-        // 1, //ICONST_2, // -
-        // 1, //ICONST_3, // -
-        // 1, //ICONST_4, // -
-        // 1, //ICONST_5, // -
-        // 2, //LCONST_0, // -
-        // 2, //LCONST_1, // -
-        // 1, //FCONST_0, // -
-        // 1, //FCONST_1, // -
-        // 1, //FCONST_2, // -
-        // 2, //DCONST_0, // -
-        // 2, //DCONST_1, // -
-        // 1, //BIPUSH, // visitIntInsn
-        // 1, //SIPUSH, // -
-        // 1, //LDC, // visitLdcInsn
-        // NA, //LDC_W, // -
-        // NA, //LDC2_W, // -
-        // 1, //ILOAD, // visitVarInsn
-        // 2, //LLOAD, // -
-        // 1, //FLOAD, // -
-        // 2, //DLOAD, // -
-        // 1, //ALOAD, // -
-        // NA, //ILOAD_0, // -
-        // NA, //ILOAD_1, // -
-        // NA, //ILOAD_2, // -
-        // NA, //ILOAD_3, // -
-        // NA, //LLOAD_0, // -
-        // NA, //LLOAD_1, // -
-        // NA, //LLOAD_2, // -
-        // NA, //LLOAD_3, // -
-        // NA, //FLOAD_0, // -
-        // NA, //FLOAD_1, // -
-        // NA, //FLOAD_2, // -
-        // NA, //FLOAD_3, // -
-        // NA, //DLOAD_0, // -
-        // NA, //DLOAD_1, // -
-        // NA, //DLOAD_2, // -
-        // NA, //DLOAD_3, // -
-        // NA, //ALOAD_0, // -
-        // NA, //ALOAD_1, // -
-        // NA, //ALOAD_2, // -
-        // NA, //ALOAD_3, // -
-        // -1, //IALOAD, // visitInsn
-        // 0, //LALOAD, // -
-        // -1, //FALOAD, // -
-        // 0, //DALOAD, // -
-        // -1, //AALOAD, // -
-        // -1, //BALOAD, // -
-        // -1, //CALOAD, // -
-        // -1, //SALOAD, // -
-        // -1, //ISTORE, // visitVarInsn
-        // -2, //LSTORE, // -
-        // -1, //FSTORE, // -
-        // -2, //DSTORE, // -
-        // -1, //ASTORE, // -
-        // NA, //ISTORE_0, // -
-        // NA, //ISTORE_1, // -
-        // NA, //ISTORE_2, // -
-        // NA, //ISTORE_3, // -
-        // NA, //LSTORE_0, // -
-        // NA, //LSTORE_1, // -
-        // NA, //LSTORE_2, // -
-        // NA, //LSTORE_3, // -
-        // NA, //FSTORE_0, // -
-        // NA, //FSTORE_1, // -
-        // NA, //FSTORE_2, // -
-        // NA, //FSTORE_3, // -
-        // NA, //DSTORE_0, // -
-        // NA, //DSTORE_1, // -
-        // NA, //DSTORE_2, // -
-        // NA, //DSTORE_3, // -
-        // NA, //ASTORE_0, // -
-        // NA, //ASTORE_1, // -
-        // NA, //ASTORE_2, // -
-        // NA, //ASTORE_3, // -
-        // -3, //IASTORE, // visitInsn
-        // -4, //LASTORE, // -
-        // -3, //FASTORE, // -
-        // -4, //DASTORE, // -
-        // -3, //AASTORE, // -
-        // -3, //BASTORE, // -
-        // -3, //CASTORE, // -
-        // -3, //SASTORE, // -
-        // -1, //POP, // -
-        // -2, //POP2, // -
-        // 1, //DUP, // -
-        // 1, //DUP_X1, // -
-        // 1, //DUP_X2, // -
-        // 2, //DUP2, // -
-        // 2, //DUP2_X1, // -
-        // 2, //DUP2_X2, // -
-        // 0, //SWAP, // -
-        // -1, //IADD, // -
-        // -2, //LADD, // -
-        // -1, //FADD, // -
-        // -2, //DADD, // -
-        // -1, //ISUB, // -
-        // -2, //LSUB, // -
-        // -1, //FSUB, // -
-        // -2, //DSUB, // -
-        // -1, //IMUL, // -
-        // -2, //LMUL, // -
-        // -1, //FMUL, // -
-        // -2, //DMUL, // -
-        // -1, //IDIV, // -
-        // -2, //LDIV, // -
-        // -1, //FDIV, // -
-        // -2, //DDIV, // -
-        // -1, //IREM, // -
-        // -2, //LREM, // -
-        // -1, //FREM, // -
-        // -2, //DREM, // -
-        // 0, //INEG, // -
-        // 0, //LNEG, // -
-        // 0, //FNEG, // -
-        // 0, //DNEG, // -
-        // -1, //ISHL, // -
-        // -1, //LSHL, // -
-        // -1, //ISHR, // -
-        // -1, //LSHR, // -
-        // -1, //IUSHR, // -
-        // -1, //LUSHR, // -
-        // -1, //IAND, // -
-        // -2, //LAND, // -
-        // -1, //IOR, // -
-        // -2, //LOR, // -
-        // -1, //IXOR, // -
-        // -2, //LXOR, // -
-        // 0, //IINC, // visitIincInsn
-        // 1, //I2L, // visitInsn
-        // 0, //I2F, // -
-        // 1, //I2D, // -
-        // -1, //L2I, // -
-        // -1, //L2F, // -
-        // 0, //L2D, // -
-        // 0, //F2I, // -
-        // 1, //F2L, // -
-        // 1, //F2D, // -
-        // -1, //D2I, // -
-        // 0, //D2L, // -
-        // -1, //D2F, // -
-        // 0, //I2B, // -
-        // 0, //I2C, // -
-        // 0, //I2S, // -
-        // -3, //LCMP, // -
-        // -1, //FCMPL, // -
-        // -1, //FCMPG, // -
-        // -3, //DCMPL, // -
-        // -3, //DCMPG, // -
-        // -1, //IFEQ, // visitJumpInsn
-        // -1, //IFNE, // -
-        // -1, //IFLT, // -
-        // -1, //IFGE, // -
-        // -1, //IFGT, // -
-        // -1, //IFLE, // -
-        // -2, //IF_ICMPEQ, // -
-        // -2, //IF_ICMPNE, // -
-        // -2, //IF_ICMPLT, // -
-        // -2, //IF_ICMPGE, // -
-        // -2, //IF_ICMPGT, // -
-        // -2, //IF_ICMPLE, // -
-        // -2, //IF_ACMPEQ, // -
-        // -2, //IF_ACMPNE, // -
-        // 0, //GOTO, // -
-        // 1, //JSR, // -
-        // 0, //RET, // visitVarInsn
-        // -1, //TABLESWITCH, // visiTableSwitchInsn
-        // -1, //LOOKUPSWITCH, // visitLookupSwitch
-        // -1, //IRETURN, // visitInsn
-        // -2, //LRETURN, // -
-        // -1, //FRETURN, // -
-        // -2, //DRETURN, // -
-        // -1, //ARETURN, // -
-        // 0, //RETURN, // -
-        // NA, //GETSTATIC, // visitFieldInsn
-        // NA, //PUTSTATIC, // -
-        // NA, //GETFIELD, // -
-        // NA, //PUTFIELD, // -
-        // NA, //INVOKEVIRTUAL, // visitMethodInsn
-        // NA, //INVOKESPECIAL, // -
-        // NA, //INVOKESTATIC, // -
-        // NA, //INVOKEINTERFACE, // -
-        // NA, //INVOKEDYNAMIC, // visitInvokeDynamicInsn
-        // 1, //NEW, // visitTypeInsn
-        // 0, //NEWARRAY, // visitIntInsn
-        // 0, //ANEWARRAY, // visitTypeInsn
-        // 0, //ARRAYLENGTH, // visitInsn
-        // NA, //ATHROW, // -
-        // 0, //CHECKCAST, // visitTypeInsn
-        // 0, //INSTANCEOF, // -
-        // -1, //MONITORENTER, // visitInsn
-        // -1, //MONITOREXIT, // -
-        // NA, //WIDE, // NOT VISITED
-        // NA, //MULTIANEWARRAY, // visitMultiANewArrayInsn
-        // -1, //IFNULL, // visitJumpInsn
-        // -1, //IFNONNULL, // -
-        // NA, //GOTO_W, // -
-        // NA, //JSR_W, // -
-        // };
-        // for (i = 0; i < b.length; ++i) {
-        // System.err.print((char)('E' + b[i]));
-        // }
-        // System.err.println();
-    }
-
-    /**
-     * The label (i.e. basic block) to which these input and output stack map
-     * frames correspond.
-     */
-    Label owner;
-
-    /**
-     * The input stack map frame locals.
-     */
-    int[] inputLocals;
-
-    /**
-     * The input stack map frame stack.
-     */
-    int[] inputStack;
-
-    /**
-     * The output stack map frame locals.
-     */
-    private int[] outputLocals;
-
-    /**
-     * The output stack map frame stack.
-     */
-    private int[] outputStack;
-
-    /**
-     * Relative size of the output stack. The exact semantics of this field
-     * depends on the algorithm that is used.
-     * 
-     * When only the maximum stack size is computed, this field is the size of
-     * the output stack relatively to the top of the input stack.
-     * 
-     * When the stack map frames are completely computed, this field is the
-     * actual number of types in {@link #outputStack}.
-     */
-    private int outputStackTop;
-
-    /**
-     * Number of types that are initialized in the basic block.
-     * 
-     * @see #initializations
-     */
-    private int initializationCount;
-
-    /**
-     * The types that are initialized in the basic block. A constructor
-     * invocation on an UNINITIALIZED or UNINITIALIZED_THIS type must replace
-     * <i>every occurence</i> of this type in the local variables and in the
-     * operand stack. This cannot be done during the first phase of the
-     * algorithm since, during this phase, the local variables and the operand
-     * stack are not completely computed. It is therefore necessary to store the
-     * types on which constructors are invoked in the basic block, in order to
-     * do this replacement during the second phase of the algorithm, where the
-     * frames are fully computed. Note that this array can contain types that
-     * are relative to input locals or to the input stack (see below for the
-     * description of the algorithm).
-     */
-    private int[] initializations;
-
-    /**
-     * Returns the output frame local variable type at the given index.
-     * 
-     * @param local
-     *            the index of the local that must be returned.
-     * @return the output frame local variable type at the given index.
-     */
-    private int get(final int local) {
-        if (outputLocals == null || local >= outputLocals.length) {
-            // this local has never been assigned in this basic block,
-            // so it is still equal to its value in the input frame
-            return LOCAL | local;
-        } else {
-            int type = outputLocals[local];
-            if (type == 0) {
-                // this local has never been assigned in this basic block,
-                // so it is still equal to its value in the input frame
-                type = outputLocals[local] = LOCAL | local;
-            }
-            return type;
-        }
-    }
-
-    /**
-     * Sets the output frame local variable type at the given index.
-     * 
-     * @param local
-     *            the index of the local that must be set.
-     * @param type
-     *            the value of the local that must be set.
-     */
-    private void set(final int local, final int type) {
-        // creates and/or resizes the output local variables array if necessary
-        if (outputLocals == null) {
-            outputLocals = new int[10];
-        }
-        int n = outputLocals.length;
-        if (local >= n) {
-            int[] t = new int[Math.max(local + 1, 2 * n)];
-            System.arraycopy(outputLocals, 0, t, 0, n);
-            outputLocals = t;
-        }
-        // sets the local variable
-        outputLocals[local] = type;
-    }
-
-    /**
-     * Pushes a new type onto the output frame stack.
-     * 
-     * @param type
-     *            the type that must be pushed.
-     */
-    private void push(final int type) {
-        // creates and/or resizes the output stack array if necessary
-        if (outputStack == null) {
-            outputStack = new int[10];
-        }
-        int n = outputStack.length;
-        if (outputStackTop >= n) {
-            int[] t = new int[Math.max(outputStackTop + 1, 2 * n)];
-            System.arraycopy(outputStack, 0, t, 0, n);
-            outputStack = t;
-        }
-        // pushes the type on the output stack
-        outputStack[outputStackTop++] = type;
-        // updates the maximun height reached by the output stack, if needed
-        int top = owner.inputStackTop + outputStackTop;
-        if (top > owner.outputStackMax) {
-            owner.outputStackMax = top;
-        }
-    }
-
-    /**
-     * Pushes a new type onto the output frame stack.
-     * 
-     * @param cw
-     *            the ClassWriter to which this label belongs.
-     * @param desc
-     *            the descriptor of the type to be pushed. Can also be a method
-     *            descriptor (in this case this method pushes its return type
-     *            onto the output frame stack).
-     */
-    private void push(final ClassWriter cw, final String desc) {
-        int type = type(cw, desc);
-        if (type != 0) {
-            push(type);
-            if (type == LONG || type == DOUBLE) {
-                push(TOP);
-            }
-        }
-    }
-
-    /**
-     * Returns the int encoding of the given type.
-     * 
-     * @param cw
-     *            the ClassWriter to which this label belongs.
-     * @param desc
-     *            a type descriptor.
-     * @return the int encoding of the given type.
-     */
-    private static int type(final ClassWriter cw, final String desc) {
-        String t;
-        int index = desc.charAt(0) == '(' ? desc.indexOf(')') + 1 : 0;
-        switch (desc.charAt(index)) {
-        case 'V':
-            return 0;
-        case 'Z':
-        case 'C':
-        case 'B':
-        case 'S':
-        case 'I':
-            return INTEGER;
-        case 'F':
-            return FLOAT;
-        case 'J':
-            return LONG;
-        case 'D':
-            return DOUBLE;
-        case 'L':
-            // stores the internal name, not the descriptor!
-            t = desc.substring(index + 1, desc.length() - 1);
-            return OBJECT | cw.addType(t);
-            // case '[':
-        default:
-            // extracts the dimensions and the element type
-            int data;
-            int dims = index + 1;
-            while (desc.charAt(dims) == '[') {
-                ++dims;
-            }
-            switch (desc.charAt(dims)) {
-            case 'Z':
-                data = BOOLEAN;
-                break;
-            case 'C':
-                data = CHAR;
-                break;
-            case 'B':
-                data = BYTE;
-                break;
-            case 'S':
-                data = SHORT;
-                break;
-            case 'I':
-                data = INTEGER;
-                break;
-            case 'F':
-                data = FLOAT;
-                break;
-            case 'J':
-                data = LONG;
-                break;
-            case 'D':
-                data = DOUBLE;
-                break;
-            // case 'L':
-            default:
-                // stores the internal name, not the descriptor
-                t = desc.substring(dims + 1, desc.length() - 1);
-                data = OBJECT | cw.addType(t);
-            }
-            return (dims - index) << 28 | data;
-        }
-    }
-
-    /**
-     * Pops a type from the output frame stack and returns its value.
-     * 
-     * @return the type that has been popped from the output frame stack.
-     */
-    private int pop() {
-        if (outputStackTop > 0) {
-            return outputStack[--outputStackTop];
-        } else {
-            // if the output frame stack is empty, pops from the input stack
-            return STACK | -(--owner.inputStackTop);
-        }
-    }
-
-    /**
-     * Pops the given number of types from the output frame stack.
-     * 
-     * @param elements
-     *            the number of types that must be popped.
-     */
-    private void pop(final int elements) {
-        if (outputStackTop >= elements) {
-            outputStackTop -= elements;
-        } else {
-            // if the number of elements to be popped is greater than the number
-            // of elements in the output stack, clear it, and pops the remaining
-            // elements from the input stack.
-            owner.inputStackTop -= elements - outputStackTop;
-            outputStackTop = 0;
-        }
-    }
-
-    /**
-     * Pops a type from the output frame stack.
-     * 
-     * @param desc
-     *            the descriptor of the type to be popped. Can also be a method
-     *            descriptor (in this case this method pops the types
-     *            corresponding to the method arguments).
-     */
-    private void pop(final String desc) {
-        char c = desc.charAt(0);
-        if (c == '(') {
-            pop((Type.getArgumentsAndReturnSizes(desc) >> 2) - 1);
-        } else if (c == 'J' || c == 'D') {
-            pop(2);
-        } else {
-            pop(1);
-        }
-    }
-
-    /**
-     * Adds a new type to the list of types on which a constructor is invoked in
-     * the basic block.
-     * 
-     * @param var
-     *            a type on a which a constructor is invoked.
-     */
-    private void init(final int var) {
-        // creates and/or resizes the initializations array if necessary
-        if (initializations == null) {
-            initializations = new int[2];
-        }
-        int n = initializations.length;
-        if (initializationCount >= n) {
-            int[] t = new int[Math.max(initializationCount + 1, 2 * n)];
-            System.arraycopy(initializations, 0, t, 0, n);
-            initializations = t;
-        }
-        // stores the type to be initialized
-        initializations[initializationCount++] = var;
-    }
-
-    /**
-     * Replaces the given type with the appropriate type if it is one of the
-     * types on which a constructor is invoked in the basic block.
-     * 
-     * @param cw
-     *            the ClassWriter to which this label belongs.
-     * @param t
-     *            a type
-     * @return t or, if t is one of the types on which a constructor is invoked
-     *         in the basic block, the type corresponding to this constructor.
-     */
-    private int init(final ClassWriter cw, final int t) {
-        int s;
-        if (t == UNINITIALIZED_THIS) {
-            s = OBJECT | cw.addType(cw.thisName);
-        } else if ((t & (DIM | BASE_KIND)) == UNINITIALIZED) {
-            String type = cw.typeTable[t & BASE_VALUE].strVal1;
-            s = OBJECT | cw.addType(type);
-        } else {
-            return t;
-        }
-        for (int j = 0; j < initializationCount; ++j) {
-            int u = initializations[j];
-            int dim = u & DIM;
-            int kind = u & KIND;
-            if (kind == LOCAL) {
-                u = dim + inputLocals[u & VALUE];
-            } else if (kind == STACK) {
-                u = dim + inputStack[inputStack.length - (u & VALUE)];
-            }
-            if (t == u) {
-                return s;
-            }
-        }
-        return t;
-    }
-
-    /**
-     * Initializes the input frame of the first basic block from the method
-     * descriptor.
-     * 
-     * @param cw
-     *            the ClassWriter to which this label belongs.
-     * @param access
-     *            the access flags of the method to which this label belongs.
-     * @param args
-     *            the formal parameter types of this method.
-     * @param maxLocals
-     *            the maximum number of local variables of this method.
-     */
-    void initInputFrame(final ClassWriter cw, final int access,
-            final Type[] args, final int maxLocals) {
-        inputLocals = new int[maxLocals];
-        inputStack = new int[0];
-        int i = 0;
-        if ((access & Opcodes.ACC_STATIC) == 0) {
-            if ((access & MethodWriter.ACC_CONSTRUCTOR) == 0) {
-                inputLocals[i++] = OBJECT | cw.addType(cw.thisName);
-            } else {
-                inputLocals[i++] = UNINITIALIZED_THIS;
-            }
-        }
-        for (int j = 0; j < args.length; ++j) {
-            int t = type(cw, args[j].getDescriptor());
-            inputLocals[i++] = t;
-            if (t == LONG || t == DOUBLE) {
-                inputLocals[i++] = TOP;
-            }
-        }
-        while (i < maxLocals) {
-            inputLocals[i++] = TOP;
-        }
-    }
-
-    /**
-     * Simulates the action of the given instruction on the output stack frame.
-     * 
-     * @param opcode
-     *            the opcode of the instruction.
-     * @param arg
-     *            the operand of the instruction, if any.
-     * @param cw
-     *            the class writer to which this label belongs.
-     * @param item
-     *            the operand of the instructions, if any.
-     */
-    void execute(final int opcode, final int arg, final ClassWriter cw,
-            final Item item) {
-        int t1, t2, t3, t4;
-        switch (opcode) {
-        case Opcodes.NOP:
-        case Opcodes.INEG:
-        case Opcodes.LNEG:
-        case Opcodes.FNEG:
-        case Opcodes.DNEG:
-        case Opcodes.I2B:
-        case Opcodes.I2C:
-        case Opcodes.I2S:
-        case Opcodes.GOTO:
-        case Opcodes.RETURN:
-            break;
-        case Opcodes.ACONST_NULL:
-            push(NULL);
-            break;
-        case Opcodes.ICONST_M1:
-        case Opcodes.ICONST_0:
-        case Opcodes.ICONST_1:
-        case Opcodes.ICONST_2:
-        case Opcodes.ICONST_3:
-        case Opcodes.ICONST_4:
-        case Opcodes.ICONST_5:
-        case Opcodes.BIPUSH:
-        case Opcodes.SIPUSH:
-        case Opcodes.ILOAD:
-            push(INTEGER);
-            break;
-        case Opcodes.LCONST_0:
-        case Opcodes.LCONST_1:
-        case Opcodes.LLOAD:
-            push(LONG);
-            push(TOP);
-            break;
-        case Opcodes.FCONST_0:
-        case Opcodes.FCONST_1:
-        case Opcodes.FCONST_2:
-        case Opcodes.FLOAD:
-            push(FLOAT);
-            break;
-        case Opcodes.DCONST_0:
-        case Opcodes.DCONST_1:
-        case Opcodes.DLOAD:
-            push(DOUBLE);
-            push(TOP);
-            break;
-        case Opcodes.LDC:
-            switch (item.type) {
-            case ClassWriter.INT:
-                push(INTEGER);
-                break;
-            case ClassWriter.LONG:
-                push(LONG);
-                push(TOP);
-                break;
-            case ClassWriter.FLOAT:
-                push(FLOAT);
-                break;
-            case ClassWriter.DOUBLE:
-                push(DOUBLE);
-                push(TOP);
-                break;
-            case ClassWriter.CLASS:
-                push(OBJECT | cw.addType("java/lang/Class"));
-                break;
-            case ClassWriter.STR:
-                push(OBJECT | cw.addType("java/lang/String"));
-                break;
-            case ClassWriter.MTYPE:
-                push(OBJECT | cw.addType("java/lang/invoke/MethodType"));
-                break;
-            // case ClassWriter.HANDLE_BASE + [1..9]:
-            default:
-                push(OBJECT | cw.addType("java/lang/invoke/MethodHandle"));
-            }
-            break;
-        case Opcodes.ALOAD:
-            push(get(arg));
-            break;
-        case Opcodes.IALOAD:
-        case Opcodes.BALOAD:
-        case Opcodes.CALOAD:
-        case Opcodes.SALOAD:
-            pop(2);
-            push(INTEGER);
-            break;
-        case Opcodes.LALOAD:
-        case Opcodes.D2L:
-            pop(2);
-            push(LONG);
-            push(TOP);
-            break;
-        case Opcodes.FALOAD:
-            pop(2);
-            push(FLOAT);
-            break;
-        case Opcodes.DALOAD:
-        case Opcodes.L2D:
-            pop(2);
-            push(DOUBLE);
-            push(TOP);
-            break;
-        case Opcodes.AALOAD:
-            pop(1);
-            t1 = pop();
-            push(ELEMENT_OF + t1);
-            break;
-        case Opcodes.ISTORE:
-        case Opcodes.FSTORE:
-        case Opcodes.ASTORE:
-            t1 = pop();
-            set(arg, t1);
-            if (arg > 0) {
-                t2 = get(arg - 1);
-                // if t2 is of kind STACK or LOCAL we cannot know its size!
-                if (t2 == LONG || t2 == DOUBLE) {
-                    set(arg - 1, TOP);
-                } else if ((t2 & KIND) != BASE) {
-                    set(arg - 1, t2 | TOP_IF_LONG_OR_DOUBLE);
-                }
-            }
-            break;
-        case Opcodes.LSTORE:
-        case Opcodes.DSTORE:
-            pop(1);
-            t1 = pop();
-            set(arg, t1);
-            set(arg + 1, TOP);
-            if (arg > 0) {
-                t2 = get(arg - 1);
-                // if t2 is of kind STACK or LOCAL we cannot know its size!
-                if (t2 == LONG || t2 == DOUBLE) {
-                    set(arg - 1, TOP);
-                } else if ((t2 & KIND) != BASE) {
-                    set(arg - 1, t2 | TOP_IF_LONG_OR_DOUBLE);
-                }
-            }
-            break;
-        case Opcodes.IASTORE:
-        case Opcodes.BASTORE:
-        case Opcodes.CASTORE:
-        case Opcodes.SASTORE:
-        case Opcodes.FASTORE:
-        case Opcodes.AASTORE:
-            pop(3);
-            break;
-        case Opcodes.LASTORE:
-        case Opcodes.DASTORE:
-            pop(4);
-            break;
-        case Opcodes.POP:
-        case Opcodes.IFEQ:
-        case Opcodes.IFNE:
-        case Opcodes.IFLT:
-        case Opcodes.IFGE:
-        case Opcodes.IFGT:
-        case Opcodes.IFLE:
-        case Opcodes.IRETURN:
-        case Opcodes.FRETURN:
-        case Opcodes.ARETURN:
-        case Opcodes.TABLESWITCH:
-        case Opcodes.LOOKUPSWITCH:
-        case Opcodes.ATHROW:
-        case Opcodes.MONITORENTER:
-        case Opcodes.MONITOREXIT:
-        case Opcodes.IFNULL:
-        case Opcodes.IFNONNULL:
-            pop(1);
-            break;
-        case Opcodes.POP2:
-        case Opcodes.IF_ICMPEQ:
-        case Opcodes.IF_ICMPNE:
-        case Opcodes.IF_ICMPLT:
-        case Opcodes.IF_ICMPGE:
-        case Opcodes.IF_ICMPGT:
-        case Opcodes.IF_ICMPLE:
-        case Opcodes.IF_ACMPEQ:
-        case Opcodes.IF_ACMPNE:
-        case Opcodes.LRETURN:
-        case Opcodes.DRETURN:
-            pop(2);
-            break;
-        case Opcodes.DUP:
-            t1 = pop();
-            push(t1);
-            push(t1);
-            break;
-        case Opcodes.DUP_X1:
-            t1 = pop();
-            t2 = pop();
-            push(t1);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP_X2:
-            t1 = pop();
-            t2 = pop();
-            t3 = pop();
-            push(t1);
-            push(t3);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP2:
-            t1 = pop();
-            t2 = pop();
-            push(t2);
-            push(t1);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP2_X1:
-            t1 = pop();
-            t2 = pop();
-            t3 = pop();
-            push(t2);
-            push(t1);
-            push(t3);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP2_X2:
-            t1 = pop();
-            t2 = pop();
-            t3 = pop();
-            t4 = pop();
-            push(t2);
-            push(t1);
-            push(t4);
-            push(t3);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.SWAP:
-            t1 = pop();
-            t2 = pop();
-            push(t1);
-            push(t2);
-            break;
-        case Opcodes.IADD:
-        case Opcodes.ISUB:
-        case Opcodes.IMUL:
-        case Opcodes.IDIV:
-        case Opcodes.IREM:
-        case Opcodes.IAND:
-        case Opcodes.IOR:
-        case Opcodes.IXOR:
-        case Opcodes.ISHL:
-        case Opcodes.ISHR:
-        case Opcodes.IUSHR:
-        case Opcodes.L2I:
-        case Opcodes.D2I:
-        case Opcodes.FCMPL:
-        case Opcodes.FCMPG:
-            pop(2);
-            push(INTEGER);
-            break;
-        case Opcodes.LADD:
-        case Opcodes.LSUB:
-        case Opcodes.LMUL:
-        case Opcodes.LDIV:
-        case Opcodes.LREM:
-        case Opcodes.LAND:
-        case Opcodes.LOR:
-        case Opcodes.LXOR:
-            pop(4);
-            push(LONG);
-            push(TOP);
-            break;
-        case Opcodes.FADD:
-        case Opcodes.FSUB:
-        case Opcodes.FMUL:
-        case Opcodes.FDIV:
-        case Opcodes.FREM:
-        case Opcodes.L2F:
-        case Opcodes.D2F:
-            pop(2);
-            push(FLOAT);
-            break;
-        case Opcodes.DADD:
-        case Opcodes.DSUB:
-        case Opcodes.DMUL:
-        case Opcodes.DDIV:
-        case Opcodes.DREM:
-            pop(4);
-            push(DOUBLE);
-            push(TOP);
-            break;
-        case Opcodes.LSHL:
-        case Opcodes.LSHR:
-        case Opcodes.LUSHR:
-            pop(3);
-            push(LONG);
-            push(TOP);
-            break;
-        case Opcodes.IINC:
-            set(arg, INTEGER);
-            break;
-        case Opcodes.I2L:
-        case Opcodes.F2L:
-            pop(1);
-            push(LONG);
-            push(TOP);
-            break;
-        case Opcodes.I2F:
-            pop(1);
-            push(FLOAT);
-            break;
-        case Opcodes.I2D:
-        case Opcodes.F2D:
-            pop(1);
-            push(DOUBLE);
-            push(TOP);
-            break;
-        case Opcodes.F2I:
-        case Opcodes.ARRAYLENGTH:
-        case Opcodes.INSTANCEOF:
-            pop(1);
-            push(INTEGER);
-            break;
-        case Opcodes.LCMP:
-        case Opcodes.DCMPL:
-        case Opcodes.DCMPG:
-            pop(4);
-            push(INTEGER);
-            break;
-        case Opcodes.JSR:
-        case Opcodes.RET:
-            throw new RuntimeException(
-                    "JSR/RET are not supported with computeFrames option");
-        case Opcodes.GETSTATIC:
-            push(cw, item.strVal3);
-            break;
-        case Opcodes.PUTSTATIC:
-            pop(item.strVal3);
-            break;
-        case Opcodes.GETFIELD:
-            pop(1);
-            push(cw, item.strVal3);
-            break;
-        case Opcodes.PUTFIELD:
-            pop(item.strVal3);
-            pop();
-            break;
-        case Opcodes.INVOKEVIRTUAL:
-        case Opcodes.INVOKESPECIAL:
-        case Opcodes.INVOKESTATIC:
-        case Opcodes.INVOKEINTERFACE:
-            pop(item.strVal3);
-            if (opcode != Opcodes.INVOKESTATIC) {
-                t1 = pop();
-                if (opcode == Opcodes.INVOKESPECIAL
-                        && item.strVal2.charAt(0) == '<') {
-                    init(t1);
-                }
-            }
-            push(cw, item.strVal3);
-            break;
-        case Opcodes.INVOKEDYNAMIC:
-            pop(item.strVal2);
-            push(cw, item.strVal2);
-            break;
-        case Opcodes.NEW:
-            push(UNINITIALIZED | cw.addUninitializedType(item.strVal1, arg));
-            break;
-        case Opcodes.NEWARRAY:
-            pop();
-            switch (arg) {
-            case Opcodes.T_BOOLEAN:
-                push(ARRAY_OF | BOOLEAN);
-                break;
-            case Opcodes.T_CHAR:
-                push(ARRAY_OF | CHAR);
-                break;
-            case Opcodes.T_BYTE:
-                push(ARRAY_OF | BYTE);
-                break;
-            case Opcodes.T_SHORT:
-                push(ARRAY_OF | SHORT);
-                break;
-            case Opcodes.T_INT:
-                push(ARRAY_OF | INTEGER);
-                break;
-            case Opcodes.T_FLOAT:
-                push(ARRAY_OF | FLOAT);
-                break;
-            case Opcodes.T_DOUBLE:
-                push(ARRAY_OF | DOUBLE);
-                break;
-            // case Opcodes.T_LONG:
-            default:
-                push(ARRAY_OF | LONG);
-                break;
-            }
-            break;
-        case Opcodes.ANEWARRAY:
-            String s = item.strVal1;
-            pop();
-            if (s.charAt(0) == '[') {
-                push(cw, '[' + s);
-            } else {
-                push(ARRAY_OF | OBJECT | cw.addType(s));
-            }
-            break;
-        case Opcodes.CHECKCAST:
-            s = item.strVal1;
-            pop();
-            if (s.charAt(0) == '[') {
-                push(cw, s);
-            } else {
-                push(OBJECT | cw.addType(s));
-            }
-            break;
-        // case Opcodes.MULTIANEWARRAY:
-        default:
-            pop(arg);
-            push(cw, item.strVal1);
-            break;
-        }
-    }
-
-    /**
-     * Merges the input frame of the given basic block with the input and output
-     * frames of this basic block. Returns <tt>true</tt> if the input frame of
-     * the given label has been changed by this operation.
-     * 
-     * @param cw
-     *            the ClassWriter to which this label belongs.
-     * @param frame
-     *            the basic block whose input frame must be updated.
-     * @param edge
-     *            the kind of the {@link Edge} between this label and 'label'.
-     *            See {@link Edge#info}.
-     * @return <tt>true</tt> if the input frame of the given label has been
-     *         changed by this operation.
-     */
-    boolean merge(final ClassWriter cw, final Frame frame, final int edge) {
-        boolean changed = false;
-        int i, s, dim, kind, t;
-
-        int nLocal = inputLocals.length;
-        int nStack = inputStack.length;
-        if (frame.inputLocals == null) {
-            frame.inputLocals = new int[nLocal];
-            changed = true;
-        }
-
-        for (i = 0; i < nLocal; ++i) {
-            if (outputLocals != null && i < outputLocals.length) {
-                s = outputLocals[i];
-                if (s == 0) {
-                    t = inputLocals[i];
-                } else {
-                    dim = s & DIM;
-                    kind = s & KIND;
-                    if (kind == BASE) {
-                        t = s;
-                    } else {
-                        if (kind == LOCAL) {
-                            t = dim + inputLocals[s & VALUE];
-                        } else {
-                            t = dim + inputStack[nStack - (s & VALUE)];
-                        }
-                        if ((s & TOP_IF_LONG_OR_DOUBLE) != 0
-                                && (t == LONG || t == DOUBLE)) {
-                            t = TOP;
-                        }
-                    }
-                }
-            } else {
-                t = inputLocals[i];
-            }
-            if (initializations != null) {
-                t = init(cw, t);
-            }
-            changed |= merge(cw, t, frame.inputLocals, i);
-        }
-
-        if (edge > 0) {
-            for (i = 0; i < nLocal; ++i) {
-                t = inputLocals[i];
-                changed |= merge(cw, t, frame.inputLocals, i);
-            }
-            if (frame.inputStack == null) {
-                frame.inputStack = new int[1];
-                changed = true;
-            }
-            changed |= merge(cw, edge, frame.inputStack, 0);
-            return changed;
-        }
-
-        int nInputStack = inputStack.length + owner.inputStackTop;
-        if (frame.inputStack == null) {
-            frame.inputStack = new int[nInputStack + outputStackTop];
-            changed = true;
-        }
-
-        for (i = 0; i < nInputStack; ++i) {
-            t = inputStack[i];
-            if (initializations != null) {
-                t = init(cw, t);
-            }
-            changed |= merge(cw, t, frame.inputStack, i);
-        }
-        for (i = 0; i < outputStackTop; ++i) {
-            s = outputStack[i];
-            dim = s & DIM;
-            kind = s & KIND;
-            if (kind == BASE) {
-                t = s;
-            } else {
-                if (kind == LOCAL) {
-                    t = dim + inputLocals[s & VALUE];
-                } else {
-                    t = dim + inputStack[nStack - (s & VALUE)];
-                }
-                if ((s & TOP_IF_LONG_OR_DOUBLE) != 0
-                        && (t == LONG || t == DOUBLE)) {
-                    t = TOP;
-                }
-            }
-            if (initializations != null) {
-                t = init(cw, t);
-            }
-            changed |= merge(cw, t, frame.inputStack, nInputStack + i);
-        }
-        return changed;
-    }
-
-    /**
-     * Merges the type at the given index in the given type array with the given
-     * type. Returns <tt>true</tt> if the type array has been modified by this
-     * operation.
-     * 
-     * @param cw
-     *            the ClassWriter to which this label belongs.
-     * @param t
-     *            the type with which the type array element must be merged.
-     * @param types
-     *            an array of types.
-     * @param index
-     *            the index of the type that must be merged in 'types'.
-     * @return <tt>true</tt> if the type array has been modified by this
-     *         operation.
-     */
-    private static boolean merge(final ClassWriter cw, int t,
-            final int[] types, final int index) {
-        int u = types[index];
-        if (u == t) {
-            // if the types are equal, merge(u,t)=u, so there is no change
-            return false;
-        }
-        if ((t & ~DIM) == NULL) {
-            if (u == NULL) {
-                return false;
-            }
-            t = NULL;
-        }
-        if (u == 0) {
-            // if types[index] has never been assigned, merge(u,t)=t
-            types[index] = t;
-            return true;
-        }
-        int v;
-        if ((u & BASE_KIND) == OBJECT || (u & DIM) != 0) {
-            // if u is a reference type of any dimension
-            if (t == NULL) {
-                // if t is the NULL type, merge(u,t)=u, so there is no change
-                return false;
-            } else if ((t & (DIM | BASE_KIND)) == (u & (DIM | BASE_KIND))) {
-                if ((u & BASE_KIND) == OBJECT) {
-                    // if t is also a reference type, and if u and t have the
-                    // same dimension merge(u,t) = dim(t) | common parent of the
-                    // element types of u and t
-                    v = (t & DIM) | OBJECT
-                            | cw.getMergedType(t & BASE_VALUE, u & BASE_VALUE);
-                } else {
-                    // if u and t are array types, but not with the same element
-                    // type, merge(u,t)=java/lang/Object
-                    v = OBJECT | cw.addType("java/lang/Object");
-                }
-            } else if ((t & BASE_KIND) == OBJECT || (t & DIM) != 0) {
-                // if t is any other reference or array type,
-                // merge(u,t)=java/lang/Object
-                v = OBJECT | cw.addType("java/lang/Object");
-            } else {
-                // if t is any other type, merge(u,t)=TOP
-                v = TOP;
-            }
-        } else if (u == NULL) {
-            // if u is the NULL type, merge(u,t)=t,
-            // or TOP if t is not a reference type
-            v = (t & BASE_KIND) == OBJECT || (t & DIM) != 0 ? t : TOP;
-        } else {
-            // if u is any other type, merge(u,t)=TOP whatever t
-            v = TOP;
-        }
-        if (u != v) {
-            types[index] = v;
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Handle.java b/asm4/src/org/objectweb/asm/Handle.java
deleted file mode 100644
index 533471e..0000000
--- a/asm4/src/org/objectweb/asm/Handle.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm;
-
-/**
- * A reference to a field or a method.
- * 
- * @author Remi Forax
- * @author Eric Bruneton
- */
-public final class Handle {
-
-    /**
-     * The kind of field or method designated by this Handle. Should be
-     * {@link Opcodes#H_GETFIELD}, {@link Opcodes#H_GETSTATIC},
-     * {@link Opcodes#H_PUTFIELD}, {@link Opcodes#H_PUTSTATIC},
-     * {@link Opcodes#H_INVOKEVIRTUAL}, {@link Opcodes#H_INVOKESTATIC},
-     * {@link Opcodes#H_INVOKESPECIAL}, {@link Opcodes#H_NEWINVOKESPECIAL} or
-     * {@link Opcodes#H_INVOKEINTERFACE}.
-     */
-    final int tag;
-
-    /**
-     * The internal name of the field or method designed by this handle.
-     */
-    final String owner;
-
-    /**
-     * The name of the field or method designated by this handle.
-     */
-    final String name;
-
-    /**
-     * The descriptor of the field or method designated by this handle.
-     */
-    final String desc;
-
-    /**
-     * Constructs a new field or method handle.
-     * 
-     * @param tag
-     *            the kind of field or method designated by this Handle. Must be
-     *            {@link Opcodes#H_GETFIELD}, {@link Opcodes#H_GETSTATIC},
-     *            {@link Opcodes#H_PUTFIELD}, {@link Opcodes#H_PUTSTATIC},
-     *            {@link Opcodes#H_INVOKEVIRTUAL},
-     *            {@link Opcodes#H_INVOKESTATIC},
-     *            {@link Opcodes#H_INVOKESPECIAL},
-     *            {@link Opcodes#H_NEWINVOKESPECIAL} or
-     *            {@link Opcodes#H_INVOKEINTERFACE}.
-     * @param owner
-     *            the internal name of the field or method designed by this
-     *            handle.
-     * @param name
-     *            the name of the field or method designated by this handle.
-     * @param desc
-     *            the descriptor of the field or method designated by this
-     *            handle.
-     */
-    public Handle(int tag, String owner, String name, String desc) {
-        this.tag = tag;
-        this.owner = owner;
-        this.name = name;
-        this.desc = desc;
-    }
-
-    /**
-     * Returns the kind of field or method designated by this handle.
-     * 
-     * @return {@link Opcodes#H_GETFIELD}, {@link Opcodes#H_GETSTATIC},
-     *         {@link Opcodes#H_PUTFIELD}, {@link Opcodes#H_PUTSTATIC},
-     *         {@link Opcodes#H_INVOKEVIRTUAL}, {@link Opcodes#H_INVOKESTATIC},
-     *         {@link Opcodes#H_INVOKESPECIAL},
-     *         {@link Opcodes#H_NEWINVOKESPECIAL} or
-     *         {@link Opcodes#H_INVOKEINTERFACE}.
-     */
-    public int getTag() {
-        return tag;
-    }
-
-    /**
-     * Returns the internal name of the field or method designed by this handle.
-     * 
-     * @return the internal name of the field or method designed by this handle.
-     */
-    public String getOwner() {
-        return owner;
-    }
-
-    /**
-     * Returns the name of the field or method designated by this handle.
-     * 
-     * @return the name of the field or method designated by this handle.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Returns the descriptor of the field or method designated by this handle.
-     * 
-     * @return the descriptor of the field or method designated by this handle.
-     */
-    public String getDesc() {
-        return desc;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (!(obj instanceof Handle)) {
-            return false;
-        }
-        Handle h = (Handle) obj;
-        return tag == h.tag && owner.equals(h.owner) && name.equals(h.name)
-                && desc.equals(h.desc);
-    }
-
-    @Override
-    public int hashCode() {
-        return tag + owner.hashCode() * name.hashCode() * desc.hashCode();
-    }
-
-    /**
-     * Returns the textual representation of this handle. The textual
-     * representation is:
-     * 
-     * <pre>
-     * owner '.' name desc ' ' '(' tag ')'
-     * </pre>
-     * 
-     * . As this format is unambiguous, it can be parsed if necessary.
-     */
-    @Override
-    public String toString() {
-        return owner + '.' + name + desc + " (" + tag + ')';
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Handler.java b/asm4/src/org/objectweb/asm/Handler.java
deleted file mode 100644
index b24591d..0000000
--- a/asm4/src/org/objectweb/asm/Handler.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * Information about an exception handler block.
- * 
- * @author Eric Bruneton
- */
-class Handler {
-
-    /**
-     * Beginning of the exception handler's scope (inclusive).
-     */
-    Label start;
-
-    /**
-     * End of the exception handler's scope (exclusive).
-     */
-    Label end;
-
-    /**
-     * Beginning of the exception handler's code.
-     */
-    Label handler;
-
-    /**
-     * Internal name of the type of exceptions handled by this handler, or
-     * <tt>null</tt> to catch any exceptions.
-     */
-    String desc;
-
-    /**
-     * Constant pool index of the internal name of the type of exceptions
-     * handled by this handler, or 0 to catch any exceptions.
-     */
-    int type;
-
-    /**
-     * Next exception handler block info.
-     */
-    Handler next;
-
-    /**
-     * Removes the range between start and end from the given exception
-     * handlers.
-     * 
-     * @param h
-     *            an exception handler list.
-     * @param start
-     *            the start of the range to be removed.
-     * @param end
-     *            the end of the range to be removed. Maybe null.
-     * @return the exception handler list with the start-end range removed.
-     */
-    static Handler remove(Handler h, Label start, Label end) {
-        if (h == null) {
-            return null;
-        } else {
-            h.next = remove(h.next, start, end);
-        }
-        int hstart = h.start.position;
-        int hend = h.end.position;
-        int s = start.position;
-        int e = end == null ? Integer.MAX_VALUE : end.position;
-        // if [hstart,hend[ and [s,e[ intervals intersect...
-        if (s < hend && e > hstart) {
-            if (s <= hstart) {
-                if (e >= hend) {
-                    // [hstart,hend[ fully included in [s,e[, h removed
-                    h = h.next;
-                } else {
-                    // [hstart,hend[ minus [s,e[ = [e,hend[
-                    h.start = end;
-                }
-            } else if (e >= hend) {
-                // [hstart,hend[ minus [s,e[ = [hstart,s[
-                h.end = start;
-            } else {
-                // [hstart,hend[ minus [s,e[ = [hstart,s[ + [e,hend[
-                Handler g = new Handler();
-                g.start = end;
-                g.end = h.end;
-                g.handler = h.handler;
-                g.desc = h.desc;
-                g.type = h.type;
-                g.next = h.next;
-                h.end = start;
-                h.next = g;
-            }
-        }
-        return h;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Item.java b/asm4/src/org/objectweb/asm/Item.java
deleted file mode 100644
index c25b7b7..0000000
--- a/asm4/src/org/objectweb/asm/Item.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A constant pool item. Constant pool items can be created with the 'newXXX'
- * methods in the {@link ClassWriter} class.
- * 
- * @author Eric Bruneton
- */
-final class Item {
-
-    /**
-     * Index of this item in the constant pool.
-     */
-    int index;
-
-    /**
-     * Type of this constant pool item. A single class is used to represent all
-     * constant pool item types, in order to minimize the bytecode size of this
-     * package. The value of this field is one of {@link ClassWriter#INT},
-     * {@link ClassWriter#LONG}, {@link ClassWriter#FLOAT},
-     * {@link ClassWriter#DOUBLE}, {@link ClassWriter#UTF8},
-     * {@link ClassWriter#STR}, {@link ClassWriter#CLASS},
-     * {@link ClassWriter#NAME_TYPE}, {@link ClassWriter#FIELD},
-     * {@link ClassWriter#METH}, {@link ClassWriter#IMETH},
-     * {@link ClassWriter#MTYPE}, {@link ClassWriter#INDY}.
-     * 
-     * MethodHandle constant 9 variations are stored using a range of 9 values
-     * from {@link ClassWriter#HANDLE_BASE} + 1 to
-     * {@link ClassWriter#HANDLE_BASE} + 9.
-     * 
-     * Special Item types are used for Items that are stored in the ClassWriter
-     * {@link ClassWriter#typeTable}, instead of the constant pool, in order to
-     * avoid clashes with normal constant pool items in the ClassWriter constant
-     * pool's hash table. These special item types are
-     * {@link ClassWriter#TYPE_NORMAL}, {@link ClassWriter#TYPE_UNINIT} and
-     * {@link ClassWriter#TYPE_MERGED}.
-     */
-    int type;
-
-    /**
-     * Value of this item, for an integer item.
-     */
-    int intVal;
-
-    /**
-     * Value of this item, for a long item.
-     */
-    long longVal;
-
-    /**
-     * First part of the value of this item, for items that do not hold a
-     * primitive value.
-     */
-    String strVal1;
-
-    /**
-     * Second part of the value of this item, for items that do not hold a
-     * primitive value.
-     */
-    String strVal2;
-
-    /**
-     * Third part of the value of this item, for items that do not hold a
-     * primitive value.
-     */
-    String strVal3;
-
-    /**
-     * The hash code value of this constant pool item.
-     */
-    int hashCode;
-
-    /**
-     * Link to another constant pool item, used for collision lists in the
-     * constant pool's hash table.
-     */
-    Item next;
-
-    /**
-     * Constructs an uninitialized {@link Item}.
-     */
-    Item() {
-    }
-
-    /**
-     * Constructs an uninitialized {@link Item} for constant pool element at
-     * given position.
-     * 
-     * @param index
-     *            index of the item to be constructed.
-     */
-    Item(final int index) {
-        this.index = index;
-    }
-
-    /**
-     * Constructs a copy of the given item.
-     * 
-     * @param index
-     *            index of the item to be constructed.
-     * @param i
-     *            the item that must be copied into the item to be constructed.
-     */
-    Item(final int index, final Item i) {
-        this.index = index;
-        type = i.type;
-        intVal = i.intVal;
-        longVal = i.longVal;
-        strVal1 = i.strVal1;
-        strVal2 = i.strVal2;
-        strVal3 = i.strVal3;
-        hashCode = i.hashCode;
-    }
-
-    /**
-     * Sets this item to an integer item.
-     * 
-     * @param intVal
-     *            the value of this item.
-     */
-    void set(final int intVal) {
-        this.type = ClassWriter.INT;
-        this.intVal = intVal;
-        this.hashCode = 0x7FFFFFFF & (type + intVal);
-    }
-
-    /**
-     * Sets this item to a long item.
-     * 
-     * @param longVal
-     *            the value of this item.
-     */
-    void set(final long longVal) {
-        this.type = ClassWriter.LONG;
-        this.longVal = longVal;
-        this.hashCode = 0x7FFFFFFF & (type + (int) longVal);
-    }
-
-    /**
-     * Sets this item to a float item.
-     * 
-     * @param floatVal
-     *            the value of this item.
-     */
-    void set(final float floatVal) {
-        this.type = ClassWriter.FLOAT;
-        this.intVal = Float.floatToRawIntBits(floatVal);
-        this.hashCode = 0x7FFFFFFF & (type + (int) floatVal);
-    }
-
-    /**
-     * Sets this item to a double item.
-     * 
-     * @param doubleVal
-     *            the value of this item.
-     */
-    void set(final double doubleVal) {
-        this.type = ClassWriter.DOUBLE;
-        this.longVal = Double.doubleToRawLongBits(doubleVal);
-        this.hashCode = 0x7FFFFFFF & (type + (int) doubleVal);
-    }
-
-    /**
-     * Sets this item to an item that do not hold a primitive value.
-     * 
-     * @param type
-     *            the type of this item.
-     * @param strVal1
-     *            first part of the value of this item.
-     * @param strVal2
-     *            second part of the value of this item.
-     * @param strVal3
-     *            third part of the value of this item.
-     */
-    void set(final int type, final String strVal1, final String strVal2,
-            final String strVal3) {
-        this.type = type;
-        this.strVal1 = strVal1;
-        this.strVal2 = strVal2;
-        this.strVal3 = strVal3;
-        switch (type) {
-        case ClassWriter.UTF8:
-        case ClassWriter.STR:
-        case ClassWriter.CLASS:
-        case ClassWriter.MTYPE:
-        case ClassWriter.TYPE_NORMAL:
-            hashCode = 0x7FFFFFFF & (type + strVal1.hashCode());
-            return;
-        case ClassWriter.NAME_TYPE: {
-            hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
-                    * strVal2.hashCode());
-            return;
-        }
-        // ClassWriter.FIELD:
-        // ClassWriter.METH:
-        // ClassWriter.IMETH:
-        // ClassWriter.HANDLE_BASE + 1..9
-        default:
-            hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
-                    * strVal2.hashCode() * strVal3.hashCode());
-        }
-    }
-
-    /**
-     * Sets the item to an InvokeDynamic item.
-     * 
-     * @param name
-     *            invokedynamic's name.
-     * @param desc
-     *            invokedynamic's desc.
-     * @param bsmIndex
-     *            zero based index into the class attribute BootrapMethods.
-     */
-    void set(String name, String desc, int bsmIndex) {
-        this.type = ClassWriter.INDY;
-        this.longVal = bsmIndex;
-        this.strVal1 = name;
-        this.strVal2 = desc;
-        this.hashCode = 0x7FFFFFFF & (ClassWriter.INDY + bsmIndex
-                * strVal1.hashCode() * strVal2.hashCode());
-    }
-
-    /**
-     * Sets the item to a BootstrapMethod item.
-     * 
-     * @param position
-     *            position in byte in the class attribute BootrapMethods.
-     * @param hashCode
-     *            hashcode of the item. This hashcode is processed from the
-     *            hashcode of the bootstrap method and the hashcode of all
-     *            bootstrap arguments.
-     */
-    void set(int position, int hashCode) {
-        this.type = ClassWriter.BSM;
-        this.intVal = position;
-        this.hashCode = hashCode;
-    }
-
-    /**
-     * Indicates if the given item is equal to this one. <i>This method assumes
-     * that the two items have the same {@link #type}</i>.
-     * 
-     * @param i
-     *            the item to be compared to this one. Both items must have the
-     *            same {@link #type}.
-     * @return <tt>true</tt> if the given item if equal to this one,
-     *         <tt>false</tt> otherwise.
-     */
-    boolean isEqualTo(final Item i) {
-        switch (type) {
-        case ClassWriter.UTF8:
-        case ClassWriter.STR:
-        case ClassWriter.CLASS:
-        case ClassWriter.MTYPE:
-        case ClassWriter.TYPE_NORMAL:
-            return i.strVal1.equals(strVal1);
-        case ClassWriter.TYPE_MERGED:
-        case ClassWriter.LONG:
-        case ClassWriter.DOUBLE:
-            return i.longVal == longVal;
-        case ClassWriter.INT:
-        case ClassWriter.FLOAT:
-            return i.intVal == intVal;
-        case ClassWriter.TYPE_UNINIT:
-            return i.intVal == intVal && i.strVal1.equals(strVal1);
-        case ClassWriter.NAME_TYPE:
-            return i.strVal1.equals(strVal1) && i.strVal2.equals(strVal2);
-        case ClassWriter.INDY: {
-            return i.longVal == longVal && i.strVal1.equals(strVal1)
-                    && i.strVal2.equals(strVal2);
-        }
-        // case ClassWriter.FIELD:
-        // case ClassWriter.METH:
-        // case ClassWriter.IMETH:
-        // case ClassWriter.HANDLE_BASE + 1..9
-        default:
-            return i.strVal1.equals(strVal1) && i.strVal2.equals(strVal2)
-                    && i.strVal3.equals(strVal3);
-        }
-    }
-
-}
diff --git a/asm4/src/org/objectweb/asm/Label.java b/asm4/src/org/objectweb/asm/Label.java
deleted file mode 100644
index 1c4de30..0000000
--- a/asm4/src/org/objectweb/asm/Label.java
+++ /dev/null
@@ -1,560 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A label represents a position in the bytecode of a method. Labels are used
- * for jump, goto, and switch instructions, and for try catch blocks. A label
- * designates the <i>instruction</i> that is just after. Note however that there
- * can be other elements between a label and the instruction it designates (such
- * as other labels, stack map frames, line numbers, etc.).
- * 
- * @author Eric Bruneton
- */
-public class Label {
-
-    /**
-     * Indicates if this label is only used for debug attributes. Such a label
-     * is not the start of a basic block, the target of a jump instruction, or
-     * an exception handler. It can be safely ignored in control flow graph
-     * analysis algorithms (for optimization purposes).
-     */
-    static final int DEBUG = 1;
-
-    /**
-     * Indicates if the position of this label is known.
-     */
-    static final int RESOLVED = 2;
-
-    /**
-     * Indicates if this label has been updated, after instruction resizing.
-     */
-    static final int RESIZED = 4;
-
-    /**
-     * Indicates if this basic block has been pushed in the basic block stack.
-     * See {@link MethodWriter#visitMaxs visitMaxs}.
-     */
-    static final int PUSHED = 8;
-
-    /**
-     * Indicates if this label is the target of a jump instruction, or the start
-     * of an exception handler.
-     */
-    static final int TARGET = 16;
-
-    /**
-     * Indicates if a stack map frame must be stored for this label.
-     */
-    static final int STORE = 32;
-
-    /**
-     * Indicates if this label corresponds to a reachable basic block.
-     */
-    static final int REACHABLE = 64;
-
-    /**
-     * Indicates if this basic block ends with a JSR instruction.
-     */
-    static final int JSR = 128;
-
-    /**
-     * Indicates if this basic block ends with a RET instruction.
-     */
-    static final int RET = 256;
-
-    /**
-     * Indicates if this basic block is the start of a subroutine.
-     */
-    static final int SUBROUTINE = 512;
-
-    /**
-     * Indicates if this subroutine basic block has been visited by a
-     * visitSubroutine(null, ...) call.
-     */
-    static final int VISITED = 1024;
-
-    /**
-     * Indicates if this subroutine basic block has been visited by a
-     * visitSubroutine(!null, ...) call.
-     */
-    static final int VISITED2 = 2048;
-
-    /**
-     * Field used to associate user information to a label. Warning: this field
-     * is used by the ASM tree package. In order to use it with the ASM tree
-     * package you must override the
-     * {@link org.objectweb.asm.tree.MethodNode#getLabelNode} method.
-     */
-    public Object info;
-
-    /**
-     * Flags that indicate the status of this label.
-     * 
-     * @see #DEBUG
-     * @see #RESOLVED
-     * @see #RESIZED
-     * @see #PUSHED
-     * @see #TARGET
-     * @see #STORE
-     * @see #REACHABLE
-     * @see #JSR
-     * @see #RET
-     */
-    int status;
-
-    /**
-     * The line number corresponding to this label, if known.
-     */
-    int line;
-
-    /**
-     * The position of this label in the code, if known.
-     */
-    int position;
-
-    /**
-     * Number of forward references to this label, times two.
-     */
-    private int referenceCount;
-
-    /**
-     * Informations about forward references. Each forward reference is
-     * described by two consecutive integers in this array: the first one is the
-     * position of the first byte of the bytecode instruction that contains the
-     * forward reference, while the second is the position of the first byte of
-     * the forward reference itself. In fact the sign of the first integer
-     * indicates if this reference uses 2 or 4 bytes, and its absolute value
-     * gives the position of the bytecode instruction. This array is also used
-     * as a bitset to store the subroutines to which a basic block belongs. This
-     * information is needed in {@linked MethodWriter#visitMaxs}, after all
-     * forward references have been resolved. Hence the same array can be used
-     * for both purposes without problems.
-     */
-    private int[] srcAndRefPositions;
-
-    // ------------------------------------------------------------------------
-
-    /*
-     * Fields for the control flow and data flow graph analysis algorithms (used
-     * to compute the maximum stack size or the stack map frames). A control
-     * flow graph contains one node per "basic block", and one edge per "jump"
-     * from one basic block to another. Each node (i.e., each basic block) is
-     * represented by the Label object that corresponds to the first instruction
-     * of this basic block. Each node also stores the list of its successors in
-     * the graph, as a linked list of Edge objects.
-     * 
-     * The control flow analysis algorithms used to compute the maximum stack
-     * size or the stack map frames are similar and use two steps. The first
-     * step, during the visit of each instruction, builds information about the
-     * state of the local variables and the operand stack at the end of each
-     * basic block, called the "output frame", <i>relatively</i> to the frame
-     * state at the beginning of the basic block, which is called the "input
-     * frame", and which is <i>unknown</i> during this step. The second step, in
-     * {@link MethodWriter#visitMaxs}, is a fix point algorithm that computes
-     * information about the input frame of each basic block, from the input
-     * state of the first basic block (known from the method signature), and by
-     * the using the previously computed relative output frames.
-     * 
-     * The algorithm used to compute the maximum stack size only computes the
-     * relative output and absolute input stack heights, while the algorithm
-     * used to compute stack map frames computes relative output frames and
-     * absolute input frames.
-     */
-
-    /**
-     * Start of the output stack relatively to the input stack. The exact
-     * semantics of this field depends on the algorithm that is used.
-     * 
-     * When only the maximum stack size is computed, this field is the number of
-     * elements in the input stack.
-     * 
-     * When the stack map frames are completely computed, this field is the
-     * offset of the first output stack element relatively to the top of the
-     * input stack. This offset is always negative or null. A null offset means
-     * that the output stack must be appended to the input stack. A -n offset
-     * means that the first n output stack elements must replace the top n input
-     * stack elements, and that the other elements must be appended to the input
-     * stack.
-     */
-    int inputStackTop;
-
-    /**
-     * Maximum height reached by the output stack, relatively to the top of the
-     * input stack. This maximum is always positive or null.
-     */
-    int outputStackMax;
-
-    /**
-     * Information about the input and output stack map frames of this basic
-     * block. This field is only used when {@link ClassWriter#COMPUTE_FRAMES}
-     * option is used.
-     */
-    Frame frame;
-
-    /**
-     * The successor of this label, in the order they are visited. This linked
-     * list does not include labels used for debug info only. If
-     * {@link ClassWriter#COMPUTE_FRAMES} option is used then, in addition, it
-     * does not contain successive labels that denote the same bytecode position
-     * (in this case only the first label appears in this list).
-     */
-    Label successor;
-
-    /**
-     * The successors of this node in the control flow graph. These successors
-     * are stored in a linked list of {@link Edge Edge} objects, linked to each
-     * other by their {@link Edge#next} field.
-     */
-    Edge successors;
-
-    /**
-     * The next basic block in the basic block stack. This stack is used in the
-     * main loop of the fix point algorithm used in the second step of the
-     * control flow analysis algorithms. It is also used in
-     * {@link #visitSubroutine} to avoid using a recursive method.
-     * 
-     * @see MethodWriter#visitMaxs
-     */
-    Label next;
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new label.
-     */
-    public Label() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Methods to compute offsets and to manage forward references
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the offset corresponding to this label. This offset is computed
-     * from the start of the method's bytecode. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @return the offset corresponding to this label.
-     * @throws IllegalStateException
-     *             if this label is not resolved yet.
-     */
-    public int getOffset() {
-        if ((status & RESOLVED) == 0) {
-            throw new IllegalStateException(
-                    "Label offset position has not been resolved yet");
-        }
-        return position;
-    }
-
-    /**
-     * Puts a reference to this label in the bytecode of a method. If the
-     * position of the label is known, the offset is computed and written
-     * directly. Otherwise, a null offset is written and a new forward reference
-     * is declared for this label.
-     * 
-     * @param owner
-     *            the code writer that calls this method.
-     * @param out
-     *            the bytecode of the method.
-     * @param source
-     *            the position of first byte of the bytecode instruction that
-     *            contains this label.
-     * @param wideOffset
-     *            <tt>true</tt> if the reference must be stored in 4 bytes, or
-     *            <tt>false</tt> if it must be stored with 2 bytes.
-     * @throws IllegalArgumentException
-     *             if this label has not been created by the given code writer.
-     */
-    void put(final MethodWriter owner, final ByteVector out, final int source,
-            final boolean wideOffset) {
-        if ((status & RESOLVED) == 0) {
-            if (wideOffset) {
-                addReference(-1 - source, out.length);
-                out.putInt(-1);
-            } else {
-                addReference(source, out.length);
-                out.putShort(-1);
-            }
-        } else {
-            if (wideOffset) {
-                out.putInt(position - source);
-            } else {
-                out.putShort(position - source);
-            }
-        }
-    }
-
-    /**
-     * Adds a forward reference to this label. This method must be called only
-     * for a true forward reference, i.e. only if this label is not resolved
-     * yet. For backward references, the offset of the reference can be, and
-     * must be, computed and stored directly.
-     * 
-     * @param sourcePosition
-     *            the position of the referencing instruction. This position
-     *            will be used to compute the offset of this forward reference.
-     * @param referencePosition
-     *            the position where the offset for this forward reference must
-     *            be stored.
-     */
-    private void addReference(final int sourcePosition,
-            final int referencePosition) {
-        if (srcAndRefPositions == null) {
-            srcAndRefPositions = new int[6];
-        }
-        if (referenceCount >= srcAndRefPositions.length) {
-            int[] a = new int[srcAndRefPositions.length + 6];
-            System.arraycopy(srcAndRefPositions, 0, a, 0,
-                    srcAndRefPositions.length);
-            srcAndRefPositions = a;
-        }
-        srcAndRefPositions[referenceCount++] = sourcePosition;
-        srcAndRefPositions[referenceCount++] = referencePosition;
-    }
-
-    /**
-     * Resolves all forward references to this label. This method must be called
-     * when this label is added to the bytecode of the method, i.e. when its
-     * position becomes known. This method fills in the blanks that where left
-     * in the bytecode by each forward reference previously added to this label.
-     * 
-     * @param owner
-     *            the code writer that calls this method.
-     * @param position
-     *            the position of this label in the bytecode.
-     * @param data
-     *            the bytecode of the method.
-     * @return <tt>true</tt> if a blank that was left for this label was to
-     *         small to store the offset. In such a case the corresponding jump
-     *         instruction is replaced with a pseudo instruction (using unused
-     *         opcodes) using an unsigned two bytes offset. These pseudo
-     *         instructions will need to be replaced with true instructions with
-     *         wider offsets (4 bytes instead of 2). This is done in
-     *         {@link MethodWriter#resizeInstructions}.
-     * @throws IllegalArgumentException
-     *             if this label has already been resolved, or if it has not
-     *             been created by the given code writer.
-     */
-    boolean resolve(final MethodWriter owner, final int position,
-            final byte[] data) {
-        boolean needUpdate = false;
-        this.status |= RESOLVED;
-        this.position = position;
-        int i = 0;
-        while (i < referenceCount) {
-            int source = srcAndRefPositions[i++];
-            int reference = srcAndRefPositions[i++];
-            int offset;
-            if (source >= 0) {
-                offset = position - source;
-                if (offset < Short.MIN_VALUE || offset > Short.MAX_VALUE) {
-                    /*
-                     * changes the opcode of the jump instruction, in order to
-                     * be able to find it later (see resizeInstructions in
-                     * MethodWriter). These temporary opcodes are similar to
-                     * jump instruction opcodes, except that the 2 bytes offset
-                     * is unsigned (and can therefore represent values from 0 to
-                     * 65535, which is sufficient since the size of a method is
-                     * limited to 65535 bytes).
-                     */
-                    int opcode = data[reference - 1] & 0xFF;
-                    if (opcode <= Opcodes.JSR) {
-                        // changes IFEQ ... JSR to opcodes 202 to 217
-                        data[reference - 1] = (byte) (opcode + 49);
-                    } else {
-                        // changes IFNULL and IFNONNULL to opcodes 218 and 219
-                        data[reference - 1] = (byte) (opcode + 20);
-                    }
-                    needUpdate = true;
-                }
-                data[reference++] = (byte) (offset >>> 8);
-                data[reference] = (byte) offset;
-            } else {
-                offset = position + source + 1;
-                data[reference++] = (byte) (offset >>> 24);
-                data[reference++] = (byte) (offset >>> 16);
-                data[reference++] = (byte) (offset >>> 8);
-                data[reference] = (byte) offset;
-            }
-        }
-        return needUpdate;
-    }
-
-    /**
-     * Returns the first label of the series to which this label belongs. For an
-     * isolated label or for the first label in a series of successive labels,
-     * this method returns the label itself. For other labels it returns the
-     * first label of the series.
-     * 
-     * @return the first label of the series to which this label belongs.
-     */
-    Label getFirst() {
-        return !ClassReader.FRAMES || frame == null ? this : frame.owner;
-    }
-
-    // ------------------------------------------------------------------------
-    // Methods related to subroutines
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns true is this basic block belongs to the given subroutine.
-     * 
-     * @param id
-     *            a subroutine id.
-     * @return true is this basic block belongs to the given subroutine.
-     */
-    boolean inSubroutine(final long id) {
-        if ((status & Label.VISITED) != 0) {
-            return (srcAndRefPositions[(int) (id >>> 32)] & (int) id) != 0;
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if this basic block and the given one belong to a common
-     * subroutine.
-     * 
-     * @param block
-     *            another basic block.
-     * @return true if this basic block and the given one belong to a common
-     *         subroutine.
-     */
-    boolean inSameSubroutine(final Label block) {
-        if ((status & VISITED) == 0 || (block.status & VISITED) == 0) {
-            return false;
-        }
-        for (int i = 0; i < srcAndRefPositions.length; ++i) {
-            if ((srcAndRefPositions[i] & block.srcAndRefPositions[i]) != 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Marks this basic block as belonging to the given subroutine.
-     * 
-     * @param id
-     *            a subroutine id.
-     * @param nbSubroutines
-     *            the total number of subroutines in the method.
-     */
-    void addToSubroutine(final long id, final int nbSubroutines) {
-        if ((status & VISITED) == 0) {
-            status |= VISITED;
-            srcAndRefPositions = new int[(nbSubroutines - 1) / 32 + 1];
-        }
-        srcAndRefPositions[(int) (id >>> 32)] |= (int) id;
-    }
-
-    /**
-     * Finds the basic blocks that belong to a given subroutine, and marks these
-     * blocks as belonging to this subroutine. This method follows the control
-     * flow graph to find all the blocks that are reachable from the current
-     * block WITHOUT following any JSR target.
-     * 
-     * @param JSR
-     *            a JSR block that jumps to this subroutine. If this JSR is not
-     *            null it is added to the successor of the RET blocks found in
-     *            the subroutine.
-     * @param id
-     *            the id of this subroutine.
-     * @param nbSubroutines
-     *            the total number of subroutines in the method.
-     */
-    void visitSubroutine(final Label JSR, final long id, final int nbSubroutines) {
-        // user managed stack of labels, to avoid using a recursive method
-        // (recursivity can lead to stack overflow with very large methods)
-        Label stack = this;
-        while (stack != null) {
-            // removes a label l from the stack
-            Label l = stack;
-            stack = l.next;
-            l.next = null;
-
-            if (JSR != null) {
-                if ((l.status & VISITED2) != 0) {
-                    continue;
-                }
-                l.status |= VISITED2;
-                // adds JSR to the successors of l, if it is a RET block
-                if ((l.status & RET) != 0) {
-                    if (!l.inSameSubroutine(JSR)) {
-                        Edge e = new Edge();
-                        e.info = l.inputStackTop;
-                        e.successor = JSR.successors.successor;
-                        e.next = l.successors;
-                        l.successors = e;
-                    }
-                }
-            } else {
-                // if the l block already belongs to subroutine 'id', continue
-                if (l.inSubroutine(id)) {
-                    continue;
-                }
-                // marks the l block as belonging to subroutine 'id'
-                l.addToSubroutine(id, nbSubroutines);
-            }
-            // pushes each successor of l on the stack, except JSR targets
-            Edge e = l.successors;
-            while (e != null) {
-                // if the l block is a JSR block, then 'l.successors.next' leads
-                // to the JSR target (see {@link #visitJumpInsn}) and must
-                // therefore not be followed
-                if ((l.status & Label.JSR) == 0 || e != l.successors.next) {
-                    // pushes e.successor on the stack if it not already added
-                    if (e.successor.next == null) {
-                        e.successor.next = stack;
-                        stack = e.successor;
-                    }
-                }
-                e = e.next;
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Overriden Object methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns a string representation of this label.
-     * 
-     * @return a string representation of this label.
-     */
-    @Override
-    public String toString() {
-        return "L" + System.identityHashCode(this);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/MethodVisitor.java b/asm4/src/org/objectweb/asm/MethodVisitor.java
deleted file mode 100644
index bd26721..0000000
--- a/asm4/src/org/objectweb/asm/MethodVisitor.java
+++ /dev/null
@@ -1,662 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java method. The methods of this class must be called in
- * the following order: [ <tt>visitAnnotationDefault</tt> ] (
- * <tt>visitAnnotation</tt> | <tt>visitParameterAnnotation</tt> |
- * <tt>visitAttribute</tt> )* [ <tt>visitCode</tt> ( <tt>visitFrame</tt> |
- * <tt>visit</tt><i>X</i>Insn</tt> | <tt>visitLabel</tt> |
- * <tt>visitTryCatchBlock</tt> | <tt>visitLocalVariable</tt> |
- * <tt>visitLineNumber</tt> )* <tt>visitMaxs</tt> ] <tt>visitEnd</tt>. In
- * addition, the <tt>visit</tt><i>X</i>Insn</tt> and <tt>visitLabel</tt> methods
- * must be called in the sequential order of the bytecode instructions of the
- * visited code, <tt>visitTryCatchBlock</tt> must be called <i>before</i> the
- * labels passed as arguments have been visited, and the
- * <tt>visitLocalVariable</tt> and <tt>visitLineNumber</tt> methods must be
- * called <i>after</i> the labels passed as arguments have been visited.
- * 
- * @author Eric Bruneton
- */
-public abstract class MethodVisitor {
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * The method visitor to which this visitor must delegate method calls. May
-     * be null.
-     */
-    protected MethodVisitor mv;
-
-    /**
-     * Constructs a new {@link MethodVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public MethodVisitor(final int api) {
-        this(api, null);
-    }
-
-    /**
-     * Constructs a new {@link MethodVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param mv
-     *            the method visitor to which this visitor must delegate method
-     *            calls. May be null.
-     */
-    public MethodVisitor(final int api, final MethodVisitor mv) {
-        if (api != Opcodes.ASM4) {
-            throw new IllegalArgumentException();
-        }
-        this.api = api;
-        this.mv = mv;
-    }
-
-    // -------------------------------------------------------------------------
-    // Annotations and non standard attributes
-    // -------------------------------------------------------------------------
-
-    /**
-     * Visits the default value of this annotation interface method.
-     * 
-     * @return a visitor to the visit the actual default value of this
-     *         annotation interface method, or <tt>null</tt> if this visitor is
-     *         not interested in visiting this default value. The 'name'
-     *         parameters passed to the methods of this annotation visitor are
-     *         ignored. Moreover, exacly one visit method must be called on this
-     *         annotation visitor, followed by visitEnd.
-     */
-    public AnnotationVisitor visitAnnotationDefault() {
-        if (mv != null) {
-            return mv.visitAnnotationDefault();
-        }
-        return null;
-    }
-
-    /**
-     * Visits an annotation of this method.
-     * 
-     * @param desc
-     *            the class descriptor of the annotation class.
-     * @param visible
-     *            <tt>true</tt> if the annotation is visible at runtime.
-     * @return a visitor to visit the annotation values, or <tt>null</tt> if
-     *         this visitor is not interested in visiting this annotation.
-     */
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        if (mv != null) {
-            return mv.visitAnnotation(desc, visible);
-        }
-        return null;
-    }
-
-    /**
-     * Visits an annotation of a parameter this method.
-     * 
-     * @param parameter
-     *            the parameter index.
-     * @param desc
-     *            the class descriptor of the annotation class.
-     * @param visible
-     *            <tt>true</tt> if the annotation is visible at runtime.
-     * @return a visitor to visit the annotation values, or <tt>null</tt> if
-     *         this visitor is not interested in visiting this annotation.
-     */
-    public AnnotationVisitor visitParameterAnnotation(int parameter,
-            String desc, boolean visible) {
-        if (mv != null) {
-            return mv.visitParameterAnnotation(parameter, desc, visible);
-        }
-        return null;
-    }
-
-    /**
-     * Visits a non standard attribute of this method.
-     * 
-     * @param attr
-     *            an attribute.
-     */
-    public void visitAttribute(Attribute attr) {
-        if (mv != null) {
-            mv.visitAttribute(attr);
-        }
-    }
-
-    /**
-     * Starts the visit of the method's code, if any (i.e. non abstract method).
-     */
-    public void visitCode() {
-        if (mv != null) {
-            mv.visitCode();
-        }
-    }
-
-    /**
-     * Visits the current state of the local variables and operand stack
-     * elements. This method must(*) be called <i>just before</i> any
-     * instruction <b>i</b> that follows an unconditional branch instruction
-     * such as GOTO or THROW, that is the target of a jump instruction, or that
-     * starts an exception handler block. The visited types must describe the
-     * values of the local variables and of the operand stack elements <i>just
-     * before</i> <b>i</b> is executed.<br>
-     * <br>
-     * (*) this is mandatory only for classes whose version is greater than or
-     * equal to {@link Opcodes#V1_6 V1_6}. <br>
-     * <br>
-     * The frames of a method must be given either in expanded form, or in
-     * compressed form (all frames must use the same format, i.e. you must not
-     * mix expanded and compressed frames within a single method):
-     * <ul>
-     * <li>In expanded form, all frames must have the F_NEW type.</li>
-     * <li>In compressed form, frames are basically "deltas" from the state of
-     * the previous frame:
-     * <ul>
-     * <li>{@link Opcodes#F_SAME} representing frame with exactly the same
-     * locals as the previous frame and with the empty stack.</li>
-     * <li>{@link Opcodes#F_SAME1} representing frame with exactly the same
-     * locals as the previous frame and with single value on the stack (
-     * <code>nStack</code> is 1 and <code>stack[0]</code> contains value for the
-     * type of the stack item).</li>
-     * <li>{@link Opcodes#F_APPEND} representing frame with current locals are
-     * the same as the locals in the previous frame, except that additional
-     * locals are defined (<code>nLocal</code> is 1, 2 or 3 and
-     * <code>local</code> elements contains values representing added types).</li>
-     * <li>{@link Opcodes#F_CHOP} representing frame with current locals are the
-     * same as the locals in the previous frame, except that the last 1-3 locals
-     * are absent and with the empty stack (<code>nLocals</code> is 1, 2 or 3).</li>
-     * <li>{@link Opcodes#F_FULL} representing complete frame data.</li></li>
-     * </ul>
-     * </ul> <br>
-     * In both cases the first frame, corresponding to the method's parameters
-     * and access flags, is implicit and must not be visited. Also, it is
-     * illegal to visit two or more frames for the same code location (i.e., at
-     * least one instruction must be visited between two calls to visitFrame).
-     * 
-     * @param type
-     *            the type of this stack map frame. Must be
-     *            {@link Opcodes#F_NEW} for expanded frames, or
-     *            {@link Opcodes#F_FULL}, {@link Opcodes#F_APPEND},
-     *            {@link Opcodes#F_CHOP}, {@link Opcodes#F_SAME} or
-     *            {@link Opcodes#F_APPEND}, {@link Opcodes#F_SAME1} for
-     *            compressed frames.
-     * @param nLocal
-     *            the number of local variables in the visited frame.
-     * @param local
-     *            the local variable types in this frame. This array must not be
-     *            modified. Primitive types are represented by
-     *            {@link Opcodes#TOP}, {@link Opcodes#INTEGER},
-     *            {@link Opcodes#FLOAT}, {@link Opcodes#LONG},
-     *            {@link Opcodes#DOUBLE},{@link Opcodes#NULL} or
-     *            {@link Opcodes#UNINITIALIZED_THIS} (long and double are
-     *            represented by a single element). Reference types are
-     *            represented by String objects (representing internal names),
-     *            and uninitialized types by Label objects (this label
-     *            designates the NEW instruction that created this uninitialized
-     *            value).
-     * @param nStack
-     *            the number of operand stack elements in the visited frame.
-     * @param stack
-     *            the operand stack types in this frame. This array must not be
-     *            modified. Its content has the same format as the "local"
-     *            array.
-     * @throws IllegalStateException
-     *             if a frame is visited just after another one, without any
-     *             instruction between the two (unless this frame is a
-     *             Opcodes#F_SAME frame, in which case it is silently ignored).
-     */
-    public void visitFrame(int type, int nLocal, Object[] local, int nStack,
-            Object[] stack) {
-        if (mv != null) {
-            mv.visitFrame(type, nLocal, local, nStack, stack);
-        }
-    }
-
-    // -------------------------------------------------------------------------
-    // Normal instructions
-    // -------------------------------------------------------------------------
-
-    /**
-     * Visits a zero operand instruction.
-     * 
-     * @param opcode
-     *            the opcode of the instruction to be visited. This opcode is
-     *            either NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1,
-     *            ICONST_2, ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1,
-     *            FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD,
-     *            LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD,
-     *            IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE,
-     *            SASTORE, POP, POP2, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1,
-     *            DUP2_X2, SWAP, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB,
-     *            IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM,
-     *            FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL, LSHL, ISHR, LSHR,
-     *            IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, I2L, I2F, I2D,
-     *            L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S,
-     *            LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN, FRETURN,
-     *            DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW, MONITORENTER,
-     *            or MONITOREXIT.
-     */
-    public void visitInsn(int opcode) {
-        if (mv != null) {
-            mv.visitInsn(opcode);
-        }
-    }
-
-    /**
-     * Visits an instruction with a single int operand.
-     * 
-     * @param opcode
-     *            the opcode of the instruction to be visited. This opcode is
-     *            either BIPUSH, SIPUSH or NEWARRAY.
-     * @param operand
-     *            the operand of the instruction to be visited.<br>
-     *            When opcode is BIPUSH, operand value should be between
-     *            Byte.MIN_VALUE and Byte.MAX_VALUE.<br>
-     *            When opcode is SIPUSH, operand value should be between
-     *            Short.MIN_VALUE and Short.MAX_VALUE.<br>
-     *            When opcode is NEWARRAY, operand value should be one of
-     *            {@link Opcodes#T_BOOLEAN}, {@link Opcodes#T_CHAR},
-     *            {@link Opcodes#T_FLOAT}, {@link Opcodes#T_DOUBLE},
-     *            {@link Opcodes#T_BYTE}, {@link Opcodes#T_SHORT},
-     *            {@link Opcodes#T_INT} or {@link Opcodes#T_LONG}.
-     */
-    public void visitIntInsn(int opcode, int operand) {
-        if (mv != null) {
-            mv.visitIntInsn(opcode, operand);
-        }
-    }
-
-    /**
-     * Visits a local variable instruction. A local variable instruction is an
-     * instruction that loads or stores the value of a local variable.
-     * 
-     * @param opcode
-     *            the opcode of the local variable instruction to be visited.
-     *            This opcode is either ILOAD, LLOAD, FLOAD, DLOAD, ALOAD,
-     *            ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RET.
-     * @param var
-     *            the operand of the instruction to be visited. This operand is
-     *            the index of a local variable.
-     */
-    public void visitVarInsn(int opcode, int var) {
-        if (mv != null) {
-            mv.visitVarInsn(opcode, var);
-        }
-    }
-
-    /**
-     * Visits a type instruction. A type instruction is an instruction that
-     * takes the internal name of a class as parameter.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be visited. This opcode
-     *            is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.
-     * @param type
-     *            the operand of the instruction to be visited. This operand
-     *            must be the internal name of an object or array class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     */
-    public void visitTypeInsn(int opcode, String type) {
-        if (mv != null) {
-            mv.visitTypeInsn(opcode, type);
-        }
-    }
-
-    /**
-     * Visits a field instruction. A field instruction is an instruction that
-     * loads or stores the value of a field of an object.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be visited. This opcode
-     *            is either GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.
-     * @param owner
-     *            the internal name of the field's owner class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link Type Type}).
-     */
-    public void visitFieldInsn(int opcode, String owner, String name,
-            String desc) {
-        if (mv != null) {
-            mv.visitFieldInsn(opcode, owner, name, desc);
-        }
-    }
-
-    /**
-     * Visits a method instruction. A method instruction is an instruction that
-     * invokes a method.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be visited. This opcode
-     *            is either INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or
-     *            INVOKEINTERFACE.
-     * @param owner
-     *            the internal name of the method's owner class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     */
-    public void visitMethodInsn(int opcode, String owner, String name,
-            String desc) {
-        if (mv != null) {
-            mv.visitMethodInsn(opcode, owner, name, desc);
-        }
-    }
-
-    /**
-     * Visits an invokedynamic instruction.
-     * 
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the bootstrap method constant arguments. Each argument must be
-     *            an {@link Integer}, {@link Float}, {@link Long},
-     *            {@link Double}, {@link String}, {@link Type} or {@link Handle}
-     *            value. This method is allowed to modify the content of the
-     *            array so a caller should expect that this array may change.
-     */
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        if (mv != null) {
-            mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        }
-    }
-
-    /**
-     * Visits a jump instruction. A jump instruction is an instruction that may
-     * jump to another instruction.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be visited. This opcode
-     *            is either IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ,
-     *            IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE,
-     *            IF_ACMPEQ, IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL.
-     * @param label
-     *            the operand of the instruction to be visited. This operand is
-     *            a label that designates the instruction to which the jump
-     *            instruction may jump.
-     */
-    public void visitJumpInsn(int opcode, Label label) {
-        if (mv != null) {
-            mv.visitJumpInsn(opcode, label);
-        }
-    }
-
-    /**
-     * Visits a label. A label designates the instruction that will be visited
-     * just after it.
-     * 
-     * @param label
-     *            a {@link Label Label} object.
-     */
-    public void visitLabel(Label label) {
-        if (mv != null) {
-            mv.visitLabel(label);
-        }
-    }
-
-    // -------------------------------------------------------------------------
-    // Special instructions
-    // -------------------------------------------------------------------------
-
-    /**
-     * Visits a LDC instruction. Note that new constant types may be added in
-     * future versions of the Java Virtual Machine. To easily detect new
-     * constant types, implementations of this method should check for
-     * unexpected constant types, like this:
-     * 
-     * <pre>
-     * if (cst instanceof Integer) {
-     *     // ...
-     * } else if (cst instanceof Float) {
-     *     // ...
-     * } else if (cst instanceof Long) {
-     *     // ...
-     * } else if (cst instanceof Double) {
-     *     // ...
-     * } else if (cst instanceof String) {
-     *     // ...
-     * } else if (cst instanceof Type) {
-     *     int sort = ((Type) cst).getSort();
-     *     if (sort == Type.OBJECT) {
-     *         // ...
-     *     } else if (sort == Type.ARRAY) {
-     *         // ...
-     *     } else if (sort == Type.METHOD) {
-     *         // ...
-     *     } else {
-     *         // throw an exception
-     *     }
-     * } else if (cst instanceof Handle) {
-     *     // ...
-     * } else {
-     *     // throw an exception
-     * }
-     * </pre>
-     * 
-     * @param cst
-     *            the constant to be loaded on the stack. This parameter must be
-     *            a non null {@link Integer}, a {@link Float}, a {@link Long}, a
-     *            {@link Double}, a {@link String}, a {@link Type} of OBJECT or
-     *            ARRAY sort for <tt>.class</tt> constants, for classes whose
-     *            version is 49.0, a {@link Type} of METHOD sort or a
-     *            {@link Handle} for MethodType and MethodHandle constants, for
-     *            classes whose version is 51.0.
-     */
-    public void visitLdcInsn(Object cst) {
-        if (mv != null) {
-            mv.visitLdcInsn(cst);
-        }
-    }
-
-    /**
-     * Visits an IINC instruction.
-     * 
-     * @param var
-     *            index of the local variable to be incremented.
-     * @param increment
-     *            amount to increment the local variable by.
-     */
-    public void visitIincInsn(int var, int increment) {
-        if (mv != null) {
-            mv.visitIincInsn(var, increment);
-        }
-    }
-
-    /**
-     * Visits a TABLESWITCH instruction.
-     * 
-     * @param min
-     *            the minimum key value.
-     * @param max
-     *            the maximum key value.
-     * @param dflt
-     *            beginning of the default handler block.
-     * @param labels
-     *            beginnings of the handler blocks. <tt>labels[i]</tt> is the
-     *            beginning of the handler block for the <tt>min + i</tt> key.
-     */
-    public void visitTableSwitchInsn(int min, int max, Label dflt,
-            Label... labels) {
-        if (mv != null) {
-            mv.visitTableSwitchInsn(min, max, dflt, labels);
-        }
-    }
-
-    /**
-     * Visits a LOOKUPSWITCH instruction.
-     * 
-     * @param dflt
-     *            beginning of the default handler block.
-     * @param keys
-     *            the values of the keys.
-     * @param labels
-     *            beginnings of the handler blocks. <tt>labels[i]</tt> is the
-     *            beginning of the handler block for the <tt>keys[i]</tt> key.
-     */
-    public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
-        if (mv != null) {
-            mv.visitLookupSwitchInsn(dflt, keys, labels);
-        }
-    }
-
-    /**
-     * Visits a MULTIANEWARRAY instruction.
-     * 
-     * @param desc
-     *            an array type descriptor (see {@link Type Type}).
-     * @param dims
-     *            number of dimensions of the array to allocate.
-     */
-    public void visitMultiANewArrayInsn(String desc, int dims) {
-        if (mv != null) {
-            mv.visitMultiANewArrayInsn(desc, dims);
-        }
-    }
-
-    // -------------------------------------------------------------------------
-    // Exceptions table entries, debug information, max stack and max locals
-    // -------------------------------------------------------------------------
-
-    /**
-     * Visits a try catch block.
-     * 
-     * @param start
-     *            beginning of the exception handler's scope (inclusive).
-     * @param end
-     *            end of the exception handler's scope (exclusive).
-     * @param handler
-     *            beginning of the exception handler's code.
-     * @param type
-     *            internal name of the type of exceptions handled by the
-     *            handler, or <tt>null</tt> to catch any exceptions (for
-     *            "finally" blocks).
-     * @throws IllegalArgumentException
-     *             if one of the labels has already been visited by this visitor
-     *             (by the {@link #visitLabel visitLabel} method).
-     */
-    public void visitTryCatchBlock(Label start, Label end, Label handler,
-            String type) {
-        if (mv != null) {
-            mv.visitTryCatchBlock(start, end, handler, type);
-        }
-    }
-
-    /**
-     * Visits a local variable declaration.
-     * 
-     * @param name
-     *            the name of a local variable.
-     * @param desc
-     *            the type descriptor of this local variable.
-     * @param signature
-     *            the type signature of this local variable. May be
-     *            <tt>null</tt> if the local variable type does not use generic
-     *            types.
-     * @param start
-     *            the first instruction corresponding to the scope of this local
-     *            variable (inclusive).
-     * @param end
-     *            the last instruction corresponding to the scope of this local
-     *            variable (exclusive).
-     * @param index
-     *            the local variable's index.
-     * @throws IllegalArgumentException
-     *             if one of the labels has not already been visited by this
-     *             visitor (by the {@link #visitLabel visitLabel} method).
-     */
-    public void visitLocalVariable(String name, String desc, String signature,
-            Label start, Label end, int index) {
-        if (mv != null) {
-            mv.visitLocalVariable(name, desc, signature, start, end, index);
-        }
-    }
-
-    /**
-     * Visits a line number declaration.
-     * 
-     * @param line
-     *            a line number. This number refers to the source file from
-     *            which the class was compiled.
-     * @param start
-     *            the first instruction corresponding to this line number.
-     * @throws IllegalArgumentException
-     *             if <tt>start</tt> has not already been visited by this
-     *             visitor (by the {@link #visitLabel visitLabel} method).
-     */
-    public void visitLineNumber(int line, Label start) {
-        if (mv != null) {
-            mv.visitLineNumber(line, start);
-        }
-    }
-
-    /**
-     * Visits the maximum stack size and the maximum number of local variables
-     * of the method.
-     * 
-     * @param maxStack
-     *            maximum stack size of the method.
-     * @param maxLocals
-     *            maximum number of local variables for the method.
-     */
-    public void visitMaxs(int maxStack, int maxLocals) {
-        if (mv != null) {
-            mv.visitMaxs(maxStack, maxLocals);
-        }
-    }
-
-    /**
-     * Visits the end of the method. This method, which is the last one to be
-     * called, is used to inform the visitor that all the annotations and
-     * attributes of the method have been visited.
-     */
-    public void visitEnd() {
-        if (mv != null) {
-            mv.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/MethodWriter.java b/asm4/src/org/objectweb/asm/MethodWriter.java
deleted file mode 100644
index ff03f19..0000000
--- a/asm4/src/org/objectweb/asm/MethodWriter.java
+++ /dev/null
@@ -1,2685 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * A {@link MethodVisitor} that generates methods in bytecode form. Each visit
- * method of this class appends the bytecode corresponding to the visited
- * instruction to a byte vector, in the order these methods are called.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-class MethodWriter extends MethodVisitor {
-
-    /**
-     * Pseudo access flag used to denote constructors.
-     */
-    static final int ACC_CONSTRUCTOR = 0x80000;
-    
-    /**
-     * Frame has exactly the same locals as the previous stack map frame and
-     * number of stack items is zero.
-     */
-    static final int SAME_FRAME = 0; // to 63 (0-3f)
-
-    /**
-     * Frame has exactly the same locals as the previous stack map frame and
-     * number of stack items is 1
-     */
-    static final int SAME_LOCALS_1_STACK_ITEM_FRAME = 64; // to 127 (40-7f)
-
-    /**
-     * Reserved for future use
-     */
-    static final int RESERVED = 128;
-
-    /**
-     * Frame has exactly the same locals as the previous stack map frame and
-     * number of stack items is 1. Offset is bigger then 63;
-     */
-    static final int SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED = 247; // f7
-
-    /**
-     * Frame where current locals are the same as the locals in the previous
-     * frame, except that the k last locals are absent. The value of k is given
-     * by the formula 251-frame_type.
-     */
-    static final int CHOP_FRAME = 248; // to 250 (f8-fA)
-
-    /**
-     * Frame has exactly the same locals as the previous stack map frame and
-     * number of stack items is zero. Offset is bigger then 63;
-     */
-    static final int SAME_FRAME_EXTENDED = 251; // fb
-
-    /**
-     * Frame where current locals are the same as the locals in the previous
-     * frame, except that k additional locals are defined. The value of k is
-     * given by the formula frame_type-251.
-     */
-    static final int APPEND_FRAME = 252; // to 254 // fc-fe
-
-    /**
-     * Full frame
-     */
-    static final int FULL_FRAME = 255; // ff
-
-    /**
-     * Indicates that the stack map frames must be recomputed from scratch. In
-     * this case the maximum stack size and number of local variables is also
-     * recomputed from scratch.
-     * 
-     * @see #compute
-     */
-    private static final int FRAMES = 0;
-
-    /**
-     * Indicates that the maximum stack size and number of local variables must
-     * be automatically computed.
-     * 
-     * @see #compute
-     */
-    private static final int MAXS = 1;
-
-    /**
-     * Indicates that nothing must be automatically computed.
-     * 
-     * @see #compute
-     */
-    private static final int NOTHING = 2;
-
-    /**
-     * The class writer to which this method must be added.
-     */
-    final ClassWriter cw;
-
-    /**
-     * Access flags of this method.
-     */
-    private int access;
-
-    /**
-     * The index of the constant pool item that contains the name of this
-     * method.
-     */
-    private final int name;
-
-    /**
-     * The index of the constant pool item that contains the descriptor of this
-     * method.
-     */
-    private final int desc;
-
-    /**
-     * The descriptor of this method.
-     */
-    private final String descriptor;
-
-    /**
-     * The signature of this method.
-     */
-    String signature;
-
-    /**
-     * If not zero, indicates that the code of this method must be copied from
-     * the ClassReader associated to this writer in <code>cw.cr</code>. More
-     * precisely, this field gives the index of the first byte to copied from
-     * <code>cw.cr.b</code>.
-     */
-    int classReaderOffset;
-
-    /**
-     * If not zero, indicates that the code of this method must be copied from
-     * the ClassReader associated to this writer in <code>cw.cr</code>. More
-     * precisely, this field gives the number of bytes to copied from
-     * <code>cw.cr.b</code>.
-     */
-    int classReaderLength;
-
-    /**
-     * Number of exceptions that can be thrown by this method.
-     */
-    int exceptionCount;
-
-    /**
-     * The exceptions that can be thrown by this method. More precisely, this
-     * array contains the indexes of the constant pool items that contain the
-     * internal names of these exception classes.
-     */
-    int[] exceptions;
-
-    /**
-     * The annotation default attribute of this method. May be <tt>null</tt>.
-     */
-    private ByteVector annd;
-
-    /**
-     * The runtime visible annotations of this method. May be <tt>null</tt>.
-     */
-    private AnnotationWriter anns;
-
-    /**
-     * The runtime invisible annotations of this method. May be <tt>null</tt>.
-     */
-    private AnnotationWriter ianns;
-
-    /**
-     * The runtime visible parameter annotations of this method. May be
-     * <tt>null</tt>.
-     */
-    private AnnotationWriter[] panns;
-
-    /**
-     * The runtime invisible parameter annotations of this method. May be
-     * <tt>null</tt>.
-     */
-    private AnnotationWriter[] ipanns;
-
-    /**
-     * The number of synthetic parameters of this method.
-     */
-    private int synthetics;
-
-    /**
-     * The non standard attributes of the method.
-     */
-    private Attribute attrs;
-
-    /**
-     * The bytecode of this method.
-     */
-    private ByteVector code = new ByteVector();
-
-    /**
-     * Maximum stack size of this method.
-     */
-    private int maxStack;
-
-    /**
-     * Maximum number of local variables for this method.
-     */
-    private int maxLocals;
-
-    /**
-     * Number of local variables in the current stack map frame.
-     */
-    private int currentLocals;
-
-    /**
-     * Number of stack map frames in the StackMapTable attribute.
-     */
-    private int frameCount;
-
-    /**
-     * The StackMapTable attribute.
-     */
-    private ByteVector stackMap;
-
-    /**
-     * The offset of the last frame that was written in the StackMapTable
-     * attribute.
-     */
-    private int previousFrameOffset;
-
-    /**
-     * The last frame that was written in the StackMapTable attribute.
-     * 
-     * @see #frame
-     */
-    private int[] previousFrame;
-
-    /**
-     * The current stack map frame. The first element contains the offset of the
-     * instruction to which the frame corresponds, the second element is the
-     * number of locals and the third one is the number of stack elements. The
-     * local variables start at index 3 and are followed by the operand stack
-     * values. In summary frame[0] = offset, frame[1] = nLocal, frame[2] =
-     * nStack, frame[3] = nLocal. All types are encoded as integers, with the
-     * same format as the one used in {@link Label}, but limited to BASE types.
-     */
-    private int[] frame;
-
-    /**
-     * Number of elements in the exception handler list.
-     */
-    private int handlerCount;
-
-    /**
-     * The first element in the exception handler list.
-     */
-    private Handler firstHandler;
-
-    /**
-     * The last element in the exception handler list.
-     */
-    private Handler lastHandler;
-
-    /**
-     * Number of entries in the LocalVariableTable attribute.
-     */
-    private int localVarCount;
-
-    /**
-     * The LocalVariableTable attribute.
-     */
-    private ByteVector localVar;
-
-    /**
-     * Number of entries in the LocalVariableTypeTable attribute.
-     */
-    private int localVarTypeCount;
-
-    /**
-     * The LocalVariableTypeTable attribute.
-     */
-    private ByteVector localVarType;
-
-    /**
-     * Number of entries in the LineNumberTable attribute.
-     */
-    private int lineNumberCount;
-
-    /**
-     * The LineNumberTable attribute.
-     */
-    private ByteVector lineNumber;
-
-    /**
-     * The non standard attributes of the method's code.
-     */
-    private Attribute cattrs;
-
-    /**
-     * Indicates if some jump instructions are too small and need to be resized.
-     */
-    private boolean resize;
-
-    /**
-     * The number of subroutines in this method.
-     */
-    private int subroutines;
-
-    // ------------------------------------------------------------------------
-
-    /*
-     * Fields for the control flow graph analysis algorithm (used to compute the
-     * maximum stack size). A control flow graph contains one node per "basic
-     * block", and one edge per "jump" from one basic block to another. Each
-     * node (i.e., each basic block) is represented by the Label object that
-     * corresponds to the first instruction of this basic block. Each node also
-     * stores the list of its successors in the graph, as a linked list of Edge
-     * objects.
-     */
-
-    /**
-     * Indicates what must be automatically computed.
-     * 
-     * @see #FRAMES
-     * @see #MAXS
-     * @see #NOTHING
-     */
-    private final int compute;
-
-    /**
-     * A list of labels. This list is the list of basic blocks in the method,
-     * i.e. a list of Label objects linked to each other by their
-     * {@link Label#successor} field, in the order they are visited by
-     * {@link MethodVisitor#visitLabel}, and starting with the first basic
-     * block.
-     */
-    private Label labels;
-
-    /**
-     * The previous basic block.
-     */
-    private Label previousBlock;
-
-    /**
-     * The current basic block.
-     */
-    private Label currentBlock;
-
-    /**
-     * The (relative) stack size after the last visited instruction. This size
-     * is relative to the beginning of the current basic block, i.e., the true
-     * stack size after the last visited instruction is equal to the
-     * {@link Label#inputStackTop beginStackSize} of the current basic block
-     * plus <tt>stackSize</tt>.
-     */
-    private int stackSize;
-
-    /**
-     * The (relative) maximum stack size after the last visited instruction.
-     * This size is relative to the beginning of the current basic block, i.e.,
-     * the true maximum stack size after the last visited instruction is equal
-     * to the {@link Label#inputStackTop beginStackSize} of the current basic
-     * block plus <tt>stackSize</tt>.
-     */
-    private int maxStackSize;
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link MethodWriter}.
-     * 
-     * @param cw
-     *            the class writer in which the method must be added.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt>.
-     * @param exceptions
-     *            the internal names of the method's exceptions. May be
-     *            <tt>null</tt>.
-     * @param computeMaxs
-     *            <tt>true</tt> if the maximum stack size and number of local
-     *            variables must be automatically computed.
-     * @param computeFrames
-     *            <tt>true</tt> if the stack map tables must be recomputed from
-     *            scratch.
-     */
-    MethodWriter(final ClassWriter cw, final int access, final String name,
-            final String desc, final String signature,
-            final String[] exceptions, final boolean computeMaxs,
-            final boolean computeFrames) {
-        super(Opcodes.ASM4);
-        if (cw.firstMethod == null) {
-            cw.firstMethod = this;
-        } else {
-            cw.lastMethod.mv = this;
-        }
-        cw.lastMethod = this;
-        this.cw = cw;
-        this.access = access;
-        if ("<init>".equals(name)) {
-            this.access |= ACC_CONSTRUCTOR;
-        }
-        this.name = cw.newUTF8(name);
-        this.desc = cw.newUTF8(desc);
-        this.descriptor = desc;
-        if (ClassReader.SIGNATURES) {
-            this.signature = signature;
-        }
-        if (exceptions != null && exceptions.length > 0) {
-            exceptionCount = exceptions.length;
-            this.exceptions = new int[exceptionCount];
-            for (int i = 0; i < exceptionCount; ++i) {
-                this.exceptions[i] = cw.newClass(exceptions[i]);
-            }
-        }
-        this.compute = computeFrames ? FRAMES : (computeMaxs ? MAXS : NOTHING);
-        if (computeMaxs || computeFrames) {
-            // updates maxLocals
-            int size = Type.getArgumentsAndReturnSizes(descriptor) >> 2;
-            if ((access & Opcodes.ACC_STATIC) != 0) {
-                --size;
-            }
-            maxLocals = size;
-            currentLocals = size;
-            // creates and visits the label for the first basic block
-            labels = new Label();
-            labels.status |= Label.PUSHED;
-            visitLabel(labels);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the MethodVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        if (!ClassReader.ANNOTATIONS) {
-            return null;
-        }
-        annd = new ByteVector();
-        return new AnnotationWriter(cw, false, annd, null, 0);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        if (!ClassReader.ANNOTATIONS) {
-            return null;
-        }
-        ByteVector bv = new ByteVector();
-        // write type, and reserve space for values count
-        bv.putShort(cw.newUTF8(desc)).putShort(0);
-        AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
-        if (visible) {
-            aw.next = anns;
-            anns = aw;
-        } else {
-            aw.next = ianns;
-            ianns = aw;
-        }
-        return aw;
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        if (!ClassReader.ANNOTATIONS) {
-            return null;
-        }
-        ByteVector bv = new ByteVector();
-        if ("Ljava/lang/Synthetic;".equals(desc)) {
-            // workaround for a bug in javac with synthetic parameters
-            // see ClassReader.readParameterAnnotations
-            synthetics = Math.max(synthetics, parameter + 1);
-            return new AnnotationWriter(cw, false, bv, null, 0);
-        }
-        // write type, and reserve space for values count
-        bv.putShort(cw.newUTF8(desc)).putShort(0);
-        AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
-        if (visible) {
-            if (panns == null) {
-                panns = new AnnotationWriter[Type.getArgumentTypes(descriptor).length];
-            }
-            aw.next = panns[parameter];
-            panns[parameter] = aw;
-        } else {
-            if (ipanns == null) {
-                ipanns = new AnnotationWriter[Type.getArgumentTypes(descriptor).length];
-            }
-            aw.next = ipanns[parameter];
-            ipanns[parameter] = aw;
-        }
-        return aw;
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        if (attr.isCodeAttribute()) {
-            attr.next = cattrs;
-            cattrs = attr;
-        } else {
-            attr.next = attrs;
-            attrs = attr;
-        }
-    }
-
-    @Override
-    public void visitCode() {
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        if (!ClassReader.FRAMES || compute == FRAMES) {
-            return;
-        }
-
-        if (type == Opcodes.F_NEW) {
-            if (previousFrame == null) {
-                visitImplicitFirstFrame();
-            }
-            currentLocals = nLocal;
-            int frameIndex = startFrame(code.length, nLocal, nStack);
-            for (int i = 0; i < nLocal; ++i) {
-                if (local[i] instanceof String) {
-                    frame[frameIndex++] = Frame.OBJECT
-                            | cw.addType((String) local[i]);
-                } else if (local[i] instanceof Integer) {
-                    frame[frameIndex++] = ((Integer) local[i]).intValue();
-                } else {
-                    frame[frameIndex++] = Frame.UNINITIALIZED
-                            | cw.addUninitializedType("",
-                                    ((Label) local[i]).position);
-                }
-            }
-            for (int i = 0; i < nStack; ++i) {
-                if (stack[i] instanceof String) {
-                    frame[frameIndex++] = Frame.OBJECT
-                            | cw.addType((String) stack[i]);
-                } else if (stack[i] instanceof Integer) {
-                    frame[frameIndex++] = ((Integer) stack[i]).intValue();
-                } else {
-                    frame[frameIndex++] = Frame.UNINITIALIZED
-                            | cw.addUninitializedType("",
-                                    ((Label) stack[i]).position);
-                }
-            }
-            endFrame();
-        } else {
-            int delta;
-            if (stackMap == null) {
-                stackMap = new ByteVector();
-                delta = code.length;
-            } else {
-                delta = code.length - previousFrameOffset - 1;
-                if (delta < 0) {
-                    if (type == Opcodes.F_SAME) {
-                        return;
-                    } else {
-                        throw new IllegalStateException();
-                    }
-                }
-            }
-
-            switch (type) {
-            case Opcodes.F_FULL:
-                currentLocals = nLocal;
-                stackMap.putByte(FULL_FRAME).putShort(delta).putShort(nLocal);
-                for (int i = 0; i < nLocal; ++i) {
-                    writeFrameType(local[i]);
-                }
-                stackMap.putShort(nStack);
-                for (int i = 0; i < nStack; ++i) {
-                    writeFrameType(stack[i]);
-                }
-                break;
-            case Opcodes.F_APPEND:
-                currentLocals += nLocal;
-                stackMap.putByte(SAME_FRAME_EXTENDED + nLocal).putShort(delta);
-                for (int i = 0; i < nLocal; ++i) {
-                    writeFrameType(local[i]);
-                }
-                break;
-            case Opcodes.F_CHOP:
-                currentLocals -= nLocal;
-                stackMap.putByte(SAME_FRAME_EXTENDED - nLocal).putShort(delta);
-                break;
-            case Opcodes.F_SAME:
-                if (delta < 64) {
-                    stackMap.putByte(delta);
-                } else {
-                    stackMap.putByte(SAME_FRAME_EXTENDED).putShort(delta);
-                }
-                break;
-            case Opcodes.F_SAME1:
-                if (delta < 64) {
-                    stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME + delta);
-                } else {
-                    stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED)
-                            .putShort(delta);
-                }
-                writeFrameType(stack[0]);
-                break;
-            }
-
-            previousFrameOffset = code.length;
-            ++frameCount;
-        }
-
-        maxStack = Math.max(maxStack, nStack);
-        maxLocals = Math.max(maxLocals, currentLocals);
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        // adds the instruction to the bytecode of the method
-        code.putByte(opcode);
-        // update currentBlock
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, 0, null, null);
-            } else {
-                // updates current and max stack sizes
-                int size = stackSize + Frame.SIZE[opcode];
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-            // if opcode == ATHROW or xRETURN, ends current block (no successor)
-            if ((opcode >= Opcodes.IRETURN && opcode <= Opcodes.RETURN)
-                    || opcode == Opcodes.ATHROW) {
-                noSuccessor();
-            }
-        }
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, operand, null, null);
-            } else if (opcode != Opcodes.NEWARRAY) {
-                // updates current and max stack sizes only for NEWARRAY
-                // (stack size variation = 0 for BIPUSH or SIPUSH)
-                int size = stackSize + 1;
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        if (opcode == Opcodes.SIPUSH) {
-            code.put12(opcode, operand);
-        } else { // BIPUSH or NEWARRAY
-            code.put11(opcode, operand);
-        }
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, var, null, null);
-            } else {
-                // updates current and max stack sizes
-                if (opcode == Opcodes.RET) {
-                    // no stack change, but end of current block (no successor)
-                    currentBlock.status |= Label.RET;
-                    // save 'stackSize' here for future use
-                    // (see {@link #findSubroutineSuccessors})
-                    currentBlock.inputStackTop = stackSize;
-                    noSuccessor();
-                } else { // xLOAD or xSTORE
-                    int size = stackSize + Frame.SIZE[opcode];
-                    if (size > maxStackSize) {
-                        maxStackSize = size;
-                    }
-                    stackSize = size;
-                }
-            }
-        }
-        if (compute != NOTHING) {
-            // updates max locals
-            int n;
-            if (opcode == Opcodes.LLOAD || opcode == Opcodes.DLOAD
-                    || opcode == Opcodes.LSTORE || opcode == Opcodes.DSTORE) {
-                n = var + 2;
-            } else {
-                n = var + 1;
-            }
-            if (n > maxLocals) {
-                maxLocals = n;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        if (var < 4 && opcode != Opcodes.RET) {
-            int opt;
-            if (opcode < Opcodes.ISTORE) {
-                /* ILOAD_0 */
-                opt = 26 + ((opcode - Opcodes.ILOAD) << 2) + var;
-            } else {
-                /* ISTORE_0 */
-                opt = 59 + ((opcode - Opcodes.ISTORE) << 2) + var;
-            }
-            code.putByte(opt);
-        } else if (var >= 256) {
-            code.putByte(196 /* WIDE */).put12(opcode, var);
-        } else {
-            code.put11(opcode, var);
-        }
-        if (opcode >= Opcodes.ISTORE && compute == FRAMES && handlerCount > 0) {
-            visitLabel(new Label());
-        }
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        Item i = cw.newClassItem(type);
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, code.length, cw, i);
-            } else if (opcode == Opcodes.NEW) {
-                // updates current and max stack sizes only if opcode == NEW
-                // (no stack change for ANEWARRAY, CHECKCAST, INSTANCEOF)
-                int size = stackSize + 1;
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        code.put12(opcode, i.index);
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        Item i = cw.newFieldItem(owner, name, desc);
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, 0, cw, i);
-            } else {
-                int size;
-                // computes the stack size variation
-                char c = desc.charAt(0);
-                switch (opcode) {
-                case Opcodes.GETSTATIC:
-                    size = stackSize + (c == 'D' || c == 'J' ? 2 : 1);
-                    break;
-                case Opcodes.PUTSTATIC:
-                    size = stackSize + (c == 'D' || c == 'J' ? -2 : -1);
-                    break;
-                case Opcodes.GETFIELD:
-                    size = stackSize + (c == 'D' || c == 'J' ? 1 : 0);
-                    break;
-                // case Constants.PUTFIELD:
-                default:
-                    size = stackSize + (c == 'D' || c == 'J' ? -3 : -2);
-                    break;
-                }
-                // updates current and max stack sizes
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        code.put12(opcode, i.index);
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        boolean itf = opcode == Opcodes.INVOKEINTERFACE;
-        Item i = cw.newMethodItem(owner, name, desc, itf);
-        int argSize = i.intVal;
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, 0, cw, i);
-            } else {
-                /*
-                 * computes the stack size variation. In order not to recompute
-                 * several times this variation for the same Item, we use the
-                 * intVal field of this item to store this variation, once it
-                 * has been computed. More precisely this intVal field stores
-                 * the sizes of the arguments and of the return value
-                 * corresponding to desc.
-                 */
-                if (argSize == 0) {
-                    // the above sizes have not been computed yet,
-                    // so we compute them...
-                    argSize = Type.getArgumentsAndReturnSizes(desc);
-                    // ... and we save them in order
-                    // not to recompute them in the future
-                    i.intVal = argSize;
-                }
-                int size;
-                if (opcode == Opcodes.INVOKESTATIC) {
-                    size = stackSize - (argSize >> 2) + (argSize & 0x03) + 1;
-                } else {
-                    size = stackSize - (argSize >> 2) + (argSize & 0x03);
-                }
-                // updates current and max stack sizes
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        if (itf) {
-            if (argSize == 0) {
-                argSize = Type.getArgumentsAndReturnSizes(desc);
-                i.intVal = argSize;
-            }
-            code.put12(Opcodes.INVOKEINTERFACE, i.index).put11(argSize >> 2, 0);
-        } else {
-            code.put12(opcode, i.index);
-        }
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(final String name, final String desc,
-            final Handle bsm, final Object... bsmArgs) {
-        Item i = cw.newInvokeDynamicItem(name, desc, bsm, bsmArgs);
-        int argSize = i.intVal;
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(Opcodes.INVOKEDYNAMIC, 0, cw, i);
-            } else {
-                /*
-                 * computes the stack size variation. In order not to recompute
-                 * several times this variation for the same Item, we use the
-                 * intVal field of this item to store this variation, once it
-                 * has been computed. More precisely this intVal field stores
-                 * the sizes of the arguments and of the return value
-                 * corresponding to desc.
-                 */
-                if (argSize == 0) {
-                    // the above sizes have not been computed yet,
-                    // so we compute them...
-                    argSize = Type.getArgumentsAndReturnSizes(desc);
-                    // ... and we save them in order
-                    // not to recompute them in the future
-                    i.intVal = argSize;
-                }
-                int size = stackSize - (argSize >> 2) + (argSize & 0x03) + 1;
-
-                // updates current and max stack sizes
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        code.put12(Opcodes.INVOKEDYNAMIC, i.index);
-        code.putShort(0);
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        Label nextInsn = null;
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(opcode, 0, null, null);
-                // 'label' is the target of a jump instruction
-                label.getFirst().status |= Label.TARGET;
-                // adds 'label' as a successor of this basic block
-                addSuccessor(Edge.NORMAL, label);
-                if (opcode != Opcodes.GOTO) {
-                    // creates a Label for the next basic block
-                    nextInsn = new Label();
-                }
-            } else {
-                if (opcode == Opcodes.JSR) {
-                    if ((label.status & Label.SUBROUTINE) == 0) {
-                        label.status |= Label.SUBROUTINE;
-                        ++subroutines;
-                    }
-                    currentBlock.status |= Label.JSR;
-                    addSuccessor(stackSize + 1, label);
-                    // creates a Label for the next basic block
-                    nextInsn = new Label();
-                    /*
-                     * note that, by construction in this method, a JSR block
-                     * has at least two successors in the control flow graph:
-                     * the first one leads the next instruction after the JSR,
-                     * while the second one leads to the JSR target.
-                     */
-                } else {
-                    // updates current stack size (max stack size unchanged
-                    // because stack size variation always negative in this
-                    // case)
-                    stackSize += Frame.SIZE[opcode];
-                    addSuccessor(stackSize, label);
-                }
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        if ((label.status & Label.RESOLVED) != 0
-                && label.position - code.length < Short.MIN_VALUE) {
-            /*
-             * case of a backward jump with an offset < -32768. In this case we
-             * automatically replace GOTO with GOTO_W, JSR with JSR_W and IFxxx
-             * <l> with IFNOTxxx <l'> GOTO_W <l>, where IFNOTxxx is the
-             * "opposite" opcode of IFxxx (i.e., IFNE for IFEQ) and where <l'>
-             * designates the instruction just after the GOTO_W.
-             */
-            if (opcode == Opcodes.GOTO) {
-                code.putByte(200); // GOTO_W
-            } else if (opcode == Opcodes.JSR) {
-                code.putByte(201); // JSR_W
-            } else {
-                // if the IF instruction is transformed into IFNOT GOTO_W the
-                // next instruction becomes the target of the IFNOT instruction
-                if (nextInsn != null) {
-                    nextInsn.status |= Label.TARGET;
-                }
-                code.putByte(opcode <= 166 ? ((opcode + 1) ^ 1) - 1
-                        : opcode ^ 1);
-                code.putShort(8); // jump offset
-                code.putByte(200); // GOTO_W
-            }
-            label.put(this, code, code.length - 1, true);
-        } else {
-            /*
-             * case of a backward jump with an offset >= -32768, or of a forward
-             * jump with, of course, an unknown offset. In these cases we store
-             * the offset in 2 bytes (which will be increased in
-             * resizeInstructions, if needed).
-             */
-            code.putByte(opcode);
-            label.put(this, code, code.length - 1, false);
-        }
-        if (currentBlock != null) {
-            if (nextInsn != null) {
-                // if the jump instruction is not a GOTO, the next instruction
-                // is also a successor of this instruction. Calling visitLabel
-                // adds the label of this next instruction as a successor of the
-                // current block, and starts a new basic block
-                visitLabel(nextInsn);
-            }
-            if (opcode == Opcodes.GOTO) {
-                noSuccessor();
-            }
-        }
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        // resolves previous forward references to label, if any
-        resize |= label.resolve(this, code.length, code.data);
-        // updates currentBlock
-        if ((label.status & Label.DEBUG) != 0) {
-            return;
-        }
-        if (compute == FRAMES) {
-            if (currentBlock != null) {
-                if (label.position == currentBlock.position) {
-                    // successive labels, do not start a new basic block
-                    currentBlock.status |= (label.status & Label.TARGET);
-                    label.frame = currentBlock.frame;
-                    return;
-                }
-                // ends current block (with one new successor)
-                addSuccessor(Edge.NORMAL, label);
-            }
-            // begins a new current block
-            currentBlock = label;
-            if (label.frame == null) {
-                label.frame = new Frame();
-                label.frame.owner = label;
-            }
-            // updates the basic block list
-            if (previousBlock != null) {
-                if (label.position == previousBlock.position) {
-                    previousBlock.status |= (label.status & Label.TARGET);
-                    label.frame = previousBlock.frame;
-                    currentBlock = previousBlock;
-                    return;
-                }
-                previousBlock.successor = label;
-            }
-            previousBlock = label;
-        } else if (compute == MAXS) {
-            if (currentBlock != null) {
-                // ends current block (with one new successor)
-                currentBlock.outputStackMax = maxStackSize;
-                addSuccessor(stackSize, label);
-            }
-            // begins a new current block
-            currentBlock = label;
-            // resets the relative current and max stack sizes
-            stackSize = 0;
-            maxStackSize = 0;
-            // updates the basic block list
-            if (previousBlock != null) {
-                previousBlock.successor = label;
-            }
-            previousBlock = label;
-        }
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        Item i = cw.newConstItem(cst);
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(Opcodes.LDC, 0, cw, i);
-            } else {
-                int size;
-                // computes the stack size variation
-                if (i.type == ClassWriter.LONG || i.type == ClassWriter.DOUBLE) {
-                    size = stackSize + 2;
-                } else {
-                    size = stackSize + 1;
-                }
-                // updates current and max stack sizes
-                if (size > maxStackSize) {
-                    maxStackSize = size;
-                }
-                stackSize = size;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        int index = i.index;
-        if (i.type == ClassWriter.LONG || i.type == ClassWriter.DOUBLE) {
-            code.put12(20 /* LDC2_W */, index);
-        } else if (index >= 256) {
-            code.put12(19 /* LDC_W */, index);
-        } else {
-            code.put11(Opcodes.LDC, index);
-        }
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(Opcodes.IINC, var, null, null);
-            }
-        }
-        if (compute != NOTHING) {
-            // updates max locals
-            int n = var + 1;
-            if (n > maxLocals) {
-                maxLocals = n;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        if ((var > 255) || (increment > 127) || (increment < -128)) {
-            code.putByte(196 /* WIDE */).put12(Opcodes.IINC, var)
-                    .putShort(increment);
-        } else {
-            code.putByte(Opcodes.IINC).put11(var, increment);
-        }
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        // adds the instruction to the bytecode of the method
-        int source = code.length;
-        code.putByte(Opcodes.TABLESWITCH);
-        code.putByteArray(null, 0, (4 - code.length % 4) % 4);
-        dflt.put(this, code, source, true);
-        code.putInt(min).putInt(max);
-        for (int i = 0; i < labels.length; ++i) {
-            labels[i].put(this, code, source, true);
-        }
-        // updates currentBlock
-        visitSwitchInsn(dflt, labels);
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        // adds the instruction to the bytecode of the method
-        int source = code.length;
-        code.putByte(Opcodes.LOOKUPSWITCH);
-        code.putByteArray(null, 0, (4 - code.length % 4) % 4);
-        dflt.put(this, code, source, true);
-        code.putInt(labels.length);
-        for (int i = 0; i < labels.length; ++i) {
-            code.putInt(keys[i]);
-            labels[i].put(this, code, source, true);
-        }
-        // updates currentBlock
-        visitSwitchInsn(dflt, labels);
-    }
-
-    private void visitSwitchInsn(final Label dflt, final Label[] labels) {
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(Opcodes.LOOKUPSWITCH, 0, null, null);
-                // adds current block successors
-                addSuccessor(Edge.NORMAL, dflt);
-                dflt.getFirst().status |= Label.TARGET;
-                for (int i = 0; i < labels.length; ++i) {
-                    addSuccessor(Edge.NORMAL, labels[i]);
-                    labels[i].getFirst().status |= Label.TARGET;
-                }
-            } else {
-                // updates current stack size (max stack size unchanged)
-                --stackSize;
-                // adds current block successors
-                addSuccessor(stackSize, dflt);
-                for (int i = 0; i < labels.length; ++i) {
-                    addSuccessor(stackSize, labels[i]);
-                }
-            }
-            // ends current block
-            noSuccessor();
-        }
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        Item i = cw.newClassItem(desc);
-        // Label currentBlock = this.currentBlock;
-        if (currentBlock != null) {
-            if (compute == FRAMES) {
-                currentBlock.frame.execute(Opcodes.MULTIANEWARRAY, dims, cw, i);
-            } else {
-                // updates current stack size (max stack size unchanged because
-                // stack size variation always negative or null)
-                stackSize += 1 - dims;
-            }
-        }
-        // adds the instruction to the bytecode of the method
-        code.put12(Opcodes.MULTIANEWARRAY, i.index).putByte(dims);
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        ++handlerCount;
-        Handler h = new Handler();
-        h.start = start;
-        h.end = end;
-        h.handler = handler;
-        h.desc = type;
-        h.type = type != null ? cw.newClass(type) : 0;
-        if (lastHandler == null) {
-            firstHandler = h;
-        } else {
-            lastHandler.next = h;
-        }
-        lastHandler = h;
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        if (signature != null) {
-            if (localVarType == null) {
-                localVarType = new ByteVector();
-            }
-            ++localVarTypeCount;
-            localVarType.putShort(start.position)
-                    .putShort(end.position - start.position)
-                    .putShort(cw.newUTF8(name)).putShort(cw.newUTF8(signature))
-                    .putShort(index);
-        }
-        if (localVar == null) {
-            localVar = new ByteVector();
-        }
-        ++localVarCount;
-        localVar.putShort(start.position)
-                .putShort(end.position - start.position)
-                .putShort(cw.newUTF8(name)).putShort(cw.newUTF8(desc))
-                .putShort(index);
-        if (compute != NOTHING) {
-            // updates max locals
-            char c = desc.charAt(0);
-            int n = index + (c == 'J' || c == 'D' ? 2 : 1);
-            if (n > maxLocals) {
-                maxLocals = n;
-            }
-        }
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        if (lineNumber == null) {
-            lineNumber = new ByteVector();
-        }
-        ++lineNumberCount;
-        lineNumber.putShort(start.position);
-        lineNumber.putShort(line);
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        if (ClassReader.FRAMES && compute == FRAMES) {
-            // completes the control flow graph with exception handler blocks
-            Handler handler = firstHandler;
-            while (handler != null) {
-                Label l = handler.start.getFirst();
-                Label h = handler.handler.getFirst();
-                Label e = handler.end.getFirst();
-                // computes the kind of the edges to 'h'
-                String t = handler.desc == null ? "java/lang/Throwable"
-                        : handler.desc;
-                int kind = Frame.OBJECT | cw.addType(t);
-                // h is an exception handler
-                h.status |= Label.TARGET;
-                // adds 'h' as a successor of labels between 'start' and 'end'
-                while (l != e) {
-                    // creates an edge to 'h'
-                    Edge b = new Edge();
-                    b.info = kind;
-                    b.successor = h;
-                    // adds it to the successors of 'l'
-                    b.next = l.successors;
-                    l.successors = b;
-                    // goes to the next label
-                    l = l.successor;
-                }
-                handler = handler.next;
-            }
-
-            // creates and visits the first (implicit) frame
-            Frame f = labels.frame;
-            Type[] args = Type.getArgumentTypes(descriptor);
-            f.initInputFrame(cw, access, args, this.maxLocals);
-            visitFrame(f);
-
-            /*
-             * fix point algorithm: mark the first basic block as 'changed'
-             * (i.e. put it in the 'changed' list) and, while there are changed
-             * basic blocks, choose one, mark it as unchanged, and update its
-             * successors (which can be changed in the process).
-             */
-            int max = 0;
-            Label changed = labels;
-            while (changed != null) {
-                // removes a basic block from the list of changed basic blocks
-                Label l = changed;
-                changed = changed.next;
-                l.next = null;
-                f = l.frame;
-                // a reachable jump target must be stored in the stack map
-                if ((l.status & Label.TARGET) != 0) {
-                    l.status |= Label.STORE;
-                }
-                // all visited labels are reachable, by definition
-                l.status |= Label.REACHABLE;
-                // updates the (absolute) maximum stack size
-                int blockMax = f.inputStack.length + l.outputStackMax;
-                if (blockMax > max) {
-                    max = blockMax;
-                }
-                // updates the successors of the current basic block
-                Edge e = l.successors;
-                while (e != null) {
-                    Label n = e.successor.getFirst();
-                    boolean change = f.merge(cw, n.frame, e.info);
-                    if (change && n.next == null) {
-                        // if n has changed and is not already in the 'changed'
-                        // list, adds it to this list
-                        n.next = changed;
-                        changed = n;
-                    }
-                    e = e.next;
-                }
-            }
-
-            // visits all the frames that must be stored in the stack map
-            Label l = labels;
-            while (l != null) {
-                f = l.frame;
-                if ((l.status & Label.STORE) != 0) {
-                    visitFrame(f);
-                }
-                if ((l.status & Label.REACHABLE) == 0) {
-                    // finds start and end of dead basic block
-                    Label k = l.successor;
-                    int start = l.position;
-                    int end = (k == null ? code.length : k.position) - 1;
-                    // if non empty basic block
-                    if (end >= start) {
-                        max = Math.max(max, 1);
-                        // replaces instructions with NOP ... NOP ATHROW
-                        for (int i = start; i < end; ++i) {
-                            code.data[i] = Opcodes.NOP;
-                        }
-                        code.data[end] = (byte) Opcodes.ATHROW;
-                        // emits a frame for this unreachable block
-                        int frameIndex = startFrame(start, 0, 1);
-                        frame[frameIndex] = Frame.OBJECT
-                                | cw.addType("java/lang/Throwable");
-                        endFrame();
-                        // removes the start-end range from the exception
-                        // handlers
-                        firstHandler = Handler.remove(firstHandler, l, k);
-                    }
-                }
-                l = l.successor;
-            }
-
-            handler = firstHandler;
-            handlerCount = 0;
-            while (handler != null) {
-                handlerCount += 1;
-                handler = handler.next;
-            }
-
-            this.maxStack = max;
-        } else if (compute == MAXS) {
-            // completes the control flow graph with exception handler blocks
-            Handler handler = firstHandler;
-            while (handler != null) {
-                Label l = handler.start;
-                Label h = handler.handler;
-                Label e = handler.end;
-                // adds 'h' as a successor of labels between 'start' and 'end'
-                while (l != e) {
-                    // creates an edge to 'h'
-                    Edge b = new Edge();
-                    b.info = Edge.EXCEPTION;
-                    b.successor = h;
-                    // adds it to the successors of 'l'
-                    if ((l.status & Label.JSR) == 0) {
-                        b.next = l.successors;
-                        l.successors = b;
-                    } else {
-                        // if l is a JSR block, adds b after the first two edges
-                        // to preserve the hypothesis about JSR block successors
-                        // order (see {@link #visitJumpInsn})
-                        b.next = l.successors.next.next;
-                        l.successors.next.next = b;
-                    }
-                    // goes to the next label
-                    l = l.successor;
-                }
-                handler = handler.next;
-            }
-
-            if (subroutines > 0) {
-                // completes the control flow graph with the RET successors
-                /*
-                 * first step: finds the subroutines. This step determines, for
-                 * each basic block, to which subroutine(s) it belongs.
-                 */
-                // finds the basic blocks that belong to the "main" subroutine
-                int id = 0;
-                labels.visitSubroutine(null, 1, subroutines);
-                // finds the basic blocks that belong to the real subroutines
-                Label l = labels;
-                while (l != null) {
-                    if ((l.status & Label.JSR) != 0) {
-                        // the subroutine is defined by l's TARGET, not by l
-                        Label subroutine = l.successors.next.successor;
-                        // if this subroutine has not been visited yet...
-                        if ((subroutine.status & Label.VISITED) == 0) {
-                            // ...assigns it a new id and finds its basic blocks
-                            id += 1;
-                            subroutine.visitSubroutine(null, (id / 32L) << 32
-                                    | (1L << (id % 32)), subroutines);
-                        }
-                    }
-                    l = l.successor;
-                }
-                // second step: finds the successors of RET blocks
-                l = labels;
-                while (l != null) {
-                    if ((l.status & Label.JSR) != 0) {
-                        Label L = labels;
-                        while (L != null) {
-                            L.status &= ~Label.VISITED2;
-                            L = L.successor;
-                        }
-                        // the subroutine is defined by l's TARGET, not by l
-                        Label subroutine = l.successors.next.successor;
-                        subroutine.visitSubroutine(l, 0, subroutines);
-                    }
-                    l = l.successor;
-                }
-            }
-
-            /*
-             * control flow analysis algorithm: while the block stack is not
-             * empty, pop a block from this stack, update the max stack size,
-             * compute the true (non relative) begin stack size of the
-             * successors of this block, and push these successors onto the
-             * stack (unless they have already been pushed onto the stack).
-             * Note: by hypothesis, the {@link Label#inputStackTop} of the
-             * blocks in the block stack are the true (non relative) beginning
-             * stack sizes of these blocks.
-             */
-            int max = 0;
-            Label stack = labels;
-            while (stack != null) {
-                // pops a block from the stack
-                Label l = stack;
-                stack = stack.next;
-                // computes the true (non relative) max stack size of this block
-                int start = l.inputStackTop;
-                int blockMax = start + l.outputStackMax;
-                // updates the global max stack size
-                if (blockMax > max) {
-                    max = blockMax;
-                }
-                // analyzes the successors of the block
-                Edge b = l.successors;
-                if ((l.status & Label.JSR) != 0) {
-                    // ignores the first edge of JSR blocks (virtual successor)
-                    b = b.next;
-                }
-                while (b != null) {
-                    l = b.successor;
-                    // if this successor has not already been pushed...
-                    if ((l.status & Label.PUSHED) == 0) {
-                        // computes its true beginning stack size...
-                        l.inputStackTop = b.info == Edge.EXCEPTION ? 1 : start
-                                + b.info;
-                        // ...and pushes it onto the stack
-                        l.status |= Label.PUSHED;
-                        l.next = stack;
-                        stack = l;
-                    }
-                    b = b.next;
-                }
-            }
-            this.maxStack = Math.max(maxStack, max);
-        } else {
-            this.maxStack = maxStack;
-            this.maxLocals = maxLocals;
-        }
-    }
-
-    @Override
-    public void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: control flow analysis algorithm
-    // ------------------------------------------------------------------------
-
-    /**
-     * Adds a successor to the {@link #currentBlock currentBlock} block.
-     * 
-     * @param info
-     *            information about the control flow edge to be added.
-     * @param successor
-     *            the successor block to be added to the current block.
-     */
-    private void addSuccessor(final int info, final Label successor) {
-        // creates and initializes an Edge object...
-        Edge b = new Edge();
-        b.info = info;
-        b.successor = successor;
-        // ...and adds it to the successor list of the currentBlock block
-        b.next = currentBlock.successors;
-        currentBlock.successors = b;
-    }
-
-    /**
-     * Ends the current basic block. This method must be used in the case where
-     * the current basic block does not have any successor.
-     */
-    private void noSuccessor() {
-        if (compute == FRAMES) {
-            Label l = new Label();
-            l.frame = new Frame();
-            l.frame.owner = l;
-            l.resolve(this, code.length, code.data);
-            previousBlock.successor = l;
-            previousBlock = l;
-        } else {
-            currentBlock.outputStackMax = maxStackSize;
-        }
-        currentBlock = null;
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: stack map frames
-    // ------------------------------------------------------------------------
-
-    /**
-     * Visits a frame that has been computed from scratch.
-     * 
-     * @param f
-     *            the frame that must be visited.
-     */
-    private void visitFrame(final Frame f) {
-        int i, t;
-        int nTop = 0;
-        int nLocal = 0;
-        int nStack = 0;
-        int[] locals = f.inputLocals;
-        int[] stacks = f.inputStack;
-        // computes the number of locals (ignores TOP types that are just after
-        // a LONG or a DOUBLE, and all trailing TOP types)
-        for (i = 0; i < locals.length; ++i) {
-            t = locals[i];
-            if (t == Frame.TOP) {
-                ++nTop;
-            } else {
-                nLocal += nTop + 1;
-                nTop = 0;
-            }
-            if (t == Frame.LONG || t == Frame.DOUBLE) {
-                ++i;
-            }
-        }
-        // computes the stack size (ignores TOP types that are just after
-        // a LONG or a DOUBLE)
-        for (i = 0; i < stacks.length; ++i) {
-            t = stacks[i];
-            ++nStack;
-            if (t == Frame.LONG || t == Frame.DOUBLE) {
-                ++i;
-            }
-        }
-        // visits the frame and its content
-        int frameIndex = startFrame(f.owner.position, nLocal, nStack);
-        for (i = 0; nLocal > 0; ++i, --nLocal) {
-            t = locals[i];
-            frame[frameIndex++] = t;
-            if (t == Frame.LONG || t == Frame.DOUBLE) {
-                ++i;
-            }
-        }
-        for (i = 0; i < stacks.length; ++i) {
-            t = stacks[i];
-            frame[frameIndex++] = t;
-            if (t == Frame.LONG || t == Frame.DOUBLE) {
-                ++i;
-            }
-        }
-        endFrame();
-    }
-
-    /**
-     * Visit the implicit first frame of this method.
-     */
-    private void visitImplicitFirstFrame() {
-        // There can be at most descriptor.length() + 1 locals
-        int frameIndex = startFrame(0, descriptor.length() + 1, 0);
-        if ((access & Opcodes.ACC_STATIC) == 0) {
-            if ((access & ACC_CONSTRUCTOR) == 0) {
-                frame[frameIndex++] = Frame.OBJECT | cw.addType(cw.thisName);
-            } else {
-                frame[frameIndex++] = 6; // Opcodes.UNINITIALIZED_THIS;
-            }
-        }
-        int i = 1;
-        loop: while (true) {
-            int j = i;
-            switch (descriptor.charAt(i++)) {
-            case 'Z':
-            case 'C':
-            case 'B':
-            case 'S':
-            case 'I':
-                frame[frameIndex++] = 1; // Opcodes.INTEGER;
-                break;
-            case 'F':
-                frame[frameIndex++] = 2; // Opcodes.FLOAT;
-                break;
-            case 'J':
-                frame[frameIndex++] = 4; // Opcodes.LONG;
-                break;
-            case 'D':
-                frame[frameIndex++] = 3; // Opcodes.DOUBLE;
-                break;
-            case '[':
-                while (descriptor.charAt(i) == '[') {
-                    ++i;
-                }
-                if (descriptor.charAt(i) == 'L') {
-                    ++i;
-                    while (descriptor.charAt(i) != ';') {
-                        ++i;
-                    }
-                }
-                frame[frameIndex++] = Frame.OBJECT
-                        | cw.addType(descriptor.substring(j, ++i));
-                break;
-            case 'L':
-                while (descriptor.charAt(i) != ';') {
-                    ++i;
-                }
-                frame[frameIndex++] = Frame.OBJECT
-                        | cw.addType(descriptor.substring(j + 1, i++));
-                break;
-            default:
-                break loop;
-            }
-        }
-        frame[1] = frameIndex - 3;
-        endFrame();
-    }
-
-    /**
-     * Starts the visit of a stack map frame.
-     * 
-     * @param offset
-     *            the offset of the instruction to which the frame corresponds.
-     * @param nLocal
-     *            the number of local variables in the frame.
-     * @param nStack
-     *            the number of stack elements in the frame.
-     * @return the index of the next element to be written in this frame.
-     */
-    private int startFrame(final int offset, final int nLocal, final int nStack) {
-        int n = 3 + nLocal + nStack;
-        if (frame == null || frame.length < n) {
-            frame = new int[n];
-        }
-        frame[0] = offset;
-        frame[1] = nLocal;
-        frame[2] = nStack;
-        return 3;
-    }
-
-    /**
-     * Checks if the visit of the current frame {@link #frame} is finished, and
-     * if yes, write it in the StackMapTable attribute.
-     */
-    private void endFrame() {
-        if (previousFrame != null) { // do not write the first frame
-            if (stackMap == null) {
-                stackMap = new ByteVector();
-            }
-            writeFrame();
-            ++frameCount;
-        }
-        previousFrame = frame;
-        frame = null;
-    }
-
-    /**
-     * Compress and writes the current frame {@link #frame} in the StackMapTable
-     * attribute.
-     */
-    private void writeFrame() {
-        int clocalsSize = frame[1];
-        int cstackSize = frame[2];
-        if ((cw.version & 0xFFFF) < Opcodes.V1_6) {
-            stackMap.putShort(frame[0]).putShort(clocalsSize);
-            writeFrameTypes(3, 3 + clocalsSize);
-            stackMap.putShort(cstackSize);
-            writeFrameTypes(3 + clocalsSize, 3 + clocalsSize + cstackSize);
-            return;
-        }
-        int localsSize = previousFrame[1];
-        int type = FULL_FRAME;
-        int k = 0;
-        int delta;
-        if (frameCount == 0) {
-            delta = frame[0];
-        } else {
-            delta = frame[0] - previousFrame[0] - 1;
-        }
-        if (cstackSize == 0) {
-            k = clocalsSize - localsSize;
-            switch (k) {
-            case -3:
-            case -2:
-            case -1:
-                type = CHOP_FRAME;
-                localsSize = clocalsSize;
-                break;
-            case 0:
-                type = delta < 64 ? SAME_FRAME : SAME_FRAME_EXTENDED;
-                break;
-            case 1:
-            case 2:
-            case 3:
-                type = APPEND_FRAME;
-                break;
-            }
-        } else if (clocalsSize == localsSize && cstackSize == 1) {
-            type = delta < 63 ? SAME_LOCALS_1_STACK_ITEM_FRAME
-                    : SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED;
-        }
-        if (type != FULL_FRAME) {
-            // verify if locals are the same
-            int l = 3;
-            for (int j = 0; j < localsSize; j++) {
-                if (frame[l] != previousFrame[l]) {
-                    type = FULL_FRAME;
-                    break;
-                }
-                l++;
-            }
-        }
-        switch (type) {
-        case SAME_FRAME:
-            stackMap.putByte(delta);
-            break;
-        case SAME_LOCALS_1_STACK_ITEM_FRAME:
-            stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME + delta);
-            writeFrameTypes(3 + clocalsSize, 4 + clocalsSize);
-            break;
-        case SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED:
-            stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED).putShort(
-                    delta);
-            writeFrameTypes(3 + clocalsSize, 4 + clocalsSize);
-            break;
-        case SAME_FRAME_EXTENDED:
-            stackMap.putByte(SAME_FRAME_EXTENDED).putShort(delta);
-            break;
-        case CHOP_FRAME:
-            stackMap.putByte(SAME_FRAME_EXTENDED + k).putShort(delta);
-            break;
-        case APPEND_FRAME:
-            stackMap.putByte(SAME_FRAME_EXTENDED + k).putShort(delta);
-            writeFrameTypes(3 + localsSize, 3 + clocalsSize);
-            break;
-        // case FULL_FRAME:
-        default:
-            stackMap.putByte(FULL_FRAME).putShort(delta).putShort(clocalsSize);
-            writeFrameTypes(3, 3 + clocalsSize);
-            stackMap.putShort(cstackSize);
-            writeFrameTypes(3 + clocalsSize, 3 + clocalsSize + cstackSize);
-        }
-    }
-
-    /**
-     * Writes some types of the current frame {@link #frame} into the
-     * StackMapTableAttribute. This method converts types from the format used
-     * in {@link Label} to the format used in StackMapTable attributes. In
-     * particular, it converts type table indexes to constant pool indexes.
-     * 
-     * @param start
-     *            index of the first type in {@link #frame} to write.
-     * @param end
-     *            index of last type in {@link #frame} to write (exclusive).
-     */
-    private void writeFrameTypes(final int start, final int end) {
-        for (int i = start; i < end; ++i) {
-            int t = frame[i];
-            int d = t & Frame.DIM;
-            if (d == 0) {
-                int v = t & Frame.BASE_VALUE;
-                switch (t & Frame.BASE_KIND) {
-                case Frame.OBJECT:
-                    stackMap.putByte(7).putShort(
-                            cw.newClass(cw.typeTable[v].strVal1));
-                    break;
-                case Frame.UNINITIALIZED:
-                    stackMap.putByte(8).putShort(cw.typeTable[v].intVal);
-                    break;
-                default:
-                    stackMap.putByte(v);
-                }
-            } else {
-                StringBuffer buf = new StringBuffer();
-                d >>= 28;
-                while (d-- > 0) {
-                    buf.append('[');
-                }
-                if ((t & Frame.BASE_KIND) == Frame.OBJECT) {
-                    buf.append('L');
-                    buf.append(cw.typeTable[t & Frame.BASE_VALUE].strVal1);
-                    buf.append(';');
-                } else {
-                    switch (t & 0xF) {
-                    case 1:
-                        buf.append('I');
-                        break;
-                    case 2:
-                        buf.append('F');
-                        break;
-                    case 3:
-                        buf.append('D');
-                        break;
-                    case 9:
-                        buf.append('Z');
-                        break;
-                    case 10:
-                        buf.append('B');
-                        break;
-                    case 11:
-                        buf.append('C');
-                        break;
-                    case 12:
-                        buf.append('S');
-                        break;
-                    default:
-                        buf.append('J');
-                    }
-                }
-                stackMap.putByte(7).putShort(cw.newClass(buf.toString()));
-            }
-        }
-    }
-
-    private void writeFrameType(final Object type) {
-        if (type instanceof String) {
-            stackMap.putByte(7).putShort(cw.newClass((String) type));
-        } else if (type instanceof Integer) {
-            stackMap.putByte(((Integer) type).intValue());
-        } else {
-            stackMap.putByte(8).putShort(((Label) type).position);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: dump bytecode array
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the size of the bytecode of this method.
-     * 
-     * @return the size of the bytecode of this method.
-     */
-    final int getSize() {
-        if (classReaderOffset != 0) {
-            return 6 + classReaderLength;
-        }
-        if (resize) {
-            // replaces the temporary jump opcodes introduced by Label.resolve.
-            if (ClassReader.RESIZE) {
-                resizeInstructions();
-            } else {
-                throw new RuntimeException("Method code too large!");
-            }
-        }
-        int size = 8;
-        if (code.length > 0) {
-            if (code.length > 65536) {
-                throw new RuntimeException("Method code too large!");
-            }
-            cw.newUTF8("Code");
-            size += 18 + code.length + 8 * handlerCount;
-            if (localVar != null) {
-                cw.newUTF8("LocalVariableTable");
-                size += 8 + localVar.length;
-            }
-            if (localVarType != null) {
-                cw.newUTF8("LocalVariableTypeTable");
-                size += 8 + localVarType.length;
-            }
-            if (lineNumber != null) {
-                cw.newUTF8("LineNumberTable");
-                size += 8 + lineNumber.length;
-            }
-            if (stackMap != null) {
-                boolean zip = (cw.version & 0xFFFF) >= Opcodes.V1_6;
-                cw.newUTF8(zip ? "StackMapTable" : "StackMap");
-                size += 8 + stackMap.length;
-            }
-            if (cattrs != null) {
-                size += cattrs.getSize(cw, code.data, code.length, maxStack,
-                        maxLocals);
-            }
-        }
-        if (exceptionCount > 0) {
-            cw.newUTF8("Exceptions");
-            size += 8 + 2 * exceptionCount;
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((cw.version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                cw.newUTF8("Synthetic");
-                size += 6;
-            }
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            cw.newUTF8("Deprecated");
-            size += 6;
-        }
-        if (ClassReader.SIGNATURES && signature != null) {
-            cw.newUTF8("Signature");
-            cw.newUTF8(signature);
-            size += 8;
-        }
-        if (ClassReader.ANNOTATIONS && annd != null) {
-            cw.newUTF8("AnnotationDefault");
-            size += 6 + annd.length;
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            cw.newUTF8("RuntimeVisibleAnnotations");
-            size += 8 + anns.getSize();
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            cw.newUTF8("RuntimeInvisibleAnnotations");
-            size += 8 + ianns.getSize();
-        }
-        if (ClassReader.ANNOTATIONS && panns != null) {
-            cw.newUTF8("RuntimeVisibleParameterAnnotations");
-            size += 7 + 2 * (panns.length - synthetics);
-            for (int i = panns.length - 1; i >= synthetics; --i) {
-                size += panns[i] == null ? 0 : panns[i].getSize();
-            }
-        }
-        if (ClassReader.ANNOTATIONS && ipanns != null) {
-            cw.newUTF8("RuntimeInvisibleParameterAnnotations");
-            size += 7 + 2 * (ipanns.length - synthetics);
-            for (int i = ipanns.length - 1; i >= synthetics; --i) {
-                size += ipanns[i] == null ? 0 : ipanns[i].getSize();
-            }
-        }
-        if (attrs != null) {
-            size += attrs.getSize(cw, null, 0, -1, -1);
-        }
-        return size;
-    }
-
-    /**
-     * Puts the bytecode of this method in the given byte vector.
-     * 
-     * @param out
-     *            the byte vector into which the bytecode of this method must be
-     *            copied.
-     */
-    final void put(final ByteVector out) {
-        final int FACTOR = ClassWriter.TO_ACC_SYNTHETIC;
-        int mask = ACC_CONSTRUCTOR | Opcodes.ACC_DEPRECATED
-                | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE
-                | ((access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) / FACTOR);
-        out.putShort(access & ~mask).putShort(name).putShort(desc);
-        if (classReaderOffset != 0) {
-            out.putByteArray(cw.cr.b, classReaderOffset, classReaderLength);
-            return;
-        }
-        int attributeCount = 0;
-        if (code.length > 0) {
-            ++attributeCount;
-        }
-        if (exceptionCount > 0) {
-            ++attributeCount;
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((cw.version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                ++attributeCount;
-            }
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            ++attributeCount;
-        }
-        if (ClassReader.SIGNATURES && signature != null) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && annd != null) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && panns != null) {
-            ++attributeCount;
-        }
-        if (ClassReader.ANNOTATIONS && ipanns != null) {
-            ++attributeCount;
-        }
-        if (attrs != null) {
-            attributeCount += attrs.getCount();
-        }
-        out.putShort(attributeCount);
-        if (code.length > 0) {
-            int size = 12 + code.length + 8 * handlerCount;
-            if (localVar != null) {
-                size += 8 + localVar.length;
-            }
-            if (localVarType != null) {
-                size += 8 + localVarType.length;
-            }
-            if (lineNumber != null) {
-                size += 8 + lineNumber.length;
-            }
-            if (stackMap != null) {
-                size += 8 + stackMap.length;
-            }
-            if (cattrs != null) {
-                size += cattrs.getSize(cw, code.data, code.length, maxStack,
-                        maxLocals);
-            }
-            out.putShort(cw.newUTF8("Code")).putInt(size);
-            out.putShort(maxStack).putShort(maxLocals);
-            out.putInt(code.length).putByteArray(code.data, 0, code.length);
-            out.putShort(handlerCount);
-            if (handlerCount > 0) {
-                Handler h = firstHandler;
-                while (h != null) {
-                    out.putShort(h.start.position).putShort(h.end.position)
-                            .putShort(h.handler.position).putShort(h.type);
-                    h = h.next;
-                }
-            }
-            attributeCount = 0;
-            if (localVar != null) {
-                ++attributeCount;
-            }
-            if (localVarType != null) {
-                ++attributeCount;
-            }
-            if (lineNumber != null) {
-                ++attributeCount;
-            }
-            if (stackMap != null) {
-                ++attributeCount;
-            }
-            if (cattrs != null) {
-                attributeCount += cattrs.getCount();
-            }
-            out.putShort(attributeCount);
-            if (localVar != null) {
-                out.putShort(cw.newUTF8("LocalVariableTable"));
-                out.putInt(localVar.length + 2).putShort(localVarCount);
-                out.putByteArray(localVar.data, 0, localVar.length);
-            }
-            if (localVarType != null) {
-                out.putShort(cw.newUTF8("LocalVariableTypeTable"));
-                out.putInt(localVarType.length + 2).putShort(localVarTypeCount);
-                out.putByteArray(localVarType.data, 0, localVarType.length);
-            }
-            if (lineNumber != null) {
-                out.putShort(cw.newUTF8("LineNumberTable"));
-                out.putInt(lineNumber.length + 2).putShort(lineNumberCount);
-                out.putByteArray(lineNumber.data, 0, lineNumber.length);
-            }
-            if (stackMap != null) {
-                boolean zip = (cw.version & 0xFFFF) >= Opcodes.V1_6;
-                out.putShort(cw.newUTF8(zip ? "StackMapTable" : "StackMap"));
-                out.putInt(stackMap.length + 2).putShort(frameCount);
-                out.putByteArray(stackMap.data, 0, stackMap.length);
-            }
-            if (cattrs != null) {
-                cattrs.put(cw, code.data, code.length, maxLocals, maxStack, out);
-            }
-        }
-        if (exceptionCount > 0) {
-            out.putShort(cw.newUTF8("Exceptions")).putInt(
-                    2 * exceptionCount + 2);
-            out.putShort(exceptionCount);
-            for (int i = 0; i < exceptionCount; ++i) {
-                out.putShort(exceptions[i]);
-            }
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((cw.version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                out.putShort(cw.newUTF8("Synthetic")).putInt(0);
-            }
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            out.putShort(cw.newUTF8("Deprecated")).putInt(0);
-        }
-        if (ClassReader.SIGNATURES && signature != null) {
-            out.putShort(cw.newUTF8("Signature")).putInt(2)
-                    .putShort(cw.newUTF8(signature));
-        }
-        if (ClassReader.ANNOTATIONS && annd != null) {
-            out.putShort(cw.newUTF8("AnnotationDefault"));
-            out.putInt(annd.length);
-            out.putByteArray(annd.data, 0, annd.length);
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            out.putShort(cw.newUTF8("RuntimeVisibleAnnotations"));
-            anns.put(out);
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            out.putShort(cw.newUTF8("RuntimeInvisibleAnnotations"));
-            ianns.put(out);
-        }
-        if (ClassReader.ANNOTATIONS && panns != null) {
-            out.putShort(cw.newUTF8("RuntimeVisibleParameterAnnotations"));
-            AnnotationWriter.put(panns, synthetics, out);
-        }
-        if (ClassReader.ANNOTATIONS && ipanns != null) {
-            out.putShort(cw.newUTF8("RuntimeInvisibleParameterAnnotations"));
-            AnnotationWriter.put(ipanns, synthetics, out);
-        }
-        if (attrs != null) {
-            attrs.put(cw, null, 0, -1, -1, out);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: instruction resizing (used to handle GOTO_W and JSR_W)
-    // ------------------------------------------------------------------------
-
-    /**
-     * Resizes and replaces the temporary instructions inserted by
-     * {@link Label#resolve} for wide forward jumps, while keeping jump offsets
-     * and instruction addresses consistent. This may require to resize other
-     * existing instructions, or even to introduce new instructions: for
-     * example, increasing the size of an instruction by 2 at the middle of a
-     * method can increases the offset of an IFEQ instruction from 32766 to
-     * 32768, in which case IFEQ 32766 must be replaced with IFNEQ 8 GOTO_W
-     * 32765. This, in turn, may require to increase the size of another jump
-     * instruction, and so on... All these operations are handled automatically
-     * by this method.
-     * <p>
-     * <i>This method must be called after all the method that is being built
-     * has been visited</i>. In particular, the {@link Label Label} objects used
-     * to construct the method are no longer valid after this method has been
-     * called.
-     */
-    private void resizeInstructions() {
-        byte[] b = code.data; // bytecode of the method
-        int u, v, label; // indexes in b
-        int i, j; // loop indexes
-        /*
-         * 1st step: As explained above, resizing an instruction may require to
-         * resize another one, which may require to resize yet another one, and
-         * so on. The first step of the algorithm consists in finding all the
-         * instructions that need to be resized, without modifying the code.
-         * This is done by the following "fix point" algorithm:
-         * 
-         * Parse the code to find the jump instructions whose offset will need
-         * more than 2 bytes to be stored (the future offset is computed from
-         * the current offset and from the number of bytes that will be inserted
-         * or removed between the source and target instructions). For each such
-         * instruction, adds an entry in (a copy of) the indexes and sizes
-         * arrays (if this has not already been done in a previous iteration!).
-         * 
-         * If at least one entry has been added during the previous step, go
-         * back to the beginning, otherwise stop.
-         * 
-         * In fact the real algorithm is complicated by the fact that the size
-         * of TABLESWITCH and LOOKUPSWITCH instructions depends on their
-         * position in the bytecode (because of padding). In order to ensure the
-         * convergence of the algorithm, the number of bytes to be added or
-         * removed from these instructions is over estimated during the previous
-         * loop, and computed exactly only after the loop is finished (this
-         * requires another pass to parse the bytecode of the method).
-         */
-        int[] allIndexes = new int[0]; // copy of indexes
-        int[] allSizes = new int[0]; // copy of sizes
-        boolean[] resize; // instructions to be resized
-        int newOffset; // future offset of a jump instruction
-
-        resize = new boolean[code.length];
-
-        // 3 = loop again, 2 = loop ended, 1 = last pass, 0 = done
-        int state = 3;
-        do {
-            if (state == 3) {
-                state = 2;
-            }
-            u = 0;
-            while (u < b.length) {
-                int opcode = b[u] & 0xFF; // opcode of current instruction
-                int insert = 0; // bytes to be added after this instruction
-
-                switch (ClassWriter.TYPE[opcode]) {
-                case ClassWriter.NOARG_INSN:
-                case ClassWriter.IMPLVAR_INSN:
-                    u += 1;
-                    break;
-                case ClassWriter.LABEL_INSN:
-                    if (opcode > 201) {
-                        // converts temporary opcodes 202 to 217, 218 and
-                        // 219 to IFEQ ... JSR (inclusive), IFNULL and
-                        // IFNONNULL
-                        opcode = opcode < 218 ? opcode - 49 : opcode - 20;
-                        label = u + readUnsignedShort(b, u + 1);
-                    } else {
-                        label = u + readShort(b, u + 1);
-                    }
-                    newOffset = getNewOffset(allIndexes, allSizes, u, label);
-                    if (newOffset < Short.MIN_VALUE
-                            || newOffset > Short.MAX_VALUE) {
-                        if (!resize[u]) {
-                            if (opcode == Opcodes.GOTO || opcode == Opcodes.JSR) {
-                                // two additional bytes will be required to
-                                // replace this GOTO or JSR instruction with
-                                // a GOTO_W or a JSR_W
-                                insert = 2;
-                            } else {
-                                // five additional bytes will be required to
-                                // replace this IFxxx <l> instruction with
-                                // IFNOTxxx <l'> GOTO_W <l>, where IFNOTxxx
-                                // is the "opposite" opcode of IFxxx (i.e.,
-                                // IFNE for IFEQ) and where <l'> designates
-                                // the instruction just after the GOTO_W.
-                                insert = 5;
-                            }
-                            resize[u] = true;
-                        }
-                    }
-                    u += 3;
-                    break;
-                case ClassWriter.LABELW_INSN:
-                    u += 5;
-                    break;
-                case ClassWriter.TABL_INSN:
-                    if (state == 1) {
-                        // true number of bytes to be added (or removed)
-                        // from this instruction = (future number of padding
-                        // bytes - current number of padding byte) -
-                        // previously over estimated variation =
-                        // = ((3 - newOffset%4) - (3 - u%4)) - u%4
-                        // = (-newOffset%4 + u%4) - u%4
-                        // = -(newOffset & 3)
-                        newOffset = getNewOffset(allIndexes, allSizes, 0, u);
-                        insert = -(newOffset & 3);
-                    } else if (!resize[u]) {
-                        // over estimation of the number of bytes to be
-                        // added to this instruction = 3 - current number
-                        // of padding bytes = 3 - (3 - u%4) = u%4 = u & 3
-                        insert = u & 3;
-                        resize[u] = true;
-                    }
-                    // skips instruction
-                    u = u + 4 - (u & 3);
-                    u += 4 * (readInt(b, u + 8) - readInt(b, u + 4) + 1) + 12;
-                    break;
-                case ClassWriter.LOOK_INSN:
-                    if (state == 1) {
-                        // like TABL_INSN
-                        newOffset = getNewOffset(allIndexes, allSizes, 0, u);
-                        insert = -(newOffset & 3);
-                    } else if (!resize[u]) {
-                        // like TABL_INSN
-                        insert = u & 3;
-                        resize[u] = true;
-                    }
-                    // skips instruction
-                    u = u + 4 - (u & 3);
-                    u += 8 * readInt(b, u + 4) + 8;
-                    break;
-                case ClassWriter.WIDE_INSN:
-                    opcode = b[u + 1] & 0xFF;
-                    if (opcode == Opcodes.IINC) {
-                        u += 6;
-                    } else {
-                        u += 4;
-                    }
-                    break;
-                case ClassWriter.VAR_INSN:
-                case ClassWriter.SBYTE_INSN:
-                case ClassWriter.LDC_INSN:
-                    u += 2;
-                    break;
-                case ClassWriter.SHORT_INSN:
-                case ClassWriter.LDCW_INSN:
-                case ClassWriter.FIELDORMETH_INSN:
-                case ClassWriter.TYPE_INSN:
-                case ClassWriter.IINC_INSN:
-                    u += 3;
-                    break;
-                case ClassWriter.ITFMETH_INSN:
-                case ClassWriter.INDYMETH_INSN:
-                    u += 5;
-                    break;
-                // case ClassWriter.MANA_INSN:
-                default:
-                    u += 4;
-                    break;
-                }
-                if (insert != 0) {
-                    // adds a new (u, insert) entry in the allIndexes and
-                    // allSizes arrays
-                    int[] newIndexes = new int[allIndexes.length + 1];
-                    int[] newSizes = new int[allSizes.length + 1];
-                    System.arraycopy(allIndexes, 0, newIndexes, 0,
-                            allIndexes.length);
-                    System.arraycopy(allSizes, 0, newSizes, 0, allSizes.length);
-                    newIndexes[allIndexes.length] = u;
-                    newSizes[allSizes.length] = insert;
-                    allIndexes = newIndexes;
-                    allSizes = newSizes;
-                    if (insert > 0) {
-                        state = 3;
-                    }
-                }
-            }
-            if (state < 3) {
-                --state;
-            }
-        } while (state != 0);
-
-        // 2nd step:
-        // copies the bytecode of the method into a new bytevector, updates the
-        // offsets, and inserts (or removes) bytes as requested.
-
-        ByteVector newCode = new ByteVector(code.length);
-
-        u = 0;
-        while (u < code.length) {
-            int opcode = b[u] & 0xFF;
-            switch (ClassWriter.TYPE[opcode]) {
-            case ClassWriter.NOARG_INSN:
-            case ClassWriter.IMPLVAR_INSN:
-                newCode.putByte(opcode);
-                u += 1;
-                break;
-            case ClassWriter.LABEL_INSN:
-                if (opcode > 201) {
-                    // changes temporary opcodes 202 to 217 (inclusive), 218
-                    // and 219 to IFEQ ... JSR (inclusive), IFNULL and
-                    // IFNONNULL
-                    opcode = opcode < 218 ? opcode - 49 : opcode - 20;
-                    label = u + readUnsignedShort(b, u + 1);
-                } else {
-                    label = u + readShort(b, u + 1);
-                }
-                newOffset = getNewOffset(allIndexes, allSizes, u, label);
-                if (resize[u]) {
-                    // replaces GOTO with GOTO_W, JSR with JSR_W and IFxxx
-                    // <l> with IFNOTxxx <l'> GOTO_W <l>, where IFNOTxxx is
-                    // the "opposite" opcode of IFxxx (i.e., IFNE for IFEQ)
-                    // and where <l'> designates the instruction just after
-                    // the GOTO_W.
-                    if (opcode == Opcodes.GOTO) {
-                        newCode.putByte(200); // GOTO_W
-                    } else if (opcode == Opcodes.JSR) {
-                        newCode.putByte(201); // JSR_W
-                    } else {
-                        newCode.putByte(opcode <= 166 ? ((opcode + 1) ^ 1) - 1
-                                : opcode ^ 1);
-                        newCode.putShort(8); // jump offset
-                        newCode.putByte(200); // GOTO_W
-                        // newOffset now computed from start of GOTO_W
-                        newOffset -= 3;
-                    }
-                    newCode.putInt(newOffset);
-                } else {
-                    newCode.putByte(opcode);
-                    newCode.putShort(newOffset);
-                }
-                u += 3;
-                break;
-            case ClassWriter.LABELW_INSN:
-                label = u + readInt(b, u + 1);
-                newOffset = getNewOffset(allIndexes, allSizes, u, label);
-                newCode.putByte(opcode);
-                newCode.putInt(newOffset);
-                u += 5;
-                break;
-            case ClassWriter.TABL_INSN:
-                // skips 0 to 3 padding bytes
-                v = u;
-                u = u + 4 - (v & 3);
-                // reads and copies instruction
-                newCode.putByte(Opcodes.TABLESWITCH);
-                newCode.putByteArray(null, 0, (4 - newCode.length % 4) % 4);
-                label = v + readInt(b, u);
-                u += 4;
-                newOffset = getNewOffset(allIndexes, allSizes, v, label);
-                newCode.putInt(newOffset);
-                j = readInt(b, u);
-                u += 4;
-                newCode.putInt(j);
-                j = readInt(b, u) - j + 1;
-                u += 4;
-                newCode.putInt(readInt(b, u - 4));
-                for (; j > 0; --j) {
-                    label = v + readInt(b, u);
-                    u += 4;
-                    newOffset = getNewOffset(allIndexes, allSizes, v, label);
-                    newCode.putInt(newOffset);
-                }
-                break;
-            case ClassWriter.LOOK_INSN:
-                // skips 0 to 3 padding bytes
-                v = u;
-                u = u + 4 - (v & 3);
-                // reads and copies instruction
-                newCode.putByte(Opcodes.LOOKUPSWITCH);
-                newCode.putByteArray(null, 0, (4 - newCode.length % 4) % 4);
-                label = v + readInt(b, u);
-                u += 4;
-                newOffset = getNewOffset(allIndexes, allSizes, v, label);
-                newCode.putInt(newOffset);
-                j = readInt(b, u);
-                u += 4;
-                newCode.putInt(j);
-                for (; j > 0; --j) {
-                    newCode.putInt(readInt(b, u));
-                    u += 4;
-                    label = v + readInt(b, u);
-                    u += 4;
-                    newOffset = getNewOffset(allIndexes, allSizes, v, label);
-                    newCode.putInt(newOffset);
-                }
-                break;
-            case ClassWriter.WIDE_INSN:
-                opcode = b[u + 1] & 0xFF;
-                if (opcode == Opcodes.IINC) {
-                    newCode.putByteArray(b, u, 6);
-                    u += 6;
-                } else {
-                    newCode.putByteArray(b, u, 4);
-                    u += 4;
-                }
-                break;
-            case ClassWriter.VAR_INSN:
-            case ClassWriter.SBYTE_INSN:
-            case ClassWriter.LDC_INSN:
-                newCode.putByteArray(b, u, 2);
-                u += 2;
-                break;
-            case ClassWriter.SHORT_INSN:
-            case ClassWriter.LDCW_INSN:
-            case ClassWriter.FIELDORMETH_INSN:
-            case ClassWriter.TYPE_INSN:
-            case ClassWriter.IINC_INSN:
-                newCode.putByteArray(b, u, 3);
-                u += 3;
-                break;
-            case ClassWriter.ITFMETH_INSN:
-            case ClassWriter.INDYMETH_INSN:
-                newCode.putByteArray(b, u, 5);
-                u += 5;
-                break;
-            // case MANA_INSN:
-            default:
-                newCode.putByteArray(b, u, 4);
-                u += 4;
-                break;
-            }
-        }
-
-        // recomputes the stack map frames
-        if (frameCount > 0) {
-            if (compute == FRAMES) {
-                frameCount = 0;
-                stackMap = null;
-                previousFrame = null;
-                frame = null;
-                Frame f = new Frame();
-                f.owner = labels;
-                Type[] args = Type.getArgumentTypes(descriptor);
-                f.initInputFrame(cw, access, args, maxLocals);
-                visitFrame(f);
-                Label l = labels;
-                while (l != null) {
-                    /*
-                     * here we need the original label position. getNewOffset
-                     * must therefore never have been called for this label.
-                     */
-                    u = l.position - 3;
-                    if ((l.status & Label.STORE) != 0 || (u >= 0 && resize[u])) {
-                        getNewOffset(allIndexes, allSizes, l);
-                        // TODO update offsets in UNINITIALIZED values
-                        visitFrame(l.frame);
-                    }
-                    l = l.successor;
-                }
-            } else {
-                /*
-                 * Resizing an existing stack map frame table is really hard.
-                 * Not only the table must be parsed to update the offets, but
-                 * new frames may be needed for jump instructions that were
-                 * inserted by this method. And updating the offsets or
-                 * inserting frames can change the format of the following
-                 * frames, in case of packed frames. In practice the whole table
-                 * must be recomputed. For this the frames are marked as
-                 * potentially invalid. This will cause the whole class to be
-                 * reread and rewritten with the COMPUTE_FRAMES option (see the
-                 * ClassWriter.toByteArray method). This is not very efficient
-                 * but is much easier and requires much less code than any other
-                 * method I can think of.
-                 */
-                cw.invalidFrames = true;
-            }
-        }
-        // updates the exception handler block labels
-        Handler h = firstHandler;
-        while (h != null) {
-            getNewOffset(allIndexes, allSizes, h.start);
-            getNewOffset(allIndexes, allSizes, h.end);
-            getNewOffset(allIndexes, allSizes, h.handler);
-            h = h.next;
-        }
-        // updates the instructions addresses in the
-        // local var and line number tables
-        for (i = 0; i < 2; ++i) {
-            ByteVector bv = i == 0 ? localVar : localVarType;
-            if (bv != null) {
-                b = bv.data;
-                u = 0;
-                while (u < bv.length) {
-                    label = readUnsignedShort(b, u);
-                    newOffset = getNewOffset(allIndexes, allSizes, 0, label);
-                    writeShort(b, u, newOffset);
-                    label += readUnsignedShort(b, u + 2);
-                    newOffset = getNewOffset(allIndexes, allSizes, 0, label)
-                            - newOffset;
-                    writeShort(b, u + 2, newOffset);
-                    u += 10;
-                }
-            }
-        }
-        if (lineNumber != null) {
-            b = lineNumber.data;
-            u = 0;
-            while (u < lineNumber.length) {
-                writeShort(
-                        b,
-                        u,
-                        getNewOffset(allIndexes, allSizes, 0,
-                                readUnsignedShort(b, u)));
-                u += 4;
-            }
-        }
-        // updates the labels of the other attributes
-        Attribute attr = cattrs;
-        while (attr != null) {
-            Label[] labels = attr.getLabels();
-            if (labels != null) {
-                for (i = labels.length - 1; i >= 0; --i) {
-                    getNewOffset(allIndexes, allSizes, labels[i]);
-                }
-            }
-            attr = attr.next;
-        }
-
-        // replaces old bytecodes with new ones
-        code = newCode;
-    }
-
-    /**
-     * Reads an unsigned short value in the given byte array.
-     * 
-     * @param b
-     *            a byte array.
-     * @param index
-     *            the start index of the value to be read.
-     * @return the read value.
-     */
-    static int readUnsignedShort(final byte[] b, final int index) {
-        return ((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF);
-    }
-
-    /**
-     * Reads a signed short value in the given byte array.
-     * 
-     * @param b
-     *            a byte array.
-     * @param index
-     *            the start index of the value to be read.
-     * @return the read value.
-     */
-    static short readShort(final byte[] b, final int index) {
-        return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
-    }
-
-    /**
-     * Reads a signed int value in the given byte array.
-     * 
-     * @param b
-     *            a byte array.
-     * @param index
-     *            the start index of the value to be read.
-     * @return the read value.
-     */
-    static int readInt(final byte[] b, final int index) {
-        return ((b[index] & 0xFF) << 24) | ((b[index + 1] & 0xFF) << 16)
-                | ((b[index + 2] & 0xFF) << 8) | (b[index + 3] & 0xFF);
-    }
-
-    /**
-     * Writes a short value in the given byte array.
-     * 
-     * @param b
-     *            a byte array.
-     * @param index
-     *            where the first byte of the short value must be written.
-     * @param s
-     *            the value to be written in the given byte array.
-     */
-    static void writeShort(final byte[] b, final int index, final int s) {
-        b[index] = (byte) (s >>> 8);
-        b[index + 1] = (byte) s;
-    }
-
-    /**
-     * Computes the future value of a bytecode offset.
-     * <p>
-     * Note: it is possible to have several entries for the same instruction in
-     * the <tt>indexes</tt> and <tt>sizes</tt>: two entries (index=a,size=b) and
-     * (index=a,size=b') are equivalent to a single entry (index=a,size=b+b').
-     * 
-     * @param indexes
-     *            current positions of the instructions to be resized. Each
-     *            instruction must be designated by the index of its <i>last</i>
-     *            byte, plus one (or, in other words, by the index of the
-     *            <i>first</i> byte of the <i>next</i> instruction).
-     * @param sizes
-     *            the number of bytes to be <i>added</i> to the above
-     *            instructions. More precisely, for each i < <tt>len</tt>,
-     *            <tt>sizes</tt>[i] bytes will be added at the end of the
-     *            instruction designated by <tt>indexes</tt>[i] or, if
-     *            <tt>sizes</tt>[i] is negative, the <i>last</i> |
-     *            <tt>sizes[i]</tt>| bytes of the instruction will be removed
-     *            (the instruction size <i>must not</i> become negative or
-     *            null).
-     * @param begin
-     *            index of the first byte of the source instruction.
-     * @param end
-     *            index of the first byte of the target instruction.
-     * @return the future value of the given bytecode offset.
-     */
-    static int getNewOffset(final int[] indexes, final int[] sizes,
-            final int begin, final int end) {
-        int offset = end - begin;
-        for (int i = 0; i < indexes.length; ++i) {
-            if (begin < indexes[i] && indexes[i] <= end) {
-                // forward jump
-                offset += sizes[i];
-            } else if (end < indexes[i] && indexes[i] <= begin) {
-                // backward jump
-                offset -= sizes[i];
-            }
-        }
-        return offset;
-    }
-
-    /**
-     * Updates the offset of the given label.
-     * 
-     * @param indexes
-     *            current positions of the instructions to be resized. Each
-     *            instruction must be designated by the index of its <i>last</i>
-     *            byte, plus one (or, in other words, by the index of the
-     *            <i>first</i> byte of the <i>next</i> instruction).
-     * @param sizes
-     *            the number of bytes to be <i>added</i> to the above
-     *            instructions. More precisely, for each i < <tt>len</tt>,
-     *            <tt>sizes</tt>[i] bytes will be added at the end of the
-     *            instruction designated by <tt>indexes</tt>[i] or, if
-     *            <tt>sizes</tt>[i] is negative, the <i>last</i> |
-     *            <tt>sizes[i]</tt>| bytes of the instruction will be removed
-     *            (the instruction size <i>must not</i> become negative or
-     *            null).
-     * @param label
-     *            the label whose offset must be updated.
-     */
-    static void getNewOffset(final int[] indexes, final int[] sizes,
-            final Label label) {
-        if ((label.status & Label.RESIZED) == 0) {
-            label.position = getNewOffset(indexes, sizes, 0, label.position);
-            label.status |= Label.RESIZED;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Opcodes.java b/asm4/src/org/objectweb/asm/Opcodes.java
deleted file mode 100644
index d3a6d9a..0000000
--- a/asm4/src/org/objectweb/asm/Opcodes.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-/**
- * Defines the JVM opcodes, access flags and array type codes. This interface
- * does not define all the JVM opcodes because some opcodes are automatically
- * handled. For example, the xLOAD and xSTORE opcodes are automatically replaced
- * by xLOAD_n and xSTORE_n opcodes when possible. The xLOAD_n and xSTORE_n
- * opcodes are therefore not defined in this interface. Likewise for LDC,
- * automatically replaced by LDC_W or LDC2_W when necessary, WIDE, GOTO_W and
- * JSR_W.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public interface Opcodes {
-
-    // ASM API versions
-
-    int ASM4 = 4 << 16 | 0 << 8 | 0;
-
-    // versions
-
-    int V1_1 = 3 << 16 | 45;
-    int V1_2 = 0 << 16 | 46;
-    int V1_3 = 0 << 16 | 47;
-    int V1_4 = 0 << 16 | 48;
-    int V1_5 = 0 << 16 | 49;
-    int V1_6 = 0 << 16 | 50;
-    int V1_7 = 0 << 16 | 51;
-
-    // access flags
-
-    int ACC_PUBLIC = 0x0001; // class, field, method
-    int ACC_PRIVATE = 0x0002; // class, field, method
-    int ACC_PROTECTED = 0x0004; // class, field, method
-    int ACC_STATIC = 0x0008; // field, method
-    int ACC_FINAL = 0x0010; // class, field, method
-    int ACC_SUPER = 0x0020; // class
-    int ACC_SYNCHRONIZED = 0x0020; // method
-    int ACC_VOLATILE = 0x0040; // field
-    int ACC_BRIDGE = 0x0040; // method
-    int ACC_VARARGS = 0x0080; // method
-    int ACC_TRANSIENT = 0x0080; // field
-    int ACC_NATIVE = 0x0100; // method
-    int ACC_INTERFACE = 0x0200; // class
-    int ACC_ABSTRACT = 0x0400; // class, method
-    int ACC_STRICT = 0x0800; // method
-    int ACC_SYNTHETIC = 0x1000; // class, field, method
-    int ACC_ANNOTATION = 0x2000; // class
-    int ACC_ENUM = 0x4000; // class(?) field inner
-
-    // ASM specific pseudo access flags
-
-    int ACC_DEPRECATED = 0x20000; // class, field, method
-
-    // types for NEWARRAY
-
-    int T_BOOLEAN = 4;
-    int T_CHAR = 5;
-    int T_FLOAT = 6;
-    int T_DOUBLE = 7;
-    int T_BYTE = 8;
-    int T_SHORT = 9;
-    int T_INT = 10;
-    int T_LONG = 11;
-
-    // tags for Handle
-
-    int H_GETFIELD = 1;
-    int H_GETSTATIC = 2;
-    int H_PUTFIELD = 3;
-    int H_PUTSTATIC = 4;
-    int H_INVOKEVIRTUAL = 5;
-    int H_INVOKESTATIC = 6;
-    int H_INVOKESPECIAL = 7;
-    int H_NEWINVOKESPECIAL = 8;
-    int H_INVOKEINTERFACE = 9;
-
-    // stack map frame types
-
-    /**
-     * Represents an expanded frame. See {@link ClassReader#EXPAND_FRAMES}.
-     */
-    int F_NEW = -1;
-
-    /**
-     * Represents a compressed frame with complete frame data.
-     */
-    int F_FULL = 0;
-
-    /**
-     * Represents a compressed frame where locals are the same as the locals in
-     * the previous frame, except that additional 1-3 locals are defined, and
-     * with an empty stack.
-     */
-    int F_APPEND = 1;
-
-    /**
-     * Represents a compressed frame where locals are the same as the locals in
-     * the previous frame, except that the last 1-3 locals are absent and with
-     * an empty stack.
-     */
-    int F_CHOP = 2;
-
-    /**
-     * Represents a compressed frame with exactly the same locals as the
-     * previous frame and with an empty stack.
-     */
-    int F_SAME = 3;
-
-    /**
-     * Represents a compressed frame with exactly the same locals as the
-     * previous frame and with a single value on the stack.
-     */
-    int F_SAME1 = 4;
-
-    Integer TOP = new Integer(0);
-    Integer INTEGER = new Integer(1);
-    Integer FLOAT = new Integer(2);
-    Integer DOUBLE = new Integer(3);
-    Integer LONG = new Integer(4);
-    Integer NULL = new Integer(5);
-    Integer UNINITIALIZED_THIS = new Integer(6);
-
-    // opcodes // visit method (- = idem)
-
-    int NOP = 0; // visitInsn
-    int ACONST_NULL = 1; // -
-    int ICONST_M1 = 2; // -
-    int ICONST_0 = 3; // -
-    int ICONST_1 = 4; // -
-    int ICONST_2 = 5; // -
-    int ICONST_3 = 6; // -
-    int ICONST_4 = 7; // -
-    int ICONST_5 = 8; // -
-    int LCONST_0 = 9; // -
-    int LCONST_1 = 10; // -
-    int FCONST_0 = 11; // -
-    int FCONST_1 = 12; // -
-    int FCONST_2 = 13; // -
-    int DCONST_0 = 14; // -
-    int DCONST_1 = 15; // -
-    int BIPUSH = 16; // visitIntInsn
-    int SIPUSH = 17; // -
-    int LDC = 18; // visitLdcInsn
-    // int LDC_W = 19; // -
-    // int LDC2_W = 20; // -
-    int ILOAD = 21; // visitVarInsn
-    int LLOAD = 22; // -
-    int FLOAD = 23; // -
-    int DLOAD = 24; // -
-    int ALOAD = 25; // -
-    // int ILOAD_0 = 26; // -
-    // int ILOAD_1 = 27; // -
-    // int ILOAD_2 = 28; // -
-    // int ILOAD_3 = 29; // -
-    // int LLOAD_0 = 30; // -
-    // int LLOAD_1 = 31; // -
-    // int LLOAD_2 = 32; // -
-    // int LLOAD_3 = 33; // -
-    // int FLOAD_0 = 34; // -
-    // int FLOAD_1 = 35; // -
-    // int FLOAD_2 = 36; // -
-    // int FLOAD_3 = 37; // -
-    // int DLOAD_0 = 38; // -
-    // int DLOAD_1 = 39; // -
-    // int DLOAD_2 = 40; // -
-    // int DLOAD_3 = 41; // -
-    // int ALOAD_0 = 42; // -
-    // int ALOAD_1 = 43; // -
-    // int ALOAD_2 = 44; // -
-    // int ALOAD_3 = 45; // -
-    int IALOAD = 46; // visitInsn
-    int LALOAD = 47; // -
-    int FALOAD = 48; // -
-    int DALOAD = 49; // -
-    int AALOAD = 50; // -
-    int BALOAD = 51; // -
-    int CALOAD = 52; // -
-    int SALOAD = 53; // -
-    int ISTORE = 54; // visitVarInsn
-    int LSTORE = 55; // -
-    int FSTORE = 56; // -
-    int DSTORE = 57; // -
-    int ASTORE = 58; // -
-    // int ISTORE_0 = 59; // -
-    // int ISTORE_1 = 60; // -
-    // int ISTORE_2 = 61; // -
-    // int ISTORE_3 = 62; // -
-    // int LSTORE_0 = 63; // -
-    // int LSTORE_1 = 64; // -
-    // int LSTORE_2 = 65; // -
-    // int LSTORE_3 = 66; // -
-    // int FSTORE_0 = 67; // -
-    // int FSTORE_1 = 68; // -
-    // int FSTORE_2 = 69; // -
-    // int FSTORE_3 = 70; // -
-    // int DSTORE_0 = 71; // -
-    // int DSTORE_1 = 72; // -
-    // int DSTORE_2 = 73; // -
-    // int DSTORE_3 = 74; // -
-    // int ASTORE_0 = 75; // -
-    // int ASTORE_1 = 76; // -
-    // int ASTORE_2 = 77; // -
-    // int ASTORE_3 = 78; // -
-    int IASTORE = 79; // visitInsn
-    int LASTORE = 80; // -
-    int FASTORE = 81; // -
-    int DASTORE = 82; // -
-    int AASTORE = 83; // -
-    int BASTORE = 84; // -
-    int CASTORE = 85; // -
-    int SASTORE = 86; // -
-    int POP = 87; // -
-    int POP2 = 88; // -
-    int DUP = 89; // -
-    int DUP_X1 = 90; // -
-    int DUP_X2 = 91; // -
-    int DUP2 = 92; // -
-    int DUP2_X1 = 93; // -
-    int DUP2_X2 = 94; // -
-    int SWAP = 95; // -
-    int IADD = 96; // -
-    int LADD = 97; // -
-    int FADD = 98; // -
-    int DADD = 99; // -
-    int ISUB = 100; // -
-    int LSUB = 101; // -
-    int FSUB = 102; // -
-    int DSUB = 103; // -
-    int IMUL = 104; // -
-    int LMUL = 105; // -
-    int FMUL = 106; // -
-    int DMUL = 107; // -
-    int IDIV = 108; // -
-    int LDIV = 109; // -
-    int FDIV = 110; // -
-    int DDIV = 111; // -
-    int IREM = 112; // -
-    int LREM = 113; // -
-    int FREM = 114; // -
-    int DREM = 115; // -
-    int INEG = 116; // -
-    int LNEG = 117; // -
-    int FNEG = 118; // -
-    int DNEG = 119; // -
-    int ISHL = 120; // -
-    int LSHL = 121; // -
-    int ISHR = 122; // -
-    int LSHR = 123; // -
-    int IUSHR = 124; // -
-    int LUSHR = 125; // -
-    int IAND = 126; // -
-    int LAND = 127; // -
-    int IOR = 128; // -
-    int LOR = 129; // -
-    int IXOR = 130; // -
-    int LXOR = 131; // -
-    int IINC = 132; // visitIincInsn
-    int I2L = 133; // visitInsn
-    int I2F = 134; // -
-    int I2D = 135; // -
-    int L2I = 136; // -
-    int L2F = 137; // -
-    int L2D = 138; // -
-    int F2I = 139; // -
-    int F2L = 140; // -
-    int F2D = 141; // -
-    int D2I = 142; // -
-    int D2L = 143; // -
-    int D2F = 144; // -
-    int I2B = 145; // -
-    int I2C = 146; // -
-    int I2S = 147; // -
-    int LCMP = 148; // -
-    int FCMPL = 149; // -
-    int FCMPG = 150; // -
-    int DCMPL = 151; // -
-    int DCMPG = 152; // -
-    int IFEQ = 153; // visitJumpInsn
-    int IFNE = 154; // -
-    int IFLT = 155; // -
-    int IFGE = 156; // -
-    int IFGT = 157; // -
-    int IFLE = 158; // -
-    int IF_ICMPEQ = 159; // -
-    int IF_ICMPNE = 160; // -
-    int IF_ICMPLT = 161; // -
-    int IF_ICMPGE = 162; // -
-    int IF_ICMPGT = 163; // -
-    int IF_ICMPLE = 164; // -
-    int IF_ACMPEQ = 165; // -
-    int IF_ACMPNE = 166; // -
-    int GOTO = 167; // -
-    int JSR = 168; // -
-    int RET = 169; // visitVarInsn
-    int TABLESWITCH = 170; // visiTableSwitchInsn
-    int LOOKUPSWITCH = 171; // visitLookupSwitch
-    int IRETURN = 172; // visitInsn
-    int LRETURN = 173; // -
-    int FRETURN = 174; // -
-    int DRETURN = 175; // -
-    int ARETURN = 176; // -
-    int RETURN = 177; // -
-    int GETSTATIC = 178; // visitFieldInsn
-    int PUTSTATIC = 179; // -
-    int GETFIELD = 180; // -
-    int PUTFIELD = 181; // -
-    int INVOKEVIRTUAL = 182; // visitMethodInsn
-    int INVOKESPECIAL = 183; // -
-    int INVOKESTATIC = 184; // -
-    int INVOKEINTERFACE = 185; // -
-    int INVOKEDYNAMIC = 186; // visitInvokeDynamicInsn
-    int NEW = 187; // visitTypeInsn
-    int NEWARRAY = 188; // visitIntInsn
-    int ANEWARRAY = 189; // visitTypeInsn
-    int ARRAYLENGTH = 190; // visitInsn
-    int ATHROW = 191; // -
-    int CHECKCAST = 192; // visitTypeInsn
-    int INSTANCEOF = 193; // -
-    int MONITORENTER = 194; // visitInsn
-    int MONITOREXIT = 195; // -
-    // int WIDE = 196; // NOT VISITED
-    int MULTIANEWARRAY = 197; // visitMultiANewArrayInsn
-    int IFNULL = 198; // visitJumpInsn
-    int IFNONNULL = 199; // -
-    // int GOTO_W = 200; // -
-    // int JSR_W = 201; // -
-}
diff --git a/asm4/src/org/objectweb/asm/Type.java b/asm4/src/org/objectweb/asm/Type.java
deleted file mode 100644
index be69a2c..0000000
--- a/asm4/src/org/objectweb/asm/Type.java
+++ /dev/null
@@ -1,895 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-/**
- * A Java field or method type. This class can be used to make it easier to
- * manipulate type and method descriptors.
- * 
- * @author Eric Bruneton
- * @author Chris Nokleberg
- */
-public class Type {
-
-    /**
-     * The sort of the <tt>void</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int VOID = 0;
-
-    /**
-     * The sort of the <tt>boolean</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int BOOLEAN = 1;
-
-    /**
-     * The sort of the <tt>char</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int CHAR = 2;
-
-    /**
-     * The sort of the <tt>byte</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int BYTE = 3;
-
-    /**
-     * The sort of the <tt>short</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int SHORT = 4;
-
-    /**
-     * The sort of the <tt>int</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int INT = 5;
-
-    /**
-     * The sort of the <tt>float</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int FLOAT = 6;
-
-    /**
-     * The sort of the <tt>long</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int LONG = 7;
-
-    /**
-     * The sort of the <tt>double</tt> type. See {@link #getSort getSort}.
-     */
-    public static final int DOUBLE = 8;
-
-    /**
-     * The sort of array reference types. See {@link #getSort getSort}.
-     */
-    public static final int ARRAY = 9;
-
-    /**
-     * The sort of object reference types. See {@link #getSort getSort}.
-     */
-    public static final int OBJECT = 10;
-
-    /**
-     * The sort of method types. See {@link #getSort getSort}.
-     */
-    public static final int METHOD = 11;
-
-    /**
-     * The <tt>void</tt> type.
-     */
-    public static final Type VOID_TYPE = new Type(VOID, null, ('V' << 24)
-            | (5 << 16) | (0 << 8) | 0, 1);
-
-    /**
-     * The <tt>boolean</tt> type.
-     */
-    public static final Type BOOLEAN_TYPE = new Type(BOOLEAN, null, ('Z' << 24)
-            | (0 << 16) | (5 << 8) | 1, 1);
-
-    /**
-     * The <tt>char</tt> type.
-     */
-    public static final Type CHAR_TYPE = new Type(CHAR, null, ('C' << 24)
-            | (0 << 16) | (6 << 8) | 1, 1);
-
-    /**
-     * The <tt>byte</tt> type.
-     */
-    public static final Type BYTE_TYPE = new Type(BYTE, null, ('B' << 24)
-            | (0 << 16) | (5 << 8) | 1, 1);
-
-    /**
-     * The <tt>short</tt> type.
-     */
-    public static final Type SHORT_TYPE = new Type(SHORT, null, ('S' << 24)
-            | (0 << 16) | (7 << 8) | 1, 1);
-
-    /**
-     * The <tt>int</tt> type.
-     */
-    public static final Type INT_TYPE = new Type(INT, null, ('I' << 24)
-            | (0 << 16) | (0 << 8) | 1, 1);
-
-    /**
-     * The <tt>float</tt> type.
-     */
-    public static final Type FLOAT_TYPE = new Type(FLOAT, null, ('F' << 24)
-            | (2 << 16) | (2 << 8) | 1, 1);
-
-    /**
-     * The <tt>long</tt> type.
-     */
-    public static final Type LONG_TYPE = new Type(LONG, null, ('J' << 24)
-            | (1 << 16) | (1 << 8) | 2, 1);
-
-    /**
-     * The <tt>double</tt> type.
-     */
-    public static final Type DOUBLE_TYPE = new Type(DOUBLE, null, ('D' << 24)
-            | (3 << 16) | (3 << 8) | 2, 1);
-
-    // ------------------------------------------------------------------------
-    // Fields
-    // ------------------------------------------------------------------------
-
-    /**
-     * The sort of this Java type.
-     */
-    private final int sort;
-
-    /**
-     * A buffer containing the internal name of this Java type. This field is
-     * only used for reference types.
-     */
-    private final char[] buf;
-
-    /**
-     * The offset of the internal name of this Java type in {@link #buf buf} or,
-     * for primitive types, the size, descriptor and getOpcode offsets for this
-     * type (byte 0 contains the size, byte 1 the descriptor, byte 2 the offset
-     * for IALOAD or IASTORE, byte 3 the offset for all other instructions).
-     */
-    private final int off;
-
-    /**
-     * The length of the internal name of this Java type.
-     */
-    private final int len;
-
-    // ------------------------------------------------------------------------
-    // Constructors
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a reference type.
-     * 
-     * @param sort
-     *            the sort of the reference type to be constructed.
-     * @param buf
-     *            a buffer containing the descriptor of the previous type.
-     * @param off
-     *            the offset of this descriptor in the previous buffer.
-     * @param len
-     *            the length of this descriptor.
-     */
-    private Type(final int sort, final char[] buf, final int off, final int len) {
-        this.sort = sort;
-        this.buf = buf;
-        this.off = off;
-        this.len = len;
-    }
-
-    /**
-     * Returns the Java type corresponding to the given type descriptor.
-     * 
-     * @param typeDescriptor
-     *            a field or method type descriptor.
-     * @return the Java type corresponding to the given type descriptor.
-     */
-    public static Type getType(final String typeDescriptor) {
-        return getType(typeDescriptor.toCharArray(), 0);
-    }
-
-    /**
-     * Returns the Java type corresponding to the given internal name.
-     * 
-     * @param internalName
-     *            an internal name.
-     * @return the Java type corresponding to the given internal name.
-     */
-    public static Type getObjectType(final String internalName) {
-        char[] buf = internalName.toCharArray();
-        return new Type(buf[0] == '[' ? ARRAY : OBJECT, buf, 0, buf.length);
-    }
-
-    /**
-     * Returns the Java type corresponding to the given method descriptor.
-     * Equivalent to <code>Type.getType(methodDescriptor)</code>.
-     * 
-     * @param methodDescriptor
-     *            a method descriptor.
-     * @return the Java type corresponding to the given method descriptor.
-     */
-    public static Type getMethodType(final String methodDescriptor) {
-        return getType(methodDescriptor.toCharArray(), 0);
-    }
-
-    /**
-     * Returns the Java method type corresponding to the given argument and
-     * return types.
-     * 
-     * @param returnType
-     *            the return type of the method.
-     * @param argumentTypes
-     *            the argument types of the method.
-     * @return the Java type corresponding to the given argument and return
-     *         types.
-     */
-    public static Type getMethodType(final Type returnType,
-            final Type... argumentTypes) {
-        return getType(getMethodDescriptor(returnType, argumentTypes));
-    }
-
-    /**
-     * Returns the Java type corresponding to the given class.
-     * 
-     * @param c
-     *            a class.
-     * @return the Java type corresponding to the given class.
-     */
-    public static Type getType(final Class<?> c) {
-        if (c.isPrimitive()) {
-            if (c == Integer.TYPE) {
-                return INT_TYPE;
-            } else if (c == Void.TYPE) {
-                return VOID_TYPE;
-            } else if (c == Boolean.TYPE) {
-                return BOOLEAN_TYPE;
-            } else if (c == Byte.TYPE) {
-                return BYTE_TYPE;
-            } else if (c == Character.TYPE) {
-                return CHAR_TYPE;
-            } else if (c == Short.TYPE) {
-                return SHORT_TYPE;
-            } else if (c == Double.TYPE) {
-                return DOUBLE_TYPE;
-            } else if (c == Float.TYPE) {
-                return FLOAT_TYPE;
-            } else /* if (c == Long.TYPE) */{
-                return LONG_TYPE;
-            }
-        } else {
-            return getType(getDescriptor(c));
-        }
-    }
-
-    /**
-     * Returns the Java method type corresponding to the given constructor.
-     * 
-     * @param c
-     *            a {@link Constructor Constructor} object.
-     * @return the Java method type corresponding to the given constructor.
-     */
-    public static Type getType(final Constructor<?> c) {
-        return getType(getConstructorDescriptor(c));
-    }
-
-    /**
-     * Returns the Java method type corresponding to the given method.
-     * 
-     * @param m
-     *            a {@link Method Method} object.
-     * @return the Java method type corresponding to the given method.
-     */
-    public static Type getType(final Method m) {
-        return getType(getMethodDescriptor(m));
-    }
-
-    /**
-     * Returns the Java types corresponding to the argument types of the given
-     * method descriptor.
-     * 
-     * @param methodDescriptor
-     *            a method descriptor.
-     * @return the Java types corresponding to the argument types of the given
-     *         method descriptor.
-     */
-    public static Type[] getArgumentTypes(final String methodDescriptor) {
-        char[] buf = methodDescriptor.toCharArray();
-        int off = 1;
-        int size = 0;
-        while (true) {
-            char car = buf[off++];
-            if (car == ')') {
-                break;
-            } else if (car == 'L') {
-                while (buf[off++] != ';') {
-                }
-                ++size;
-            } else if (car != '[') {
-                ++size;
-            }
-        }
-        Type[] args = new Type[size];
-        off = 1;
-        size = 0;
-        while (buf[off] != ')') {
-            args[size] = getType(buf, off);
-            off += args[size].len + (args[size].sort == OBJECT ? 2 : 0);
-            size += 1;
-        }
-        return args;
-    }
-
-    /**
-     * Returns the Java types corresponding to the argument types of the given
-     * method.
-     * 
-     * @param method
-     *            a method.
-     * @return the Java types corresponding to the argument types of the given
-     *         method.
-     */
-    public static Type[] getArgumentTypes(final Method method) {
-        Class<?>[] classes = method.getParameterTypes();
-        Type[] types = new Type[classes.length];
-        for (int i = classes.length - 1; i >= 0; --i) {
-            types[i] = getType(classes[i]);
-        }
-        return types;
-    }
-
-    /**
-     * Returns the Java type corresponding to the return type of the given
-     * method descriptor.
-     * 
-     * @param methodDescriptor
-     *            a method descriptor.
-     * @return the Java type corresponding to the return type of the given
-     *         method descriptor.
-     */
-    public static Type getReturnType(final String methodDescriptor) {
-        char[] buf = methodDescriptor.toCharArray();
-        return getType(buf, methodDescriptor.indexOf(')') + 1);
-    }
-
-    /**
-     * Returns the Java type corresponding to the return type of the given
-     * method.
-     * 
-     * @param method
-     *            a method.
-     * @return the Java type corresponding to the return type of the given
-     *         method.
-     */
-    public static Type getReturnType(final Method method) {
-        return getType(method.getReturnType());
-    }
-
-    /**
-     * Computes the size of the arguments and of the return value of a method.
-     * 
-     * @param desc
-     *            the descriptor of a method.
-     * @return the size of the arguments of the method (plus one for the
-     *         implicit this argument), argSize, and the size of its return
-     *         value, retSize, packed into a single int i =
-     *         <tt>(argSize << 2) | retSize</tt> (argSize is therefore equal to
-     *         <tt>i >> 2</tt>, and retSize to <tt>i & 0x03</tt>).
-     */
-    public static int getArgumentsAndReturnSizes(final String desc) {
-        int n = 1;
-        int c = 1;
-        while (true) {
-            char car = desc.charAt(c++);
-            if (car == ')') {
-                car = desc.charAt(c);
-                return n << 2
-                        | (car == 'V' ? 0 : (car == 'D' || car == 'J' ? 2 : 1));
-            } else if (car == 'L') {
-                while (desc.charAt(c++) != ';') {
-                }
-                n += 1;
-            } else if (car == '[') {
-                while ((car = desc.charAt(c)) == '[') {
-                    ++c;
-                }
-                if (car == 'D' || car == 'J') {
-                    n -= 1;
-                }
-            } else if (car == 'D' || car == 'J') {
-                n += 2;
-            } else {
-                n += 1;
-            }
-        }
-    }
-
-    /**
-     * Returns the Java type corresponding to the given type descriptor. For
-     * method descriptors, buf is supposed to contain nothing more than the
-     * descriptor itself.
-     * 
-     * @param buf
-     *            a buffer containing a type descriptor.
-     * @param off
-     *            the offset of this descriptor in the previous buffer.
-     * @return the Java type corresponding to the given type descriptor.
-     */
-    private static Type getType(final char[] buf, final int off) {
-        int len;
-        switch (buf[off]) {
-        case 'V':
-            return VOID_TYPE;
-        case 'Z':
-            return BOOLEAN_TYPE;
-        case 'C':
-            return CHAR_TYPE;
-        case 'B':
-            return BYTE_TYPE;
-        case 'S':
-            return SHORT_TYPE;
-        case 'I':
-            return INT_TYPE;
-        case 'F':
-            return FLOAT_TYPE;
-        case 'J':
-            return LONG_TYPE;
-        case 'D':
-            return DOUBLE_TYPE;
-        case '[':
-            len = 1;
-            while (buf[off + len] == '[') {
-                ++len;
-            }
-            if (buf[off + len] == 'L') {
-                ++len;
-                while (buf[off + len] != ';') {
-                    ++len;
-                }
-            }
-            return new Type(ARRAY, buf, off, len + 1);
-        case 'L':
-            len = 1;
-            while (buf[off + len] != ';') {
-                ++len;
-            }
-            return new Type(OBJECT, buf, off + 1, len - 1);
-            // case '(':
-        default:
-            return new Type(METHOD, buf, off, buf.length - off);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Accessors
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the sort of this Java type.
-     * 
-     * @return {@link #VOID VOID}, {@link #BOOLEAN BOOLEAN}, {@link #CHAR CHAR},
-     *         {@link #BYTE BYTE}, {@link #SHORT SHORT}, {@link #INT INT},
-     *         {@link #FLOAT FLOAT}, {@link #LONG LONG}, {@link #DOUBLE DOUBLE},
-     *         {@link #ARRAY ARRAY}, {@link #OBJECT OBJECT} or {@link #METHOD
-     *         METHOD}.
-     */
-    public int getSort() {
-        return sort;
-    }
-
-    /**
-     * Returns the number of dimensions of this array type. This method should
-     * only be used for an array type.
-     * 
-     * @return the number of dimensions of this array type.
-     */
-    public int getDimensions() {
-        int i = 1;
-        while (buf[off + i] == '[') {
-            ++i;
-        }
-        return i;
-    }
-
-    /**
-     * Returns the type of the elements of this array type. This method should
-     * only be used for an array type.
-     * 
-     * @return Returns the type of the elements of this array type.
-     */
-    public Type getElementType() {
-        return getType(buf, off + getDimensions());
-    }
-
-    /**
-     * Returns the binary name of the class corresponding to this type. This
-     * method must not be used on method types.
-     * 
-     * @return the binary name of the class corresponding to this type.
-     */
-    public String getClassName() {
-        switch (sort) {
-        case VOID:
-            return "void";
-        case BOOLEAN:
-            return "boolean";
-        case CHAR:
-            return "char";
-        case BYTE:
-            return "byte";
-        case SHORT:
-            return "short";
-        case INT:
-            return "int";
-        case FLOAT:
-            return "float";
-        case LONG:
-            return "long";
-        case DOUBLE:
-            return "double";
-        case ARRAY:
-            StringBuffer b = new StringBuffer(getElementType().getClassName());
-            for (int i = getDimensions(); i > 0; --i) {
-                b.append("[]");
-            }
-            return b.toString();
-        case OBJECT:
-            return new String(buf, off, len).replace('/', '.');
-        default:
-            return null;
-        }
-    }
-
-    /**
-     * Returns the internal name of the class corresponding to this object or
-     * array type. The internal name of a class is its fully qualified name (as
-     * returned by Class.getName(), where '.' are replaced by '/'. This method
-     * should only be used for an object or array type.
-     * 
-     * @return the internal name of the class corresponding to this object type.
-     */
-    public String getInternalName() {
-        return new String(buf, off, len);
-    }
-
-    /**
-     * Returns the argument types of methods of this type. This method should
-     * only be used for method types.
-     * 
-     * @return the argument types of methods of this type.
-     */
-    public Type[] getArgumentTypes() {
-        return getArgumentTypes(getDescriptor());
-    }
-
-    /**
-     * Returns the return type of methods of this type. This method should only
-     * be used for method types.
-     * 
-     * @return the return type of methods of this type.
-     */
-    public Type getReturnType() {
-        return getReturnType(getDescriptor());
-    }
-
-    /**
-     * Returns the size of the arguments and of the return value of methods of
-     * this type. This method should only be used for method types.
-     * 
-     * @return the size of the arguments (plus one for the implicit this
-     *         argument), argSize, and the size of the return value, retSize,
-     *         packed into a single int i = <tt>(argSize << 2) | retSize</tt>
-     *         (argSize is therefore equal to <tt>i >> 2</tt>, and retSize to
-     *         <tt>i & 0x03</tt>).
-     */
-    public int getArgumentsAndReturnSizes() {
-        return getArgumentsAndReturnSizes(getDescriptor());
-    }
-
-    // ------------------------------------------------------------------------
-    // Conversion to type descriptors
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the descriptor corresponding to this Java type.
-     * 
-     * @return the descriptor corresponding to this Java type.
-     */
-    public String getDescriptor() {
-        StringBuffer buf = new StringBuffer();
-        getDescriptor(buf);
-        return buf.toString();
-    }
-
-    /**
-     * Returns the descriptor corresponding to the given argument and return
-     * types.
-     * 
-     * @param returnType
-     *            the return type of the method.
-     * @param argumentTypes
-     *            the argument types of the method.
-     * @return the descriptor corresponding to the given argument and return
-     *         types.
-     */
-    public static String getMethodDescriptor(final Type returnType,
-            final Type... argumentTypes) {
-        StringBuffer buf = new StringBuffer();
-        buf.append('(');
-        for (int i = 0; i < argumentTypes.length; ++i) {
-            argumentTypes[i].getDescriptor(buf);
-        }
-        buf.append(')');
-        returnType.getDescriptor(buf);
-        return buf.toString();
-    }
-
-    /**
-     * Appends the descriptor corresponding to this Java type to the given
-     * string buffer.
-     * 
-     * @param buf
-     *            the string buffer to which the descriptor must be appended.
-     */
-    private void getDescriptor(final StringBuffer buf) {
-        if (this.buf == null) {
-            // descriptor is in byte 3 of 'off' for primitive types (buf ==
-            // null)
-            buf.append((char) ((off & 0xFF000000) >>> 24));
-        } else if (sort == OBJECT) {
-            buf.append('L');
-            buf.append(this.buf, off, len);
-            buf.append(';');
-        } else { // sort == ARRAY || sort == METHOD
-            buf.append(this.buf, off, len);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Direct conversion from classes to type descriptors,
-    // without intermediate Type objects
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the internal name of the given class. The internal name of a
-     * class is its fully qualified name, as returned by Class.getName(), where
-     * '.' are replaced by '/'.
-     * 
-     * @param c
-     *            an object or array class.
-     * @return the internal name of the given class.
-     */
-    public static String getInternalName(final Class<?> c) {
-        return c.getName().replace('.', '/');
-    }
-
-    /**
-     * Returns the descriptor corresponding to the given Java type.
-     * 
-     * @param c
-     *            an object class, a primitive class or an array class.
-     * @return the descriptor corresponding to the given class.
-     */
-    public static String getDescriptor(final Class<?> c) {
-        StringBuffer buf = new StringBuffer();
-        getDescriptor(buf, c);
-        return buf.toString();
-    }
-
-    /**
-     * Returns the descriptor corresponding to the given constructor.
-     * 
-     * @param c
-     *            a {@link Constructor Constructor} object.
-     * @return the descriptor of the given constructor.
-     */
-    public static String getConstructorDescriptor(final Constructor<?> c) {
-        Class<?>[] parameters = c.getParameterTypes();
-        StringBuffer buf = new StringBuffer();
-        buf.append('(');
-        for (int i = 0; i < parameters.length; ++i) {
-            getDescriptor(buf, parameters[i]);
-        }
-        return buf.append(")V").toString();
-    }
-
-    /**
-     * Returns the descriptor corresponding to the given method.
-     * 
-     * @param m
-     *            a {@link Method Method} object.
-     * @return the descriptor of the given method.
-     */
-    public static String getMethodDescriptor(final Method m) {
-        Class<?>[] parameters = m.getParameterTypes();
-        StringBuffer buf = new StringBuffer();
-        buf.append('(');
-        for (int i = 0; i < parameters.length; ++i) {
-            getDescriptor(buf, parameters[i]);
-        }
-        buf.append(')');
-        getDescriptor(buf, m.getReturnType());
-        return buf.toString();
-    }
-
-    /**
-     * Appends the descriptor of the given class to the given string buffer.
-     * 
-     * @param buf
-     *            the string buffer to which the descriptor must be appended.
-     * @param c
-     *            the class whose descriptor must be computed.
-     */
-    private static void getDescriptor(final StringBuffer buf, final Class<?> c) {
-        Class<?> d = c;
-        while (true) {
-            if (d.isPrimitive()) {
-                char car;
-                if (d == Integer.TYPE) {
-                    car = 'I';
-                } else if (d == Void.TYPE) {
-                    car = 'V';
-                } else if (d == Boolean.TYPE) {
-                    car = 'Z';
-                } else if (d == Byte.TYPE) {
-                    car = 'B';
-                } else if (d == Character.TYPE) {
-                    car = 'C';
-                } else if (d == Short.TYPE) {
-                    car = 'S';
-                } else if (d == Double.TYPE) {
-                    car = 'D';
-                } else if (d == Float.TYPE) {
-                    car = 'F';
-                } else /* if (d == Long.TYPE) */{
-                    car = 'J';
-                }
-                buf.append(car);
-                return;
-            } else if (d.isArray()) {
-                buf.append('[');
-                d = d.getComponentType();
-            } else {
-                buf.append('L');
-                String name = d.getName();
-                int len = name.length();
-                for (int i = 0; i < len; ++i) {
-                    char car = name.charAt(i);
-                    buf.append(car == '.' ? '/' : car);
-                }
-                buf.append(';');
-                return;
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Corresponding size and opcodes
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the size of values of this type. This method must not be used for
-     * method types.
-     * 
-     * @return the size of values of this type, i.e., 2 for <tt>long</tt> and
-     *         <tt>double</tt>, 0 for <tt>void</tt> and 1 otherwise.
-     */
-    public int getSize() {
-        // the size is in byte 0 of 'off' for primitive types (buf == null)
-        return buf == null ? (off & 0xFF) : 1;
-    }
-
-    /**
-     * Returns a JVM instruction opcode adapted to this Java type. This method
-     * must not be used for method types.
-     * 
-     * @param opcode
-     *            a JVM instruction opcode. This opcode must be one of ILOAD,
-     *            ISTORE, IALOAD, IASTORE, IADD, ISUB, IMUL, IDIV, IREM, INEG,
-     *            ISHL, ISHR, IUSHR, IAND, IOR, IXOR and IRETURN.
-     * @return an opcode that is similar to the given opcode, but adapted to
-     *         this Java type. For example, if this type is <tt>float</tt> and
-     *         <tt>opcode</tt> is IRETURN, this method returns FRETURN.
-     */
-    public int getOpcode(final int opcode) {
-        if (opcode == Opcodes.IALOAD || opcode == Opcodes.IASTORE) {
-            // the offset for IALOAD or IASTORE is in byte 1 of 'off' for
-            // primitive types (buf == null)
-            return opcode + (buf == null ? (off & 0xFF00) >> 8 : 4);
-        } else {
-            // the offset for other instructions is in byte 2 of 'off' for
-            // primitive types (buf == null)
-            return opcode + (buf == null ? (off & 0xFF0000) >> 16 : 4);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Equals, hashCode and toString
-    // ------------------------------------------------------------------------
-
-    /**
-     * Tests if the given object is equal to this type.
-     * 
-     * @param o
-     *            the object to be compared to this type.
-     * @return <tt>true</tt> if the given object is equal to this type.
-     */
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (!(o instanceof Type)) {
-            return false;
-        }
-        Type t = (Type) o;
-        if (sort != t.sort) {
-            return false;
-        }
-        if (sort >= ARRAY) {
-            if (len != t.len) {
-                return false;
-            }
-            for (int i = off, j = t.off, end = i + len; i < end; i++, j++) {
-                if (buf[i] != t.buf[j]) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Returns a hash code value for this type.
-     * 
-     * @return a hash code value for this type.
-     */
-    @Override
-    public int hashCode() {
-        int hc = 13 * sort;
-        if (sort >= ARRAY) {
-            for (int i = off, end = i + len; i < end; i++) {
-                hc = 17 * (hc + buf[i]);
-            }
-        }
-        return hc;
-    }
-
-    /**
-     * Returns a string representation of this type.
-     * 
-     * @return the descriptor of this type.
-     */
-    @Override
-    public String toString() {
-        return getDescriptor();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/attrs/package.html b/asm4/src/org/objectweb/asm/attrs/package.html
deleted file mode 100644
index 28d827d..0000000
--- a/asm4/src/org/objectweb/asm/attrs/package.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-Provides an implementation for optional class, field and method attributes.
-
-<p>
-
-By default ASM strips optional attributes, in order to keep them in
-the bytecode that is being readed you should pass an array of required attribute
-instances to {@link org.objectweb.asm.ClassReader#accept(org.objectweb.asm.ClassVisitor, org.objectweb.asm.Attribute[], boolean) ClassReader.accept()} method.
-In order to add custom attributes to the manually constructed bytecode concrete
-subclasses of the {@link org.objectweb.asm.Attribute Attribute} can be passed to
-the visitAttribute methods of the
-{@link org.objectweb.asm.ClassVisitor ClassVisitor},
-{@link org.objectweb.asm.FieldVisitor FieldVisitor} and
-{@link org.objectweb.asm.MethodVisitor MethodVisitor} interfaces.
-
-@since ASM 1.4.1
-</body>
-</html>
diff --git a/asm4/src/org/objectweb/asm/commons/AdviceAdapter.java b/asm4/src/org/objectweb/asm/commons/AdviceAdapter.java
deleted file mode 100644
index c693215..0000000
--- a/asm4/src/org/objectweb/asm/commons/AdviceAdapter.java
+++ /dev/null
@@ -1,625 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link org.objectweb.asm.MethodVisitor} to insert before, after and around
- * advices in methods and constructors.
- * <p>
- * The behavior for constructors is like this:
- * <ol>
- * 
- * <li>as long as the INVOKESPECIAL for the object initialization has not been
- * reached, every bytecode instruction is dispatched in the ctor code visitor</li>
- * 
- * <li>when this one is reached, it is only added in the ctor code visitor and a
- * JP invoke is added</li>
- * 
- * <li>after that, only the other code visitor receives the instructions</li>
- * 
- * </ol>
- * 
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public abstract class AdviceAdapter extends GeneratorAdapter implements Opcodes {
-
-    private static final Object THIS = new Object();
-
-    private static final Object OTHER = new Object();
-
-    protected int methodAccess;
-
-    protected String methodDesc;
-
-    private boolean constructor;
-
-    private boolean superInitialized;
-
-    private List<Object> stackFrame;
-
-    private Map<Label, List<Object>> branches;
-
-    /**
-     * Creates a new {@link AdviceAdapter}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param mv
-     *            the method visitor to which this adapter delegates calls.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     */
-    protected AdviceAdapter(final int api, final MethodVisitor mv,
-            final int access, final String name, final String desc) {
-        super(api, mv, access, name, desc);
-        methodAccess = access;
-        methodDesc = desc;
-        constructor = "<init>".equals(name);
-    }
-
-    @Override
-    public void visitCode() {
-        mv.visitCode();
-        if (constructor) {
-            stackFrame = new ArrayList<Object>();
-            branches = new HashMap<Label, List<Object>>();
-        } else {
-            superInitialized = true;
-            onMethodEnter();
-        }
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        mv.visitLabel(label);
-        if (constructor && branches != null) {
-            List<Object> frame = branches.get(label);
-            if (frame != null) {
-                stackFrame = frame;
-                branches.remove(label);
-            }
-        }
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        if (constructor) {
-            int s;
-            switch (opcode) {
-            case RETURN: // empty stack
-                onMethodExit(opcode);
-                break;
-            case IRETURN: // 1 before n/a after
-            case FRETURN: // 1 before n/a after
-            case ARETURN: // 1 before n/a after
-            case ATHROW: // 1 before n/a after
-                popValue();
-                onMethodExit(opcode);
-                break;
-            case LRETURN: // 2 before n/a after
-            case DRETURN: // 2 before n/a after
-                popValue();
-                popValue();
-                onMethodExit(opcode);
-                break;
-            case NOP:
-            case LALOAD: // remove 2 add 2
-            case DALOAD: // remove 2 add 2
-            case LNEG:
-            case DNEG:
-            case FNEG:
-            case INEG:
-            case L2D:
-            case D2L:
-            case F2I:
-            case I2B:
-            case I2C:
-            case I2S:
-            case I2F:
-            case ARRAYLENGTH:
-                break;
-            case ACONST_NULL:
-            case ICONST_M1:
-            case ICONST_0:
-            case ICONST_1:
-            case ICONST_2:
-            case ICONST_3:
-            case ICONST_4:
-            case ICONST_5:
-            case FCONST_0:
-            case FCONST_1:
-            case FCONST_2:
-            case F2L: // 1 before 2 after
-            case F2D:
-            case I2L:
-            case I2D:
-                pushValue(OTHER);
-                break;
-            case LCONST_0:
-            case LCONST_1:
-            case DCONST_0:
-            case DCONST_1:
-                pushValue(OTHER);
-                pushValue(OTHER);
-                break;
-            case IALOAD: // remove 2 add 1
-            case FALOAD: // remove 2 add 1
-            case AALOAD: // remove 2 add 1
-            case BALOAD: // remove 2 add 1
-            case CALOAD: // remove 2 add 1
-            case SALOAD: // remove 2 add 1
-            case POP:
-            case IADD:
-            case FADD:
-            case ISUB:
-            case LSHL: // 3 before 2 after
-            case LSHR: // 3 before 2 after
-            case LUSHR: // 3 before 2 after
-            case L2I: // 2 before 1 after
-            case L2F: // 2 before 1 after
-            case D2I: // 2 before 1 after
-            case D2F: // 2 before 1 after
-            case FSUB:
-            case FMUL:
-            case FDIV:
-            case FREM:
-            case FCMPL: // 2 before 1 after
-            case FCMPG: // 2 before 1 after
-            case IMUL:
-            case IDIV:
-            case IREM:
-            case ISHL:
-            case ISHR:
-            case IUSHR:
-            case IAND:
-            case IOR:
-            case IXOR:
-            case MONITORENTER:
-            case MONITOREXIT:
-                popValue();
-                break;
-            case POP2:
-            case LSUB:
-            case LMUL:
-            case LDIV:
-            case LREM:
-            case LADD:
-            case LAND:
-            case LOR:
-            case LXOR:
-            case DADD:
-            case DMUL:
-            case DSUB:
-            case DDIV:
-            case DREM:
-                popValue();
-                popValue();
-                break;
-            case IASTORE:
-            case FASTORE:
-            case AASTORE:
-            case BASTORE:
-            case CASTORE:
-            case SASTORE:
-            case LCMP: // 4 before 1 after
-            case DCMPL:
-            case DCMPG:
-                popValue();
-                popValue();
-                popValue();
-                break;
-            case LASTORE:
-            case DASTORE:
-                popValue();
-                popValue();
-                popValue();
-                popValue();
-                break;
-            case DUP:
-                pushValue(peekValue());
-                break;
-            case DUP_X1:
-                s = stackFrame.size();
-                stackFrame.add(s - 2, stackFrame.get(s - 1));
-                break;
-            case DUP_X2:
-                s = stackFrame.size();
-                stackFrame.add(s - 3, stackFrame.get(s - 1));
-                break;
-            case DUP2:
-                s = stackFrame.size();
-                stackFrame.add(s - 2, stackFrame.get(s - 1));
-                stackFrame.add(s - 2, stackFrame.get(s - 1));
-                break;
-            case DUP2_X1:
-                s = stackFrame.size();
-                stackFrame.add(s - 3, stackFrame.get(s - 1));
-                stackFrame.add(s - 3, stackFrame.get(s - 1));
-                break;
-            case DUP2_X2:
-                s = stackFrame.size();
-                stackFrame.add(s - 4, stackFrame.get(s - 1));
-                stackFrame.add(s - 4, stackFrame.get(s - 1));
-                break;
-            case SWAP:
-                s = stackFrame.size();
-                stackFrame.add(s - 2, stackFrame.get(s - 1));
-                stackFrame.remove(s);
-                break;
-            }
-        } else {
-            switch (opcode) {
-            case RETURN:
-            case IRETURN:
-            case FRETURN:
-            case ARETURN:
-            case LRETURN:
-            case DRETURN:
-            case ATHROW:
-                onMethodExit(opcode);
-                break;
-            }
-        }
-        mv.visitInsn(opcode);
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        super.visitVarInsn(opcode, var);
-        if (constructor) {
-            switch (opcode) {
-            case ILOAD:
-            case FLOAD:
-                pushValue(OTHER);
-                break;
-            case LLOAD:
-            case DLOAD:
-                pushValue(OTHER);
-                pushValue(OTHER);
-                break;
-            case ALOAD:
-                pushValue(var == 0 ? THIS : OTHER);
-                break;
-            case ASTORE:
-            case ISTORE:
-            case FSTORE:
-                popValue();
-                break;
-            case LSTORE:
-            case DSTORE:
-                popValue();
-                popValue();
-                break;
-            }
-        }
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        mv.visitFieldInsn(opcode, owner, name, desc);
-        if (constructor) {
-            char c = desc.charAt(0);
-            boolean longOrDouble = c == 'J' || c == 'D';
-            switch (opcode) {
-            case GETSTATIC:
-                pushValue(OTHER);
-                if (longOrDouble) {
-                    pushValue(OTHER);
-                }
-                break;
-            case PUTSTATIC:
-                popValue();
-                if (longOrDouble) {
-                    popValue();
-                }
-                break;
-            case PUTFIELD:
-                popValue();
-                if (longOrDouble) {
-                    popValue();
-                    popValue();
-                }
-                break;
-            // case GETFIELD:
-            default:
-                if (longOrDouble) {
-                    pushValue(OTHER);
-                }
-            }
-        }
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        mv.visitIntInsn(opcode, operand);
-        if (constructor && opcode != NEWARRAY) {
-            pushValue(OTHER);
-        }
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        mv.visitLdcInsn(cst);
-        if (constructor) {
-            pushValue(OTHER);
-            if (cst instanceof Double || cst instanceof Long) {
-                pushValue(OTHER);
-            }
-        }
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        mv.visitMultiANewArrayInsn(desc, dims);
-        if (constructor) {
-            for (int i = 0; i < dims; i++) {
-                popValue();
-            }
-            pushValue(OTHER);
-        }
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        mv.visitTypeInsn(opcode, type);
-        // ANEWARRAY, CHECKCAST or INSTANCEOF don't change stack
-        if (constructor && opcode == NEW) {
-            pushValue(OTHER);
-        }
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        mv.visitMethodInsn(opcode, owner, name, desc);
-        if (constructor) {
-            Type[] types = Type.getArgumentTypes(desc);
-            for (int i = 0; i < types.length; i++) {
-                popValue();
-                if (types[i].getSize() == 2) {
-                    popValue();
-                }
-            }
-            switch (opcode) {
-            // case INVOKESTATIC:
-            // break;
-            case INVOKEINTERFACE:
-            case INVOKEVIRTUAL:
-                popValue(); // objectref
-                break;
-            case INVOKESPECIAL:
-                Object type = popValue(); // objectref
-                if (type == THIS && !superInitialized) {
-                    onMethodEnter();
-                    superInitialized = true;
-                    // once super has been initialized it is no longer
-                    // necessary to keep track of stack state
-                    constructor = false;
-                }
-                break;
-            }
-
-            Type returnType = Type.getReturnType(desc);
-            if (returnType != Type.VOID_TYPE) {
-                pushValue(OTHER);
-                if (returnType.getSize() == 2) {
-                    pushValue(OTHER);
-                }
-            }
-        }
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        if (constructor) {
-            Type[] types = Type.getArgumentTypes(desc);
-            for (int i = 0; i < types.length; i++) {
-                popValue();
-                if (types[i].getSize() == 2) {
-                    popValue();
-                }
-            }
-
-            Type returnType = Type.getReturnType(desc);
-            if (returnType != Type.VOID_TYPE) {
-                pushValue(OTHER);
-                if (returnType.getSize() == 2) {
-                    pushValue(OTHER);
-                }
-            }
-        }
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        mv.visitJumpInsn(opcode, label);
-        if (constructor) {
-            switch (opcode) {
-            case IFEQ:
-            case IFNE:
-            case IFLT:
-            case IFGE:
-            case IFGT:
-            case IFLE:
-            case IFNULL:
-            case IFNONNULL:
-                popValue();
-                break;
-            case IF_ICMPEQ:
-            case IF_ICMPNE:
-            case IF_ICMPLT:
-            case IF_ICMPGE:
-            case IF_ICMPGT:
-            case IF_ICMPLE:
-            case IF_ACMPEQ:
-            case IF_ACMPNE:
-                popValue();
-                popValue();
-                break;
-            case JSR:
-                pushValue(OTHER);
-                break;
-            }
-            addBranch(label);
-        }
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        mv.visitLookupSwitchInsn(dflt, keys, labels);
-        if (constructor) {
-            popValue();
-            addBranches(dflt, labels);
-        }
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        mv.visitTableSwitchInsn(min, max, dflt, labels);
-        if (constructor) {
-            popValue();
-            addBranches(dflt, labels);
-        }
-    }
-
-    @Override
-    public void visitTryCatchBlock(Label start, Label end, Label handler,
-            String type) {
-        super.visitTryCatchBlock(start, end, handler, type);
-        if (constructor && !branches.containsKey(handler)) {
-            List<Object> stackFrame = new ArrayList<Object>();
-            stackFrame.add(OTHER);
-            branches.put(handler, stackFrame);
-        }
-    }
-
-    private void addBranches(final Label dflt, final Label[] labels) {
-        addBranch(dflt);
-        for (int i = 0; i < labels.length; i++) {
-            addBranch(labels[i]);
-        }
-    }
-
-    private void addBranch(final Label label) {
-        if (branches.containsKey(label)) {
-            return;
-        }
-        branches.put(label, new ArrayList<Object>(stackFrame));
-    }
-
-    private Object popValue() {
-        return stackFrame.remove(stackFrame.size() - 1);
-    }
-
-    private Object peekValue() {
-        return stackFrame.get(stackFrame.size() - 1);
-    }
-
-    private void pushValue(final Object o) {
-        stackFrame.add(o);
-    }
-
-    /**
-     * Called at the beginning of the method or after super class class call in
-     * the constructor. <br>
-     * <br>
-     * 
-     * <i>Custom code can use or change all the local variables, but should not
-     * change state of the stack.</i>
-     */
-    protected void onMethodEnter() {
-    }
-
-    /**
-     * Called before explicit exit from the method using either return or throw.
-     * Top element on the stack contains the return value or exception instance.
-     * For example:
-     * 
-     * <pre>
-     *   public void onMethodExit(int opcode) {
-     *     if(opcode==RETURN) {
-     *         visitInsn(ACONST_NULL);
-     *     } else if(opcode==ARETURN || opcode==ATHROW) {
-     *         dup();
-     *     } else {
-     *         if(opcode==LRETURN || opcode==DRETURN) {
-     *             dup2();
-     *         } else {
-     *             dup();
-     *         }
-     *         box(Type.getReturnType(this.methodDesc));
-     *     }
-     *     visitIntInsn(SIPUSH, opcode);
-     *     visitMethodInsn(INVOKESTATIC, owner, "onExit", "(Ljava/lang/Object;I)V");
-     *   }
-     * 
-     *   // an actual call back method
-     *   public static void onExit(Object param, int opcode) {
-     *     ...
-     * </pre>
-     * 
-     * <br>
-     * <br>
-     * 
-     * <i>Custom code can use or change all the local variables, but should not
-     * change state of the stack.</i>
-     * 
-     * @param opcode
-     *            one of the RETURN, IRETURN, FRETURN, ARETURN, LRETURN, DRETURN
-     *            or ATHROW
-     * 
-     */
-    protected void onMethodExit(int opcode) {
-    }
-
-    // TODO onException, onMethodCall
-}
diff --git a/asm4/src/org/objectweb/asm/commons/AnalyzerAdapter.java b/asm4/src/org/objectweb/asm/commons/AnalyzerAdapter.java
deleted file mode 100644
index 156af0c..0000000
--- a/asm4/src/org/objectweb/asm/commons/AnalyzerAdapter.java
+++ /dev/null
@@ -1,920 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link MethodVisitor} that keeps track of stack map frame changes between
- * {@link #visitFrame(int, int, Object[], int, Object[]) visitFrame} calls. This
- * adapter must be used with the
- * {@link org.objectweb.asm.ClassReader#EXPAND_FRAMES} option. Each
- * visit<i>X</i> instruction delegates to the next visitor in the chain, if any,
- * and then simulates the effect of this instruction on the stack map frame,
- * represented by {@link #locals} and {@link #stack}. The next visitor in the
- * chain can get the state of the stack map frame <i>before</i> each instruction
- * by reading the value of these fields in its visit<i>X</i> methods (this
- * requires a reference to the AnalyzerAdapter that is before it in the chain).
- * If this adapter is used with a class that does not contain stack map table
- * attributes (i.e., pre Java 6 classes) then this adapter may not be able to
- * compute the stack map frame for each instruction. In this case no exception
- * is thrown but the {@link #locals} and {@link #stack} fields will be null for
- * these instructions.
- * 
- * @author Eric Bruneton
- */
-public class AnalyzerAdapter extends MethodVisitor {
-
-    /**
-     * <code>List</code> of the local variable slots for current execution
-     * frame. Primitive types are represented by {@link Opcodes#TOP},
-     * {@link Opcodes#INTEGER}, {@link Opcodes#FLOAT}, {@link Opcodes#LONG},
-     * {@link Opcodes#DOUBLE},{@link Opcodes#NULL} or
-     * {@link Opcodes#UNINITIALIZED_THIS} (long and double are represented by
-     * two elements, the second one being TOP). Reference types are represented
-     * by String objects (representing internal names), and uninitialized types
-     * by Label objects (this label designates the NEW instruction that created
-     * this uninitialized value). This field is <tt>null</tt> for unreachable
-     * instructions.
-     */
-    public List<Object> locals;
-
-    /**
-     * <code>List</code> of the operand stack slots for current execution frame.
-     * Primitive types are represented by {@link Opcodes#TOP},
-     * {@link Opcodes#INTEGER}, {@link Opcodes#FLOAT}, {@link Opcodes#LONG},
-     * {@link Opcodes#DOUBLE},{@link Opcodes#NULL} or
-     * {@link Opcodes#UNINITIALIZED_THIS} (long and double are represented by
-     * two elements, the second one being TOP). Reference types are represented
-     * by String objects (representing internal names), and uninitialized types
-     * by Label objects (this label designates the NEW instruction that created
-     * this uninitialized value). This field is <tt>null</tt> for unreachable
-     * instructions.
-     */
-    public List<Object> stack;
-
-    /**
-     * The labels that designate the next instruction to be visited. May be
-     * <tt>null</tt>.
-     */
-    private List<Label> labels;
-
-    /**
-     * Information about uninitialized types in the current execution frame.
-     * This map associates internal names to Label objects. Each label
-     * designates a NEW instruction that created the currently uninitialized
-     * types, and the associated internal name represents the NEW operand, i.e.
-     * the final, initialized type value.
-     */
-    public Map<Object, Object> uninitializedTypes;
-
-    /**
-     * The maximum stack size of this method.
-     */
-    private int maxStack;
-
-    /**
-     * The maximum number of local variables of this method.
-     */
-    private int maxLocals;
-
-    /**
-     * The owner's class name.
-     */
-    private String owner;
-
-    /**
-     * Creates a new {@link AnalyzerAdapter}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #AnalyzerAdapter(int, String, int, String, String, MethodVisitor)}
-     * version.
-     * 
-     * @param owner
-     *            the owner's class name.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param mv
-     *            the method visitor to which this adapter delegates calls. May
-     *            be <tt>null</tt>.
-     */
-    public AnalyzerAdapter(final String owner, final int access,
-            final String name, final String desc, final MethodVisitor mv) {
-        this(Opcodes.ASM4, owner, access, name, desc, mv);
-    }
-
-    /**
-     * Creates a new {@link AnalyzerAdapter}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param owner
-     *            the owner's class name.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param mv
-     *            the method visitor to which this adapter delegates calls. May
-     *            be <tt>null</tt>.
-     */
-    protected AnalyzerAdapter(final int api, final String owner,
-            final int access, final String name, final String desc,
-            final MethodVisitor mv) {
-        super(api, mv);
-        this.owner = owner;
-        locals = new ArrayList<Object>();
-        stack = new ArrayList<Object>();
-        uninitializedTypes = new HashMap<Object, Object>();
-
-        if ((access & Opcodes.ACC_STATIC) == 0) {
-            if ("<init>".equals(name)) {
-                locals.add(Opcodes.UNINITIALIZED_THIS);
-            } else {
-                locals.add(owner);
-            }
-        }
-        Type[] types = Type.getArgumentTypes(desc);
-        for (int i = 0; i < types.length; ++i) {
-            Type type = types[i];
-            switch (type.getSort()) {
-            case Type.BOOLEAN:
-            case Type.CHAR:
-            case Type.BYTE:
-            case Type.SHORT:
-            case Type.INT:
-                locals.add(Opcodes.INTEGER);
-                break;
-            case Type.FLOAT:
-                locals.add(Opcodes.FLOAT);
-                break;
-            case Type.LONG:
-                locals.add(Opcodes.LONG);
-                locals.add(Opcodes.TOP);
-                break;
-            case Type.DOUBLE:
-                locals.add(Opcodes.DOUBLE);
-                locals.add(Opcodes.TOP);
-                break;
-            case Type.ARRAY:
-                locals.add(types[i].getDescriptor());
-                break;
-            // case Type.OBJECT:
-            default:
-                locals.add(types[i].getInternalName());
-            }
-        }
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        if (type != Opcodes.F_NEW) { // uncompressed frame
-            throw new IllegalStateException(
-                    "ClassReader.accept() should be called with EXPAND_FRAMES flag");
-        }
-
-        if (mv != null) {
-            mv.visitFrame(type, nLocal, local, nStack, stack);
-        }
-
-        if (this.locals != null) {
-            this.locals.clear();
-            this.stack.clear();
-        } else {
-            this.locals = new ArrayList<Object>();
-            this.stack = new ArrayList<Object>();
-        }
-        visitFrameTypes(nLocal, local, this.locals);
-        visitFrameTypes(nStack, stack, this.stack);
-        maxStack = Math.max(maxStack, this.stack.size());
-    }
-
-    private static void visitFrameTypes(final int n, final Object[] types,
-            final List<Object> result) {
-        for (int i = 0; i < n; ++i) {
-            Object type = types[i];
-            result.add(type);
-            if (type == Opcodes.LONG || type == Opcodes.DOUBLE) {
-                result.add(Opcodes.TOP);
-            }
-        }
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        if (mv != null) {
-            mv.visitInsn(opcode);
-        }
-        execute(opcode, 0, null);
-        if ((opcode >= Opcodes.IRETURN && opcode <= Opcodes.RETURN)
-                || opcode == Opcodes.ATHROW) {
-            this.locals = null;
-            this.stack = null;
-        }
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        if (mv != null) {
-            mv.visitIntInsn(opcode, operand);
-        }
-        execute(opcode, operand, null);
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        if (mv != null) {
-            mv.visitVarInsn(opcode, var);
-        }
-        execute(opcode, var, null);
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        if (opcode == Opcodes.NEW) {
-            if (labels == null) {
-                Label l = new Label();
-                labels = new ArrayList<Label>(3);
-                labels.add(l);
-                if (mv != null) {
-                    mv.visitLabel(l);
-                }
-            }
-            for (int i = 0; i < labels.size(); ++i) {
-                uninitializedTypes.put(labels.get(i), type);
-            }
-        }
-        if (mv != null) {
-            mv.visitTypeInsn(opcode, type);
-        }
-        execute(opcode, 0, type);
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        if (mv != null) {
-            mv.visitFieldInsn(opcode, owner, name, desc);
-        }
-        execute(opcode, 0, desc);
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        if (mv != null) {
-            mv.visitMethodInsn(opcode, owner, name, desc);
-        }
-        if (this.locals == null) {
-            labels = null;
-            return;
-        }
-        pop(desc);
-        if (opcode != Opcodes.INVOKESTATIC) {
-            Object t = pop();
-            if (opcode == Opcodes.INVOKESPECIAL && name.charAt(0) == '<') {
-                Object u;
-                if (t == Opcodes.UNINITIALIZED_THIS) {
-                    u = this.owner;
-                } else {
-                    u = uninitializedTypes.get(t);
-                }
-                for (int i = 0; i < locals.size(); ++i) {
-                    if (locals.get(i) == t) {
-                        locals.set(i, u);
-                    }
-                }
-                for (int i = 0; i < stack.size(); ++i) {
-                    if (stack.get(i) == t) {
-                        stack.set(i, u);
-                    }
-                }
-            }
-        }
-        pushDesc(desc);
-        labels = null;
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        if (mv != null) {
-            mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        }
-        if (this.locals == null) {
-            labels = null;
-            return;
-        }
-        pop(desc);
-        pushDesc(desc);
-        labels = null;
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        if (mv != null) {
-            mv.visitJumpInsn(opcode, label);
-        }
-        execute(opcode, 0, null);
-        if (opcode == Opcodes.GOTO) {
-            this.locals = null;
-            this.stack = null;
-        }
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        if (mv != null) {
-            mv.visitLabel(label);
-        }
-        if (labels == null) {
-            labels = new ArrayList<Label>(3);
-        }
-        labels.add(label);
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        if (mv != null) {
-            mv.visitLdcInsn(cst);
-        }
-        if (this.locals == null) {
-            labels = null;
-            return;
-        }
-        if (cst instanceof Integer) {
-            push(Opcodes.INTEGER);
-        } else if (cst instanceof Long) {
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-        } else if (cst instanceof Float) {
-            push(Opcodes.FLOAT);
-        } else if (cst instanceof Double) {
-            push(Opcodes.DOUBLE);
-            push(Opcodes.TOP);
-        } else if (cst instanceof String) {
-            push("java/lang/String");
-        } else if (cst instanceof Type) {
-            int sort = ((Type) cst).getSort();
-            if (sort == Type.OBJECT || sort == Type.ARRAY) {
-                push("java/lang/Class");
-            } else if (sort == Type.METHOD) {
-                push("java/lang/invoke/MethodType");
-            } else {
-                throw new IllegalArgumentException();
-            }
-        } else if (cst instanceof Handle) {
-            push("java/lang/invoke/MethodHandle");
-        } else {
-            throw new IllegalArgumentException();
-        }
-        labels = null;
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        if (mv != null) {
-            mv.visitIincInsn(var, increment);
-        }
-        execute(Opcodes.IINC, var, null);
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        if (mv != null) {
-            mv.visitTableSwitchInsn(min, max, dflt, labels);
-        }
-        execute(Opcodes.TABLESWITCH, 0, null);
-        this.locals = null;
-        this.stack = null;
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        if (mv != null) {
-            mv.visitLookupSwitchInsn(dflt, keys, labels);
-        }
-        execute(Opcodes.LOOKUPSWITCH, 0, null);
-        this.locals = null;
-        this.stack = null;
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        if (mv != null) {
-            mv.visitMultiANewArrayInsn(desc, dims);
-        }
-        execute(Opcodes.MULTIANEWARRAY, dims, desc);
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        if (mv != null) {
-            this.maxStack = Math.max(this.maxStack, maxStack);
-            this.maxLocals = Math.max(this.maxLocals, maxLocals);
-            mv.visitMaxs(this.maxStack, this.maxLocals);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-
-    private Object get(final int local) {
-        maxLocals = Math.max(maxLocals, local);
-        return local < locals.size() ? locals.get(local) : Opcodes.TOP;
-    }
-
-    private void set(final int local, final Object type) {
-        maxLocals = Math.max(maxLocals, local);
-        while (local >= locals.size()) {
-            locals.add(Opcodes.TOP);
-        }
-        locals.set(local, type);
-    }
-
-    private void push(final Object type) {
-        stack.add(type);
-        maxStack = Math.max(maxStack, stack.size());
-    }
-
-    private void pushDesc(final String desc) {
-        int index = desc.charAt(0) == '(' ? desc.indexOf(')') + 1 : 0;
-        switch (desc.charAt(index)) {
-        case 'V':
-            return;
-        case 'Z':
-        case 'C':
-        case 'B':
-        case 'S':
-        case 'I':
-            push(Opcodes.INTEGER);
-            return;
-        case 'F':
-            push(Opcodes.FLOAT);
-            return;
-        case 'J':
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-            return;
-        case 'D':
-            push(Opcodes.DOUBLE);
-            push(Opcodes.TOP);
-            return;
-        case '[':
-            if (index == 0) {
-                push(desc);
-            } else {
-                push(desc.substring(index, desc.length()));
-            }
-            break;
-        // case 'L':
-        default:
-            if (index == 0) {
-                push(desc.substring(1, desc.length() - 1));
-            } else {
-                push(desc.substring(index + 1, desc.length() - 1));
-            }
-        }
-    }
-
-    private Object pop() {
-        return stack.remove(stack.size() - 1);
-    }
-
-    private void pop(final int n) {
-        int size = stack.size();
-        int end = size - n;
-        for (int i = size - 1; i >= end; --i) {
-            stack.remove(i);
-        }
-    }
-
-    private void pop(final String desc) {
-        char c = desc.charAt(0);
-        if (c == '(') {
-            int n = 0;
-            Type[] types = Type.getArgumentTypes(desc);
-            for (int i = 0; i < types.length; ++i) {
-                n += types[i].getSize();
-            }
-            pop(n);
-        } else if (c == 'J' || c == 'D') {
-            pop(2);
-        } else {
-            pop(1);
-        }
-    }
-
-    private void execute(final int opcode, final int iarg, final String sarg) {
-        if (this.locals == null) {
-            labels = null;
-            return;
-        }
-        Object t1, t2, t3, t4;
-        switch (opcode) {
-        case Opcodes.NOP:
-        case Opcodes.INEG:
-        case Opcodes.LNEG:
-        case Opcodes.FNEG:
-        case Opcodes.DNEG:
-        case Opcodes.I2B:
-        case Opcodes.I2C:
-        case Opcodes.I2S:
-        case Opcodes.GOTO:
-        case Opcodes.RETURN:
-            break;
-        case Opcodes.ACONST_NULL:
-            push(Opcodes.NULL);
-            break;
-        case Opcodes.ICONST_M1:
-        case Opcodes.ICONST_0:
-        case Opcodes.ICONST_1:
-        case Opcodes.ICONST_2:
-        case Opcodes.ICONST_3:
-        case Opcodes.ICONST_4:
-        case Opcodes.ICONST_5:
-        case Opcodes.BIPUSH:
-        case Opcodes.SIPUSH:
-            push(Opcodes.INTEGER);
-            break;
-        case Opcodes.LCONST_0:
-        case Opcodes.LCONST_1:
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.FCONST_0:
-        case Opcodes.FCONST_1:
-        case Opcodes.FCONST_2:
-            push(Opcodes.FLOAT);
-            break;
-        case Opcodes.DCONST_0:
-        case Opcodes.DCONST_1:
-            push(Opcodes.DOUBLE);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.ILOAD:
-        case Opcodes.FLOAD:
-        case Opcodes.ALOAD:
-            push(get(iarg));
-            break;
-        case Opcodes.LLOAD:
-        case Opcodes.DLOAD:
-            push(get(iarg));
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.IALOAD:
-        case Opcodes.BALOAD:
-        case Opcodes.CALOAD:
-        case Opcodes.SALOAD:
-            pop(2);
-            push(Opcodes.INTEGER);
-            break;
-        case Opcodes.LALOAD:
-        case Opcodes.D2L:
-            pop(2);
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.FALOAD:
-            pop(2);
-            push(Opcodes.FLOAT);
-            break;
-        case Opcodes.DALOAD:
-        case Opcodes.L2D:
-            pop(2);
-            push(Opcodes.DOUBLE);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.AALOAD:
-            pop(1);
-            t1 = pop();
-            if (t1 instanceof String) {
-                pushDesc(((String) t1).substring(1));
-            } else {
-                push("java/lang/Object");
-            }
-            break;
-        case Opcodes.ISTORE:
-        case Opcodes.FSTORE:
-        case Opcodes.ASTORE:
-            t1 = pop();
-            set(iarg, t1);
-            if (iarg > 0) {
-                t2 = get(iarg - 1);
-                if (t2 == Opcodes.LONG || t2 == Opcodes.DOUBLE) {
-                    set(iarg - 1, Opcodes.TOP);
-                }
-            }
-            break;
-        case Opcodes.LSTORE:
-        case Opcodes.DSTORE:
-            pop(1);
-            t1 = pop();
-            set(iarg, t1);
-            set(iarg + 1, Opcodes.TOP);
-            if (iarg > 0) {
-                t2 = get(iarg - 1);
-                if (t2 == Opcodes.LONG || t2 == Opcodes.DOUBLE) {
-                    set(iarg - 1, Opcodes.TOP);
-                }
-            }
-            break;
-        case Opcodes.IASTORE:
-        case Opcodes.BASTORE:
-        case Opcodes.CASTORE:
-        case Opcodes.SASTORE:
-        case Opcodes.FASTORE:
-        case Opcodes.AASTORE:
-            pop(3);
-            break;
-        case Opcodes.LASTORE:
-        case Opcodes.DASTORE:
-            pop(4);
-            break;
-        case Opcodes.POP:
-        case Opcodes.IFEQ:
-        case Opcodes.IFNE:
-        case Opcodes.IFLT:
-        case Opcodes.IFGE:
-        case Opcodes.IFGT:
-        case Opcodes.IFLE:
-        case Opcodes.IRETURN:
-        case Opcodes.FRETURN:
-        case Opcodes.ARETURN:
-        case Opcodes.TABLESWITCH:
-        case Opcodes.LOOKUPSWITCH:
-        case Opcodes.ATHROW:
-        case Opcodes.MONITORENTER:
-        case Opcodes.MONITOREXIT:
-        case Opcodes.IFNULL:
-        case Opcodes.IFNONNULL:
-            pop(1);
-            break;
-        case Opcodes.POP2:
-        case Opcodes.IF_ICMPEQ:
-        case Opcodes.IF_ICMPNE:
-        case Opcodes.IF_ICMPLT:
-        case Opcodes.IF_ICMPGE:
-        case Opcodes.IF_ICMPGT:
-        case Opcodes.IF_ICMPLE:
-        case Opcodes.IF_ACMPEQ:
-        case Opcodes.IF_ACMPNE:
-        case Opcodes.LRETURN:
-        case Opcodes.DRETURN:
-            pop(2);
-            break;
-        case Opcodes.DUP:
-            t1 = pop();
-            push(t1);
-            push(t1);
-            break;
-        case Opcodes.DUP_X1:
-            t1 = pop();
-            t2 = pop();
-            push(t1);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP_X2:
-            t1 = pop();
-            t2 = pop();
-            t3 = pop();
-            push(t1);
-            push(t3);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP2:
-            t1 = pop();
-            t2 = pop();
-            push(t2);
-            push(t1);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP2_X1:
-            t1 = pop();
-            t2 = pop();
-            t3 = pop();
-            push(t2);
-            push(t1);
-            push(t3);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.DUP2_X2:
-            t1 = pop();
-            t2 = pop();
-            t3 = pop();
-            t4 = pop();
-            push(t2);
-            push(t1);
-            push(t4);
-            push(t3);
-            push(t2);
-            push(t1);
-            break;
-        case Opcodes.SWAP:
-            t1 = pop();
-            t2 = pop();
-            push(t1);
-            push(t2);
-            break;
-        case Opcodes.IADD:
-        case Opcodes.ISUB:
-        case Opcodes.IMUL:
-        case Opcodes.IDIV:
-        case Opcodes.IREM:
-        case Opcodes.IAND:
-        case Opcodes.IOR:
-        case Opcodes.IXOR:
-        case Opcodes.ISHL:
-        case Opcodes.ISHR:
-        case Opcodes.IUSHR:
-        case Opcodes.L2I:
-        case Opcodes.D2I:
-        case Opcodes.FCMPL:
-        case Opcodes.FCMPG:
-            pop(2);
-            push(Opcodes.INTEGER);
-            break;
-        case Opcodes.LADD:
-        case Opcodes.LSUB:
-        case Opcodes.LMUL:
-        case Opcodes.LDIV:
-        case Opcodes.LREM:
-        case Opcodes.LAND:
-        case Opcodes.LOR:
-        case Opcodes.LXOR:
-            pop(4);
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.FADD:
-        case Opcodes.FSUB:
-        case Opcodes.FMUL:
-        case Opcodes.FDIV:
-        case Opcodes.FREM:
-        case Opcodes.L2F:
-        case Opcodes.D2F:
-            pop(2);
-            push(Opcodes.FLOAT);
-            break;
-        case Opcodes.DADD:
-        case Opcodes.DSUB:
-        case Opcodes.DMUL:
-        case Opcodes.DDIV:
-        case Opcodes.DREM:
-            pop(4);
-            push(Opcodes.DOUBLE);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.LSHL:
-        case Opcodes.LSHR:
-        case Opcodes.LUSHR:
-            pop(3);
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.IINC:
-            set(iarg, Opcodes.INTEGER);
-            break;
-        case Opcodes.I2L:
-        case Opcodes.F2L:
-            pop(1);
-            push(Opcodes.LONG);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.I2F:
-            pop(1);
-            push(Opcodes.FLOAT);
-            break;
-        case Opcodes.I2D:
-        case Opcodes.F2D:
-            pop(1);
-            push(Opcodes.DOUBLE);
-            push(Opcodes.TOP);
-            break;
-        case Opcodes.F2I:
-        case Opcodes.ARRAYLENGTH:
-        case Opcodes.INSTANCEOF:
-            pop(1);
-            push(Opcodes.INTEGER);
-            break;
-        case Opcodes.LCMP:
-        case Opcodes.DCMPL:
-        case Opcodes.DCMPG:
-            pop(4);
-            push(Opcodes.INTEGER);
-            break;
-        case Opcodes.JSR:
-        case Opcodes.RET:
-            throw new RuntimeException("JSR/RET are not supported");
-        case Opcodes.GETSTATIC:
-            pushDesc(sarg);
-            break;
-        case Opcodes.PUTSTATIC:
-            pop(sarg);
-            break;
-        case Opcodes.GETFIELD:
-            pop(1);
-            pushDesc(sarg);
-            break;
-        case Opcodes.PUTFIELD:
-            pop(sarg);
-            pop();
-            break;
-        case Opcodes.NEW:
-            push(labels.get(0));
-            break;
-        case Opcodes.NEWARRAY:
-            pop();
-            switch (iarg) {
-            case Opcodes.T_BOOLEAN:
-                pushDesc("[Z");
-                break;
-            case Opcodes.T_CHAR:
-                pushDesc("[C");
-                break;
-            case Opcodes.T_BYTE:
-                pushDesc("[B");
-                break;
-            case Opcodes.T_SHORT:
-                pushDesc("[S");
-                break;
-            case Opcodes.T_INT:
-                pushDesc("[I");
-                break;
-            case Opcodes.T_FLOAT:
-                pushDesc("[F");
-                break;
-            case Opcodes.T_DOUBLE:
-                pushDesc("[D");
-                break;
-            // case Opcodes.T_LONG:
-            default:
-                pushDesc("[J");
-                break;
-            }
-            break;
-        case Opcodes.ANEWARRAY:
-            pop();
-            pushDesc("[" + Type.getObjectType(sarg));
-            break;
-        case Opcodes.CHECKCAST:
-            pop();
-            pushDesc(Type.getObjectType(sarg).getDescriptor());
-            break;
-        // case Opcodes.MULTIANEWARRAY:
-        default:
-            pop(iarg);
-            pushDesc(sarg);
-            break;
-        }
-        labels = null;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/CodeSizeEvaluator.java b/asm4/src/org/objectweb/asm/commons/CodeSizeEvaluator.java
deleted file mode 100644
index ddeb26d..0000000
--- a/asm4/src/org/objectweb/asm/commons/CodeSizeEvaluator.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link MethodVisitor} that can be used to approximate method size.
- * 
- * @author Eugene Kuleshov
- */
-public class CodeSizeEvaluator extends MethodVisitor implements Opcodes {
-
-    private int minSize;
-
-    private int maxSize;
-
-    public CodeSizeEvaluator(final MethodVisitor mv) {
-        this(Opcodes.ASM4, mv);
-    }
-
-    protected CodeSizeEvaluator(final int api, final MethodVisitor mv) {
-        super(api, mv);
-    }
-
-    public int getMinSize() {
-        return this.minSize;
-    }
-
-    public int getMaxSize() {
-        return this.maxSize;
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        minSize += 1;
-        maxSize += 1;
-        if (mv != null) {
-            mv.visitInsn(opcode);
-        }
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        if (opcode == SIPUSH) {
-            minSize += 3;
-            maxSize += 3;
-        } else {
-            minSize += 2;
-            maxSize += 2;
-        }
-        if (mv != null) {
-            mv.visitIntInsn(opcode, operand);
-        }
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        if (var < 4 && opcode != RET) {
-            minSize += 1;
-            maxSize += 1;
-        } else if (var >= 256) {
-            minSize += 4;
-            maxSize += 4;
-        } else {
-            minSize += 2;
-            maxSize += 2;
-        }
-        if (mv != null) {
-            mv.visitVarInsn(opcode, var);
-        }
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        minSize += 3;
-        maxSize += 3;
-        if (mv != null) {
-            mv.visitTypeInsn(opcode, type);
-        }
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        minSize += 3;
-        maxSize += 3;
-        if (mv != null) {
-            mv.visitFieldInsn(opcode, owner, name, desc);
-        }
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        if (opcode == INVOKEINTERFACE) {
-            minSize += 5;
-            maxSize += 5;
-        } else {
-            minSize += 3;
-            maxSize += 3;
-        }
-        if (mv != null) {
-            mv.visitMethodInsn(opcode, owner, name, desc);
-        }
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        minSize += 5;
-        maxSize += 5;
-        if (mv != null) {
-            mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        }
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        minSize += 3;
-        if (opcode == GOTO || opcode == JSR) {
-            maxSize += 5;
-        } else {
-            maxSize += 8;
-        }
-        if (mv != null) {
-            mv.visitJumpInsn(opcode, label);
-        }
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        if (cst instanceof Long || cst instanceof Double) {
-            minSize += 3;
-            maxSize += 3;
-        } else {
-            minSize += 2;
-            maxSize += 3;
-        }
-        if (mv != null) {
-            mv.visitLdcInsn(cst);
-        }
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        if (var > 255 || increment > 127 || increment < -128) {
-            minSize += 6;
-            maxSize += 6;
-        } else {
-            minSize += 3;
-            maxSize += 3;
-        }
-        if (mv != null) {
-            mv.visitIincInsn(var, increment);
-        }
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        minSize += 13 + labels.length * 4;
-        maxSize += 16 + labels.length * 4;
-        if (mv != null) {
-            mv.visitTableSwitchInsn(min, max, dflt, labels);
-        }
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        minSize += 9 + keys.length * 8;
-        maxSize += 12 + keys.length * 8;
-        if (mv != null) {
-            mv.visitLookupSwitchInsn(dflt, keys, labels);
-        }
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        minSize += 4;
-        maxSize += 4;
-        if (mv != null) {
-            mv.visitMultiANewArrayInsn(desc, dims);
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/GeneratorAdapter.java b/asm4/src/org/objectweb/asm/commons/GeneratorAdapter.java
deleted file mode 100644
index ea2a097..0000000
--- a/asm4/src/org/objectweb/asm/commons/GeneratorAdapter.java
+++ /dev/null
@@ -1,1623 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link org.objectweb.asm.MethodVisitor} with convenient methods to generate
- * code. For example, using this adapter, the class below
- * 
- * <pre>
- * public class Example {
- *     public static void main(String[] args) {
- *         System.out.println(&quot;Hello world!&quot;);
- *     }
- * }
- * </pre>
- * 
- * can be generated as follows:
- * 
- * <pre>
- * ClassWriter cw = new ClassWriter(true);
- * cw.visit(V1_1, ACC_PUBLIC, &quot;Example&quot;, null, &quot;java/lang/Object&quot;, null);
- * 
- * Method m = Method.getMethod(&quot;void &lt;init&gt; ()&quot;);
- * GeneratorAdapter mg = new GeneratorAdapter(ACC_PUBLIC, m, null, null, cw);
- * mg.loadThis();
- * mg.invokeConstructor(Type.getType(Object.class), m);
- * mg.returnValue();
- * mg.endMethod();
- * 
- * m = Method.getMethod(&quot;void main (String[])&quot;);
- * mg = new GeneratorAdapter(ACC_PUBLIC + ACC_STATIC, m, null, null, cw);
- * mg.getStatic(Type.getType(System.class), &quot;out&quot;, Type.getType(PrintStream.class));
- * mg.push(&quot;Hello world!&quot;);
- * mg.invokeVirtual(Type.getType(PrintStream.class),
- *         Method.getMethod(&quot;void println (String)&quot;));
- * mg.returnValue();
- * mg.endMethod();
- * 
- * cw.visitEnd();
- * </pre>
- * 
- * @author Juozas Baliuka
- * @author Chris Nokleberg
- * @author Eric Bruneton
- * @author Prashant Deva
- */
-public class GeneratorAdapter extends LocalVariablesSorter {
-
-    private static final String CLDESC = "Ljava/lang/Class;";
-
-    private static final Type BYTE_TYPE = Type.getObjectType("java/lang/Byte");
-
-    private static final Type BOOLEAN_TYPE = Type
-            .getObjectType("java/lang/Boolean");
-
-    private static final Type SHORT_TYPE = Type
-            .getObjectType("java/lang/Short");
-
-    private static final Type CHARACTER_TYPE = Type
-            .getObjectType("java/lang/Character");
-
-    private static final Type INTEGER_TYPE = Type
-            .getObjectType("java/lang/Integer");
-
-    private static final Type FLOAT_TYPE = Type
-            .getObjectType("java/lang/Float");
-
-    private static final Type LONG_TYPE = Type.getObjectType("java/lang/Long");
-
-    private static final Type DOUBLE_TYPE = Type
-            .getObjectType("java/lang/Double");
-
-    private static final Type NUMBER_TYPE = Type
-            .getObjectType("java/lang/Number");
-
-    private static final Type OBJECT_TYPE = Type
-            .getObjectType("java/lang/Object");
-
-    private static final Method BOOLEAN_VALUE = Method
-            .getMethod("boolean booleanValue()");
-
-    private static final Method CHAR_VALUE = Method
-            .getMethod("char charValue()");
-
-    private static final Method INT_VALUE = Method.getMethod("int intValue()");
-
-    private static final Method FLOAT_VALUE = Method
-            .getMethod("float floatValue()");
-
-    private static final Method LONG_VALUE = Method
-            .getMethod("long longValue()");
-
-    private static final Method DOUBLE_VALUE = Method
-            .getMethod("double doubleValue()");
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int ADD = Opcodes.IADD;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int SUB = Opcodes.ISUB;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int MUL = Opcodes.IMUL;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int DIV = Opcodes.IDIV;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int REM = Opcodes.IREM;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int NEG = Opcodes.INEG;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int SHL = Opcodes.ISHL;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int SHR = Opcodes.ISHR;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int USHR = Opcodes.IUSHR;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int AND = Opcodes.IAND;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int OR = Opcodes.IOR;
-
-    /**
-     * Constant for the {@link #math math} method.
-     */
-    public static final int XOR = Opcodes.IXOR;
-
-    /**
-     * Constant for the {@link #ifCmp ifCmp} method.
-     */
-    public static final int EQ = Opcodes.IFEQ;
-
-    /**
-     * Constant for the {@link #ifCmp ifCmp} method.
-     */
-    public static final int NE = Opcodes.IFNE;
-
-    /**
-     * Constant for the {@link #ifCmp ifCmp} method.
-     */
-    public static final int LT = Opcodes.IFLT;
-
-    /**
-     * Constant for the {@link #ifCmp ifCmp} method.
-     */
-    public static final int GE = Opcodes.IFGE;
-
-    /**
-     * Constant for the {@link #ifCmp ifCmp} method.
-     */
-    public static final int GT = Opcodes.IFGT;
-
-    /**
-     * Constant for the {@link #ifCmp ifCmp} method.
-     */
-    public static final int LE = Opcodes.IFLE;
-
-    /**
-     * Access flags of the method visited by this adapter.
-     */
-    private final int access;
-
-    /**
-     * Return type of the method visited by this adapter.
-     */
-    private final Type returnType;
-
-    /**
-     * Argument types of the method visited by this adapter.
-     */
-    private final Type[] argumentTypes;
-
-    /**
-     * Types of the local variables of the method visited by this adapter.
-     */
-    private final List<Type> localTypes = new ArrayList<Type>();
-
-    /**
-     * Creates a new {@link GeneratorAdapter}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #GeneratorAdapter(int, MethodVisitor, int, String, String)}
-     * version.
-     * 
-     * @param mv
-     *            the method visitor to which this adapter delegates calls.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     */
-    public GeneratorAdapter(final MethodVisitor mv, final int access,
-            final String name, final String desc) {
-        this(Opcodes.ASM4, mv, access, name, desc);
-    }
-
-    /**
-     * Creates a new {@link GeneratorAdapter}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param mv
-     *            the method visitor to which this adapter delegates calls.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     */
-    protected GeneratorAdapter(final int api, final MethodVisitor mv,
-            final int access, final String name, final String desc) {
-        super(api, access, desc, mv);
-        this.access = access;
-        this.returnType = Type.getReturnType(desc);
-        this.argumentTypes = Type.getArgumentTypes(desc);
-    }
-
-    /**
-     * Creates a new {@link GeneratorAdapter}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #GeneratorAdapter(int, MethodVisitor, int, String, String)}
-     * version.
-     * 
-     * @param access
-     *            access flags of the adapted method.
-     * @param method
-     *            the adapted method.
-     * @param mv
-     *            the method visitor to which this adapter delegates calls.
-     */
-    public GeneratorAdapter(final int access, final Method method,
-            final MethodVisitor mv) {
-        this(mv, access, null, method.getDescriptor());
-    }
-
-    /**
-     * Creates a new {@link GeneratorAdapter}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #GeneratorAdapter(int, MethodVisitor, int, String, String)}
-     * version.
-     * 
-     * @param access
-     *            access flags of the adapted method.
-     * @param method
-     *            the adapted method.
-     * @param signature
-     *            the signature of the adapted method (may be <tt>null</tt>).
-     * @param exceptions
-     *            the exceptions thrown by the adapted method (may be
-     *            <tt>null</tt>).
-     * @param cv
-     *            the class visitor to which this adapter delegates calls.
-     */
-    public GeneratorAdapter(final int access, final Method method,
-            final String signature, final Type[] exceptions,
-            final ClassVisitor cv) {
-        this(access, method, cv
-                .visitMethod(access, method.getName(), method.getDescriptor(),
-                        signature, getInternalNames(exceptions)));
-    }
-
-    /**
-     * Returns the internal names of the given types.
-     * 
-     * @param types
-     *            a set of types.
-     * @return the internal names of the given types.
-     */
-    private static String[] getInternalNames(final Type[] types) {
-        if (types == null) {
-            return null;
-        }
-        String[] names = new String[types.length];
-        for (int i = 0; i < names.length; ++i) {
-            names[i] = types[i].getInternalName();
-        }
-        return names;
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to push constants on the stack
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack.
-     */
-    public void push(final boolean value) {
-        push(value ? 1 : 0);
-    }
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack.
-     */
-    public void push(final int value) {
-        if (value >= -1 && value <= 5) {
-            mv.visitInsn(Opcodes.ICONST_0 + value);
-        } else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE) {
-            mv.visitIntInsn(Opcodes.BIPUSH, value);
-        } else if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE) {
-            mv.visitIntInsn(Opcodes.SIPUSH, value);
-        } else {
-            mv.visitLdcInsn(new Integer(value));
-        }
-    }
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack.
-     */
-    public void push(final long value) {
-        if (value == 0L || value == 1L) {
-            mv.visitInsn(Opcodes.LCONST_0 + (int) value);
-        } else {
-            mv.visitLdcInsn(new Long(value));
-        }
-    }
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack.
-     */
-    public void push(final float value) {
-        int bits = Float.floatToIntBits(value);
-        if (bits == 0L || bits == 0x3f800000 || bits == 0x40000000) { // 0..2
-            mv.visitInsn(Opcodes.FCONST_0 + (int) value);
-        } else {
-            mv.visitLdcInsn(new Float(value));
-        }
-    }
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack.
-     */
-    public void push(final double value) {
-        long bits = Double.doubleToLongBits(value);
-        if (bits == 0L || bits == 0x3ff0000000000000L) { // +0.0d and 1.0d
-            mv.visitInsn(Opcodes.DCONST_0 + (int) value);
-        } else {
-            mv.visitLdcInsn(new Double(value));
-        }
-    }
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack. May be <tt>null</tt>.
-     */
-    public void push(final String value) {
-        if (value == null) {
-            mv.visitInsn(Opcodes.ACONST_NULL);
-        } else {
-            mv.visitLdcInsn(value);
-        }
-    }
-
-    /**
-     * Generates the instruction to push the given value on the stack.
-     * 
-     * @param value
-     *            the value to be pushed on the stack.
-     */
-    public void push(final Type value) {
-        if (value == null) {
-            mv.visitInsn(Opcodes.ACONST_NULL);
-        } else {
-            switch (value.getSort()) {
-            case Type.BOOLEAN:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Boolean",
-                        "TYPE", CLDESC);
-                break;
-            case Type.CHAR:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Character",
-                        "TYPE", CLDESC);
-                break;
-            case Type.BYTE:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Byte", "TYPE",
-                        CLDESC);
-                break;
-            case Type.SHORT:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Short", "TYPE",
-                        CLDESC);
-                break;
-            case Type.INT:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Integer",
-                        "TYPE", CLDESC);
-                break;
-            case Type.FLOAT:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Float", "TYPE",
-                        CLDESC);
-                break;
-            case Type.LONG:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Long", "TYPE",
-                        CLDESC);
-                break;
-            case Type.DOUBLE:
-                mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Double",
-                        "TYPE", CLDESC);
-                break;
-            default:
-                mv.visitLdcInsn(value);
-            }
-        }
-    }
-
-    /**
-     * Generates the instruction to push a handle on the stack.
-     * 
-     * @param handle
-     *            the handle to be pushed on the stack.
-     */
-    public void push(final Handle handle) {
-        mv.visitLdcInsn(handle);
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to load and store method arguments
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the index of the given method argument in the frame's local
-     * variables array.
-     * 
-     * @param arg
-     *            the index of a method argument.
-     * @return the index of the given method argument in the frame's local
-     *         variables array.
-     */
-    private int getArgIndex(final int arg) {
-        int index = (access & Opcodes.ACC_STATIC) == 0 ? 1 : 0;
-        for (int i = 0; i < arg; i++) {
-            index += argumentTypes[i].getSize();
-        }
-        return index;
-    }
-
-    /**
-     * Generates the instruction to push a local variable on the stack.
-     * 
-     * @param type
-     *            the type of the local variable to be loaded.
-     * @param index
-     *            an index in the frame's local variables array.
-     */
-    private void loadInsn(final Type type, final int index) {
-        mv.visitVarInsn(type.getOpcode(Opcodes.ILOAD), index);
-    }
-
-    /**
-     * Generates the instruction to store the top stack value in a local
-     * variable.
-     * 
-     * @param type
-     *            the type of the local variable to be stored.
-     * @param index
-     *            an index in the frame's local variables array.
-     */
-    private void storeInsn(final Type type, final int index) {
-        mv.visitVarInsn(type.getOpcode(Opcodes.ISTORE), index);
-    }
-
-    /**
-     * Generates the instruction to load 'this' on the stack.
-     */
-    public void loadThis() {
-        if ((access & Opcodes.ACC_STATIC) != 0) {
-            throw new IllegalStateException(
-                    "no 'this' pointer within static method");
-        }
-        mv.visitVarInsn(Opcodes.ALOAD, 0);
-    }
-
-    /**
-     * Generates the instruction to load the given method argument on the stack.
-     * 
-     * @param arg
-     *            the index of a method argument.
-     */
-    public void loadArg(final int arg) {
-        loadInsn(argumentTypes[arg], getArgIndex(arg));
-    }
-
-    /**
-     * Generates the instructions to load the given method arguments on the
-     * stack.
-     * 
-     * @param arg
-     *            the index of the first method argument to be loaded.
-     * @param count
-     *            the number of method arguments to be loaded.
-     */
-    public void loadArgs(final int arg, final int count) {
-        int index = getArgIndex(arg);
-        for (int i = 0; i < count; ++i) {
-            Type t = argumentTypes[arg + i];
-            loadInsn(t, index);
-            index += t.getSize();
-        }
-    }
-
-    /**
-     * Generates the instructions to load all the method arguments on the stack.
-     */
-    public void loadArgs() {
-        loadArgs(0, argumentTypes.length);
-    }
-
-    /**
-     * Generates the instructions to load all the method arguments on the stack,
-     * as a single object array.
-     */
-    public void loadArgArray() {
-        push(argumentTypes.length);
-        newArray(OBJECT_TYPE);
-        for (int i = 0; i < argumentTypes.length; i++) {
-            dup();
-            push(i);
-            loadArg(i);
-            box(argumentTypes[i]);
-            arrayStore(OBJECT_TYPE);
-        }
-    }
-
-    /**
-     * Generates the instruction to store the top stack value in the given
-     * method argument.
-     * 
-     * @param arg
-     *            the index of a method argument.
-     */
-    public void storeArg(final int arg) {
-        storeInsn(argumentTypes[arg], getArgIndex(arg));
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to load and store local variables
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the type of the given local variable.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by
-     *            {@link LocalVariablesSorter#newLocal(Type) newLocal()}.
-     * @return the type of the given local variable.
-     */
-    public Type getLocalType(final int local) {
-        return localTypes.get(local - firstLocal);
-    }
-
-    @Override
-    protected void setLocalType(final int local, final Type type) {
-        int index = local - firstLocal;
-        while (localTypes.size() < index + 1) {
-            localTypes.add(null);
-        }
-        localTypes.set(index, type);
-    }
-
-    /**
-     * Generates the instruction to load the given local variable on the stack.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by
-     *            {@link LocalVariablesSorter#newLocal(Type) newLocal()}.
-     */
-    public void loadLocal(final int local) {
-        loadInsn(getLocalType(local), local);
-    }
-
-    /**
-     * Generates the instruction to load the given local variable on the stack.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by
-     *            {@link LocalVariablesSorter#newLocal(Type) newLocal()}.
-     * @param type
-     *            the type of this local variable.
-     */
-    public void loadLocal(final int local, final Type type) {
-        setLocalType(local, type);
-        loadInsn(type, local);
-    }
-
-    /**
-     * Generates the instruction to store the top stack value in the given local
-     * variable.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by
-     *            {@link LocalVariablesSorter#newLocal(Type) newLocal()}.
-     */
-    public void storeLocal(final int local) {
-        storeInsn(getLocalType(local), local);
-    }
-
-    /**
-     * Generates the instruction to store the top stack value in the given local
-     * variable.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by
-     *            {@link LocalVariablesSorter#newLocal(Type) newLocal()}.
-     * @param type
-     *            the type of this local variable.
-     */
-    public void storeLocal(final int local, final Type type) {
-        setLocalType(local, type);
-        storeInsn(type, local);
-    }
-
-    /**
-     * Generates the instruction to load an element from an array.
-     * 
-     * @param type
-     *            the type of the array element to be loaded.
-     */
-    public void arrayLoad(final Type type) {
-        mv.visitInsn(type.getOpcode(Opcodes.IALOAD));
-    }
-
-    /**
-     * Generates the instruction to store an element in an array.
-     * 
-     * @param type
-     *            the type of the array element to be stored.
-     */
-    public void arrayStore(final Type type) {
-        mv.visitInsn(type.getOpcode(Opcodes.IASTORE));
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to manage the stack
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates a POP instruction.
-     */
-    public void pop() {
-        mv.visitInsn(Opcodes.POP);
-    }
-
-    /**
-     * Generates a POP2 instruction.
-     */
-    public void pop2() {
-        mv.visitInsn(Opcodes.POP2);
-    }
-
-    /**
-     * Generates a DUP instruction.
-     */
-    public void dup() {
-        mv.visitInsn(Opcodes.DUP);
-    }
-
-    /**
-     * Generates a DUP2 instruction.
-     */
-    public void dup2() {
-        mv.visitInsn(Opcodes.DUP2);
-    }
-
-    /**
-     * Generates a DUP_X1 instruction.
-     */
-    public void dupX1() {
-        mv.visitInsn(Opcodes.DUP_X1);
-    }
-
-    /**
-     * Generates a DUP_X2 instruction.
-     */
-    public void dupX2() {
-        mv.visitInsn(Opcodes.DUP_X2);
-    }
-
-    /**
-     * Generates a DUP2_X1 instruction.
-     */
-    public void dup2X1() {
-        mv.visitInsn(Opcodes.DUP2_X1);
-    }
-
-    /**
-     * Generates a DUP2_X2 instruction.
-     */
-    public void dup2X2() {
-        mv.visitInsn(Opcodes.DUP2_X2);
-    }
-
-    /**
-     * Generates a SWAP instruction.
-     */
-    public void swap() {
-        mv.visitInsn(Opcodes.SWAP);
-    }
-
-    /**
-     * Generates the instructions to swap the top two stack values.
-     * 
-     * @param prev
-     *            type of the top - 1 stack value.
-     * @param type
-     *            type of the top stack value.
-     */
-    public void swap(final Type prev, final Type type) {
-        if (type.getSize() == 1) {
-            if (prev.getSize() == 1) {
-                swap(); // same as dupX1(), pop();
-            } else {
-                dupX2();
-                pop();
-            }
-        } else {
-            if (prev.getSize() == 1) {
-                dup2X1();
-                pop2();
-            } else {
-                dup2X2();
-                pop2();
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to do mathematical and logical operations
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates the instruction to do the specified mathematical or logical
-     * operation.
-     * 
-     * @param op
-     *            a mathematical or logical operation. Must be one of ADD, SUB,
-     *            MUL, DIV, REM, NEG, SHL, SHR, USHR, AND, OR, XOR.
-     * @param type
-     *            the type of the operand(s) for this operation.
-     */
-    public void math(final int op, final Type type) {
-        mv.visitInsn(type.getOpcode(op));
-    }
-
-    /**
-     * Generates the instructions to compute the bitwise negation of the top
-     * stack value.
-     */
-    public void not() {
-        mv.visitInsn(Opcodes.ICONST_1);
-        mv.visitInsn(Opcodes.IXOR);
-    }
-
-    /**
-     * Generates the instruction to increment the given local variable.
-     * 
-     * @param local
-     *            the local variable to be incremented.
-     * @param amount
-     *            the amount by which the local variable must be incremented.
-     */
-    public void iinc(final int local, final int amount) {
-        mv.visitIincInsn(local, amount);
-    }
-
-    /**
-     * Generates the instructions to cast a numerical value from one type to
-     * another.
-     * 
-     * @param from
-     *            the type of the top stack value
-     * @param to
-     *            the type into which this value must be cast.
-     */
-    public void cast(final Type from, final Type to) {
-        if (from != to) {
-            if (from == Type.DOUBLE_TYPE) {
-                if (to == Type.FLOAT_TYPE) {
-                    mv.visitInsn(Opcodes.D2F);
-                } else if (to == Type.LONG_TYPE) {
-                    mv.visitInsn(Opcodes.D2L);
-                } else {
-                    mv.visitInsn(Opcodes.D2I);
-                    cast(Type.INT_TYPE, to);
-                }
-            } else if (from == Type.FLOAT_TYPE) {
-                if (to == Type.DOUBLE_TYPE) {
-                    mv.visitInsn(Opcodes.F2D);
-                } else if (to == Type.LONG_TYPE) {
-                    mv.visitInsn(Opcodes.F2L);
-                } else {
-                    mv.visitInsn(Opcodes.F2I);
-                    cast(Type.INT_TYPE, to);
-                }
-            } else if (from == Type.LONG_TYPE) {
-                if (to == Type.DOUBLE_TYPE) {
-                    mv.visitInsn(Opcodes.L2D);
-                } else if (to == Type.FLOAT_TYPE) {
-                    mv.visitInsn(Opcodes.L2F);
-                } else {
-                    mv.visitInsn(Opcodes.L2I);
-                    cast(Type.INT_TYPE, to);
-                }
-            } else {
-                if (to == Type.BYTE_TYPE) {
-                    mv.visitInsn(Opcodes.I2B);
-                } else if (to == Type.CHAR_TYPE) {
-                    mv.visitInsn(Opcodes.I2C);
-                } else if (to == Type.DOUBLE_TYPE) {
-                    mv.visitInsn(Opcodes.I2D);
-                } else if (to == Type.FLOAT_TYPE) {
-                    mv.visitInsn(Opcodes.I2F);
-                } else if (to == Type.LONG_TYPE) {
-                    mv.visitInsn(Opcodes.I2L);
-                } else if (to == Type.SHORT_TYPE) {
-                    mv.visitInsn(Opcodes.I2S);
-                }
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to do boxing and unboxing operations
-    // ------------------------------------------------------------------------
-
-    private static Type getBoxedType(final Type type) {
-        switch (type.getSort()) {
-        case Type.BYTE:
-            return BYTE_TYPE;
-        case Type.BOOLEAN:
-            return BOOLEAN_TYPE;
-        case Type.SHORT:
-            return SHORT_TYPE;
-        case Type.CHAR:
-            return CHARACTER_TYPE;
-        case Type.INT:
-            return INTEGER_TYPE;
-        case Type.FLOAT:
-            return FLOAT_TYPE;
-        case Type.LONG:
-            return LONG_TYPE;
-        case Type.DOUBLE:
-            return DOUBLE_TYPE;
-        }
-        return type;
-    }
-
-    /**
-     * Generates the instructions to box the top stack value. This value is
-     * replaced by its boxed equivalent on top of the stack.
-     * 
-     * @param type
-     *            the type of the top stack value.
-     */
-    public void box(final Type type) {
-        if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
-            return;
-        }
-        if (type == Type.VOID_TYPE) {
-            push((String) null);
-        } else {
-            Type boxed = getBoxedType(type);
-            newInstance(boxed);
-            if (type.getSize() == 2) {
-                // Pp -> Ppo -> oPpo -> ooPpo -> ooPp -> o
-                dupX2();
-                dupX2();
-                pop();
-            } else {
-                // p -> po -> opo -> oop -> o
-                dupX1();
-                swap();
-            }
-            invokeConstructor(boxed, new Method("<init>", Type.VOID_TYPE,
-                    new Type[] { type }));
-        }
-    }
-
-    /**
-     * Generates the instructions to box the top stack value using Java 5's
-     * valueOf() method. This value is replaced by its boxed equivalent on top
-     * of the stack.
-     * 
-     * @param type
-     *            the type of the top stack value.
-     */
-    public void valueOf(final Type type) {
-        if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
-            return;
-        }
-        if (type == Type.VOID_TYPE) {
-            push((String) null);
-        } else {
-            Type boxed = getBoxedType(type);
-            invokeStatic(boxed, new Method("valueOf", boxed,
-                    new Type[] { type }));
-        }
-    }
-
-    /**
-     * Generates the instructions to unbox the top stack value. This value is
-     * replaced by its unboxed equivalent on top of the stack.
-     * 
-     * @param type
-     *            the type of the top stack value.
-     */
-    public void unbox(final Type type) {
-        Type t = NUMBER_TYPE;
-        Method sig = null;
-        switch (type.getSort()) {
-        case Type.VOID:
-            return;
-        case Type.CHAR:
-            t = CHARACTER_TYPE;
-            sig = CHAR_VALUE;
-            break;
-        case Type.BOOLEAN:
-            t = BOOLEAN_TYPE;
-            sig = BOOLEAN_VALUE;
-            break;
-        case Type.DOUBLE:
-            sig = DOUBLE_VALUE;
-            break;
-        case Type.FLOAT:
-            sig = FLOAT_VALUE;
-            break;
-        case Type.LONG:
-            sig = LONG_VALUE;
-            break;
-        case Type.INT:
-        case Type.SHORT:
-        case Type.BYTE:
-            sig = INT_VALUE;
-        }
-        if (sig == null) {
-            checkCast(type);
-        } else {
-            checkCast(t);
-            invokeVirtual(t, sig);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to jump to other instructions
-    // ------------------------------------------------------------------------
-
-    /**
-     * Creates a new {@link Label}.
-     * 
-     * @return a new {@link Label}.
-     */
-    public Label newLabel() {
-        return new Label();
-    }
-
-    /**
-     * Marks the current code position with the given label.
-     * 
-     * @param label
-     *            a label.
-     */
-    public void mark(final Label label) {
-        mv.visitLabel(label);
-    }
-
-    /**
-     * Marks the current code position with a new label.
-     * 
-     * @return the label that was created to mark the current code position.
-     */
-    public Label mark() {
-        Label label = new Label();
-        mv.visitLabel(label);
-        return label;
-    }
-
-    /**
-     * Generates the instructions to jump to a label based on the comparison of
-     * the top two stack values.
-     * 
-     * @param type
-     *            the type of the top two stack values.
-     * @param mode
-     *            how these values must be compared. One of EQ, NE, LT, GE, GT,
-     *            LE.
-     * @param label
-     *            where to jump if the comparison result is <tt>true</tt>.
-     */
-    public void ifCmp(final Type type, final int mode, final Label label) {
-        switch (type.getSort()) {
-        case Type.LONG:
-            mv.visitInsn(Opcodes.LCMP);
-            break;
-        case Type.DOUBLE:
-            mv.visitInsn(mode == GE || mode == GT ? Opcodes.DCMPL
-                    : Opcodes.DCMPG);
-            break;
-        case Type.FLOAT:
-            mv.visitInsn(mode == GE || mode == GT ? Opcodes.FCMPL
-                    : Opcodes.FCMPG);
-            break;
-        case Type.ARRAY:
-        case Type.OBJECT:
-            switch (mode) {
-            case EQ:
-                mv.visitJumpInsn(Opcodes.IF_ACMPEQ, label);
-                return;
-            case NE:
-                mv.visitJumpInsn(Opcodes.IF_ACMPNE, label);
-                return;
-            }
-            throw new IllegalArgumentException("Bad comparison for type "
-                    + type);
-        default:
-            int intOp = -1;
-            switch (mode) {
-            case EQ:
-                intOp = Opcodes.IF_ICMPEQ;
-                break;
-            case NE:
-                intOp = Opcodes.IF_ICMPNE;
-                break;
-            case GE:
-                intOp = Opcodes.IF_ICMPGE;
-                break;
-            case LT:
-                intOp = Opcodes.IF_ICMPLT;
-                break;
-            case LE:
-                intOp = Opcodes.IF_ICMPLE;
-                break;
-            case GT:
-                intOp = Opcodes.IF_ICMPGT;
-                break;
-            }
-            mv.visitJumpInsn(intOp, label);
-            return;
-        }
-        mv.visitJumpInsn(mode, label);
-    }
-
-    /**
-     * Generates the instructions to jump to a label based on the comparison of
-     * the top two integer stack values.
-     * 
-     * @param mode
-     *            how these values must be compared. One of EQ, NE, LT, GE, GT,
-     *            LE.
-     * @param label
-     *            where to jump if the comparison result is <tt>true</tt>.
-     */
-    public void ifICmp(final int mode, final Label label) {
-        ifCmp(Type.INT_TYPE, mode, label);
-    }
-
-    /**
-     * Generates the instructions to jump to a label based on the comparison of
-     * the top integer stack value with zero.
-     * 
-     * @param mode
-     *            how these values must be compared. One of EQ, NE, LT, GE, GT,
-     *            LE.
-     * @param label
-     *            where to jump if the comparison result is <tt>true</tt>.
-     */
-    public void ifZCmp(final int mode, final Label label) {
-        mv.visitJumpInsn(mode, label);
-    }
-
-    /**
-     * Generates the instruction to jump to the given label if the top stack
-     * value is null.
-     * 
-     * @param label
-     *            where to jump if the condition is <tt>true</tt>.
-     */
-    public void ifNull(final Label label) {
-        mv.visitJumpInsn(Opcodes.IFNULL, label);
-    }
-
-    /**
-     * Generates the instruction to jump to the given label if the top stack
-     * value is not null.
-     * 
-     * @param label
-     *            where to jump if the condition is <tt>true</tt>.
-     */
-    public void ifNonNull(final Label label) {
-        mv.visitJumpInsn(Opcodes.IFNONNULL, label);
-    }
-
-    /**
-     * Generates the instruction to jump to the given label.
-     * 
-     * @param label
-     *            where to jump if the condition is <tt>true</tt>.
-     */
-    public void goTo(final Label label) {
-        mv.visitJumpInsn(Opcodes.GOTO, label);
-    }
-
-    /**
-     * Generates a RET instruction.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by
-     *            {@link LocalVariablesSorter#newLocal(Type) newLocal()}.
-     */
-    public void ret(final int local) {
-        mv.visitVarInsn(Opcodes.RET, local);
-    }
-
-    /**
-     * Generates the instructions for a switch statement.
-     * 
-     * @param keys
-     *            the switch case keys.
-     * @param generator
-     *            a generator to generate the code for the switch cases.
-     */
-    public void tableSwitch(final int[] keys,
-            final TableSwitchGenerator generator) {
-        float density;
-        if (keys.length == 0) {
-            density = 0;
-        } else {
-            density = (float) keys.length
-                    / (keys[keys.length - 1] - keys[0] + 1);
-        }
-        tableSwitch(keys, generator, density >= 0.5f);
-    }
-
-    /**
-     * Generates the instructions for a switch statement.
-     * 
-     * @param keys
-     *            the switch case keys.
-     * @param generator
-     *            a generator to generate the code for the switch cases.
-     * @param useTable
-     *            <tt>true</tt> to use a TABLESWITCH instruction, or
-     *            <tt>false</tt> to use a LOOKUPSWITCH instruction.
-     */
-    public void tableSwitch(final int[] keys,
-            final TableSwitchGenerator generator, final boolean useTable) {
-        for (int i = 1; i < keys.length; ++i) {
-            if (keys[i] < keys[i - 1]) {
-                throw new IllegalArgumentException(
-                        "keys must be sorted ascending");
-            }
-        }
-        Label def = newLabel();
-        Label end = newLabel();
-        if (keys.length > 0) {
-            int len = keys.length;
-            int min = keys[0];
-            int max = keys[len - 1];
-            int range = max - min + 1;
-            if (useTable) {
-                Label[] labels = new Label[range];
-                Arrays.fill(labels, def);
-                for (int i = 0; i < len; ++i) {
-                    labels[keys[i] - min] = newLabel();
-                }
-                mv.visitTableSwitchInsn(min, max, def, labels);
-                for (int i = 0; i < range; ++i) {
-                    Label label = labels[i];
-                    if (label != def) {
-                        mark(label);
-                        generator.generateCase(i + min, end);
-                    }
-                }
-            } else {
-                Label[] labels = new Label[len];
-                for (int i = 0; i < len; ++i) {
-                    labels[i] = newLabel();
-                }
-                mv.visitLookupSwitchInsn(def, keys, labels);
-                for (int i = 0; i < len; ++i) {
-                    mark(labels[i]);
-                    generator.generateCase(keys[i], end);
-                }
-            }
-        }
-        mark(def);
-        generator.generateDefault();
-        mark(end);
-    }
-
-    /**
-     * Generates the instruction to return the top stack value to the caller.
-     */
-    public void returnValue() {
-        mv.visitInsn(returnType.getOpcode(Opcodes.IRETURN));
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to load and store fields
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates a get field or set field instruction.
-     * 
-     * @param opcode
-     *            the instruction's opcode.
-     * @param ownerType
-     *            the class in which the field is defined.
-     * @param name
-     *            the name of the field.
-     * @param fieldType
-     *            the type of the field.
-     */
-    private void fieldInsn(final int opcode, final Type ownerType,
-            final String name, final Type fieldType) {
-        mv.visitFieldInsn(opcode, ownerType.getInternalName(), name,
-                fieldType.getDescriptor());
-    }
-
-    /**
-     * Generates the instruction to push the value of a static field on the
-     * stack.
-     * 
-     * @param owner
-     *            the class in which the field is defined.
-     * @param name
-     *            the name of the field.
-     * @param type
-     *            the type of the field.
-     */
-    public void getStatic(final Type owner, final String name, final Type type) {
-        fieldInsn(Opcodes.GETSTATIC, owner, name, type);
-    }
-
-    /**
-     * Generates the instruction to store the top stack value in a static field.
-     * 
-     * @param owner
-     *            the class in which the field is defined.
-     * @param name
-     *            the name of the field.
-     * @param type
-     *            the type of the field.
-     */
-    public void putStatic(final Type owner, final String name, final Type type) {
-        fieldInsn(Opcodes.PUTSTATIC, owner, name, type);
-    }
-
-    /**
-     * Generates the instruction to push the value of a non static field on the
-     * stack.
-     * 
-     * @param owner
-     *            the class in which the field is defined.
-     * @param name
-     *            the name of the field.
-     * @param type
-     *            the type of the field.
-     */
-    public void getField(final Type owner, final String name, final Type type) {
-        fieldInsn(Opcodes.GETFIELD, owner, name, type);
-    }
-
-    /**
-     * Generates the instruction to store the top stack value in a non static
-     * field.
-     * 
-     * @param owner
-     *            the class in which the field is defined.
-     * @param name
-     *            the name of the field.
-     * @param type
-     *            the type of the field.
-     */
-    public void putField(final Type owner, final String name, final Type type) {
-        fieldInsn(Opcodes.PUTFIELD, owner, name, type);
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to invoke methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates an invoke method instruction.
-     * 
-     * @param opcode
-     *            the instruction's opcode.
-     * @param type
-     *            the class in which the method is defined.
-     * @param method
-     *            the method to be invoked.
-     */
-    private void invokeInsn(final int opcode, final Type type,
-            final Method method) {
-        String owner = type.getSort() == Type.ARRAY ? type.getDescriptor()
-                : type.getInternalName();
-        mv.visitMethodInsn(opcode, owner, method.getName(),
-                method.getDescriptor());
-    }
-
-    /**
-     * Generates the instruction to invoke a normal method.
-     * 
-     * @param owner
-     *            the class in which the method is defined.
-     * @param method
-     *            the method to be invoked.
-     */
-    public void invokeVirtual(final Type owner, final Method method) {
-        invokeInsn(Opcodes.INVOKEVIRTUAL, owner, method);
-    }
-
-    /**
-     * Generates the instruction to invoke a constructor.
-     * 
-     * @param type
-     *            the class in which the constructor is defined.
-     * @param method
-     *            the constructor to be invoked.
-     */
-    public void invokeConstructor(final Type type, final Method method) {
-        invokeInsn(Opcodes.INVOKESPECIAL, type, method);
-    }
-
-    /**
-     * Generates the instruction to invoke a static method.
-     * 
-     * @param owner
-     *            the class in which the method is defined.
-     * @param method
-     *            the method to be invoked.
-     */
-    public void invokeStatic(final Type owner, final Method method) {
-        invokeInsn(Opcodes.INVOKESTATIC, owner, method);
-    }
-
-    /**
-     * Generates the instruction to invoke an interface method.
-     * 
-     * @param owner
-     *            the class in which the method is defined.
-     * @param method
-     *            the method to be invoked.
-     */
-    public void invokeInterface(final Type owner, final Method method) {
-        invokeInsn(Opcodes.INVOKEINTERFACE, owner, method);
-    }
-
-    /**
-     * Generates an invokedynamic instruction.
-     * 
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the bootstrap method constant arguments. Each argument must be
-     *            an {@link Integer}, {@link Float}, {@link Long},
-     *            {@link Double}, {@link String}, {@link Type} or {@link Handle}
-     *            value. This method is allowed to modify the content of the
-     *            array so a caller should expect that this array may change.
-     */
-    public void invokeDynamic(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-    }
-
-    // ------------------------------------------------------------------------
-    // Instructions to create objects and arrays
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates a type dependent instruction.
-     * 
-     * @param opcode
-     *            the instruction's opcode.
-     * @param type
-     *            the instruction's operand.
-     */
-    private void typeInsn(final int opcode, final Type type) {
-        mv.visitTypeInsn(opcode, type.getInternalName());
-    }
-
-    /**
-     * Generates the instruction to create a new object.
-     * 
-     * @param type
-     *            the class of the object to be created.
-     */
-    public void newInstance(final Type type) {
-        typeInsn(Opcodes.NEW, type);
-    }
-
-    /**
-     * Generates the instruction to create a new array.
-     * 
-     * @param type
-     *            the type of the array elements.
-     */
-    public void newArray(final Type type) {
-        int typ;
-        switch (type.getSort()) {
-        case Type.BOOLEAN:
-            typ = Opcodes.T_BOOLEAN;
-            break;
-        case Type.CHAR:
-            typ = Opcodes.T_CHAR;
-            break;
-        case Type.BYTE:
-            typ = Opcodes.T_BYTE;
-            break;
-        case Type.SHORT:
-            typ = Opcodes.T_SHORT;
-            break;
-        case Type.INT:
-            typ = Opcodes.T_INT;
-            break;
-        case Type.FLOAT:
-            typ = Opcodes.T_FLOAT;
-            break;
-        case Type.LONG:
-            typ = Opcodes.T_LONG;
-            break;
-        case Type.DOUBLE:
-            typ = Opcodes.T_DOUBLE;
-            break;
-        default:
-            typeInsn(Opcodes.ANEWARRAY, type);
-            return;
-        }
-        mv.visitIntInsn(Opcodes.NEWARRAY, typ);
-    }
-
-    // ------------------------------------------------------------------------
-    // Miscelaneous instructions
-    // ------------------------------------------------------------------------
-
-    /**
-     * Generates the instruction to compute the length of an array.
-     */
-    public void arrayLength() {
-        mv.visitInsn(Opcodes.ARRAYLENGTH);
-    }
-
-    /**
-     * Generates the instruction to throw an exception.
-     */
-    public void throwException() {
-        mv.visitInsn(Opcodes.ATHROW);
-    }
-
-    /**
-     * Generates the instructions to create and throw an exception. The
-     * exception class must have a constructor with a single String argument.
-     * 
-     * @param type
-     *            the class of the exception to be thrown.
-     * @param msg
-     *            the detailed message of the exception.
-     */
-    public void throwException(final Type type, final String msg) {
-        newInstance(type);
-        dup();
-        push(msg);
-        invokeConstructor(type, Method.getMethod("void <init> (String)"));
-        throwException();
-    }
-
-    /**
-     * Generates the instruction to check that the top stack value is of the
-     * given type.
-     * 
-     * @param type
-     *            a class or interface type.
-     */
-    public void checkCast(final Type type) {
-        if (!type.equals(OBJECT_TYPE)) {
-            typeInsn(Opcodes.CHECKCAST, type);
-        }
-    }
-
-    /**
-     * Generates the instruction to test if the top stack value is of the given
-     * type.
-     * 
-     * @param type
-     *            a class or interface type.
-     */
-    public void instanceOf(final Type type) {
-        typeInsn(Opcodes.INSTANCEOF, type);
-    }
-
-    /**
-     * Generates the instruction to get the monitor of the top stack value.
-     */
-    public void monitorEnter() {
-        mv.visitInsn(Opcodes.MONITORENTER);
-    }
-
-    /**
-     * Generates the instruction to release the monitor of the top stack value.
-     */
-    public void monitorExit() {
-        mv.visitInsn(Opcodes.MONITOREXIT);
-    }
-
-    // ------------------------------------------------------------------------
-    // Non instructions
-    // ------------------------------------------------------------------------
-
-    /**
-     * Marks the end of the visited method.
-     */
-    public void endMethod() {
-        if ((access & Opcodes.ACC_ABSTRACT) == 0) {
-            mv.visitMaxs(0, 0);
-        }
-        mv.visitEnd();
-    }
-
-    /**
-     * Marks the start of an exception handler.
-     * 
-     * @param start
-     *            beginning of the exception handler's scope (inclusive).
-     * @param end
-     *            end of the exception handler's scope (exclusive).
-     * @param exception
-     *            internal name of the type of exceptions handled by the
-     *            handler.
-     */
-    public void catchException(final Label start, final Label end,
-            final Type exception) {
-        if (exception == null) {
-            mv.visitTryCatchBlock(start, end, mark(), null);
-        } else {
-            mv.visitTryCatchBlock(start, end, mark(),
-                    exception.getInternalName());
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/InstructionAdapter.java b/asm4/src/org/objectweb/asm/commons/InstructionAdapter.java
deleted file mode 100644
index 82469ba..0000000
--- a/asm4/src/org/objectweb/asm/commons/InstructionAdapter.java
+++ /dev/null
@@ -1,1090 +0,0 @@
-/***

- * ASM: a very small and fast Java bytecode manipulation framework

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * 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.

- */

-

-package org.objectweb.asm.commons;

-

-import org.objectweb.asm.Handle;

-import org.objectweb.asm.Label;

-import org.objectweb.asm.MethodVisitor;

-import org.objectweb.asm.Opcodes;

-import org.objectweb.asm.Type;

-

-/**

- * A {@link MethodVisitor} providing a more detailed API to generate and

- * transform instructions.

- * 

- * @author Eric Bruneton

- */

-public class InstructionAdapter extends MethodVisitor {

-

-    public final static Type OBJECT_TYPE = Type.getType("Ljava/lang/Object;");

-

-    /**

-     * Creates a new {@link InstructionAdapter}. <i>Subclasses must not use this

-     * constructor</i>. Instead, they must use the

-     * {@link #InstructionAdapter(int, MethodVisitor)} version.

-     * 

-     * @param mv

-     *            the method visitor to which this adapter delegates calls.

-     */

-    public InstructionAdapter(final MethodVisitor mv) {

-        this(Opcodes.ASM4, mv);

-    }

-

-    /**

-     * Creates a new {@link InstructionAdapter}.

-     * 

-     * @param api

-     *            the ASM API version implemented by this visitor. Must be one

-     *            of {@link Opcodes#ASM4}.

-     * @param mv

-     *            the method visitor to which this adapter delegates calls.

-     */

-    protected InstructionAdapter(final int api, final MethodVisitor mv) {

-        super(api, mv);

-    }

-

-    @Override

-    public void visitInsn(final int opcode) {

-        switch (opcode) {

-        case Opcodes.NOP:

-            nop();

-            break;

-        case Opcodes.ACONST_NULL:

-            aconst(null);

-            break;

-        case Opcodes.ICONST_M1:

-        case Opcodes.ICONST_0:

-        case Opcodes.ICONST_1:

-        case Opcodes.ICONST_2:

-        case Opcodes.ICONST_3:

-        case Opcodes.ICONST_4:

-        case Opcodes.ICONST_5:

-            iconst(opcode - Opcodes.ICONST_0);

-            break;

-        case Opcodes.LCONST_0:

-        case Opcodes.LCONST_1:

-            lconst(opcode - Opcodes.LCONST_0);

-            break;

-        case Opcodes.FCONST_0:

-        case Opcodes.FCONST_1:

-        case Opcodes.FCONST_2:

-            fconst(opcode - Opcodes.FCONST_0);

-            break;

-        case Opcodes.DCONST_0:

-        case Opcodes.DCONST_1:

-            dconst(opcode - Opcodes.DCONST_0);

-            break;

-        case Opcodes.IALOAD:

-            aload(Type.INT_TYPE);

-            break;

-        case Opcodes.LALOAD:

-            aload(Type.LONG_TYPE);

-            break;

-        case Opcodes.FALOAD:

-            aload(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DALOAD:

-            aload(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.AALOAD:

-            aload(OBJECT_TYPE);

-            break;

-        case Opcodes.BALOAD:

-            aload(Type.BYTE_TYPE);

-            break;

-        case Opcodes.CALOAD:

-            aload(Type.CHAR_TYPE);

-            break;

-        case Opcodes.SALOAD:

-            aload(Type.SHORT_TYPE);

-            break;

-        case Opcodes.IASTORE:

-            astore(Type.INT_TYPE);

-            break;

-        case Opcodes.LASTORE:

-            astore(Type.LONG_TYPE);

-            break;

-        case Opcodes.FASTORE:

-            astore(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DASTORE:

-            astore(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.AASTORE:

-            astore(OBJECT_TYPE);

-            break;

-        case Opcodes.BASTORE:

-            astore(Type.BYTE_TYPE);

-            break;

-        case Opcodes.CASTORE:

-            astore(Type.CHAR_TYPE);

-            break;

-        case Opcodes.SASTORE:

-            astore(Type.SHORT_TYPE);

-            break;

-        case Opcodes.POP:

-            pop();

-            break;

-        case Opcodes.POP2:

-            pop2();

-            break;

-        case Opcodes.DUP:

-            dup();

-            break;

-        case Opcodes.DUP_X1:

-            dupX1();

-            break;

-        case Opcodes.DUP_X2:

-            dupX2();

-            break;

-        case Opcodes.DUP2:

-            dup2();

-            break;

-        case Opcodes.DUP2_X1:

-            dup2X1();

-            break;

-        case Opcodes.DUP2_X2:

-            dup2X2();

-            break;

-        case Opcodes.SWAP:

-            swap();

-            break;

-        case Opcodes.IADD:

-            add(Type.INT_TYPE);

-            break;

-        case Opcodes.LADD:

-            add(Type.LONG_TYPE);

-            break;

-        case Opcodes.FADD:

-            add(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DADD:

-            add(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.ISUB:

-            sub(Type.INT_TYPE);

-            break;

-        case Opcodes.LSUB:

-            sub(Type.LONG_TYPE);

-            break;

-        case Opcodes.FSUB:

-            sub(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DSUB:

-            sub(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.IMUL:

-            mul(Type.INT_TYPE);

-            break;

-        case Opcodes.LMUL:

-            mul(Type.LONG_TYPE);

-            break;

-        case Opcodes.FMUL:

-            mul(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DMUL:

-            mul(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.IDIV:

-            div(Type.INT_TYPE);

-            break;

-        case Opcodes.LDIV:

-            div(Type.LONG_TYPE);

-            break;

-        case Opcodes.FDIV:

-            div(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DDIV:

-            div(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.IREM:

-            rem(Type.INT_TYPE);

-            break;

-        case Opcodes.LREM:

-            rem(Type.LONG_TYPE);

-            break;

-        case Opcodes.FREM:

-            rem(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DREM:

-            rem(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.INEG:

-            neg(Type.INT_TYPE);

-            break;

-        case Opcodes.LNEG:

-            neg(Type.LONG_TYPE);

-            break;

-        case Opcodes.FNEG:

-            neg(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DNEG:

-            neg(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.ISHL:

-            shl(Type.INT_TYPE);

-            break;

-        case Opcodes.LSHL:

-            shl(Type.LONG_TYPE);

-            break;

-        case Opcodes.ISHR:

-            shr(Type.INT_TYPE);

-            break;

-        case Opcodes.LSHR:

-            shr(Type.LONG_TYPE);

-            break;

-        case Opcodes.IUSHR:

-            ushr(Type.INT_TYPE);

-            break;

-        case Opcodes.LUSHR:

-            ushr(Type.LONG_TYPE);

-            break;

-        case Opcodes.IAND:

-            and(Type.INT_TYPE);

-            break;

-        case Opcodes.LAND:

-            and(Type.LONG_TYPE);

-            break;

-        case Opcodes.IOR:

-            or(Type.INT_TYPE);

-            break;

-        case Opcodes.LOR:

-            or(Type.LONG_TYPE);

-            break;

-        case Opcodes.IXOR:

-            xor(Type.INT_TYPE);

-            break;

-        case Opcodes.LXOR:

-            xor(Type.LONG_TYPE);

-            break;

-        case Opcodes.I2L:

-            cast(Type.INT_TYPE, Type.LONG_TYPE);

-            break;

-        case Opcodes.I2F:

-            cast(Type.INT_TYPE, Type.FLOAT_TYPE);

-            break;

-        case Opcodes.I2D:

-            cast(Type.INT_TYPE, Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.L2I:

-            cast(Type.LONG_TYPE, Type.INT_TYPE);

-            break;

-        case Opcodes.L2F:

-            cast(Type.LONG_TYPE, Type.FLOAT_TYPE);

-            break;

-        case Opcodes.L2D:

-            cast(Type.LONG_TYPE, Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.F2I:

-            cast(Type.FLOAT_TYPE, Type.INT_TYPE);

-            break;

-        case Opcodes.F2L:

-            cast(Type.FLOAT_TYPE, Type.LONG_TYPE);

-            break;

-        case Opcodes.F2D:

-            cast(Type.FLOAT_TYPE, Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.D2I:

-            cast(Type.DOUBLE_TYPE, Type.INT_TYPE);

-            break;

-        case Opcodes.D2L:

-            cast(Type.DOUBLE_TYPE, Type.LONG_TYPE);

-            break;

-        case Opcodes.D2F:

-            cast(Type.DOUBLE_TYPE, Type.FLOAT_TYPE);

-            break;

-        case Opcodes.I2B:

-            cast(Type.INT_TYPE, Type.BYTE_TYPE);

-            break;

-        case Opcodes.I2C:

-            cast(Type.INT_TYPE, Type.CHAR_TYPE);

-            break;

-        case Opcodes.I2S:

-            cast(Type.INT_TYPE, Type.SHORT_TYPE);

-            break;

-        case Opcodes.LCMP:

-            lcmp();

-            break;

-        case Opcodes.FCMPL:

-            cmpl(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.FCMPG:

-            cmpg(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DCMPL:

-            cmpl(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.DCMPG:

-            cmpg(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.IRETURN:

-            areturn(Type.INT_TYPE);

-            break;

-        case Opcodes.LRETURN:

-            areturn(Type.LONG_TYPE);

-            break;

-        case Opcodes.FRETURN:

-            areturn(Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DRETURN:

-            areturn(Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.ARETURN:

-            areturn(OBJECT_TYPE);

-            break;

-        case Opcodes.RETURN:

-            areturn(Type.VOID_TYPE);

-            break;

-        case Opcodes.ARRAYLENGTH:

-            arraylength();

-            break;

-        case Opcodes.ATHROW:

-            athrow();

-            break;

-        case Opcodes.MONITORENTER:

-            monitorenter();

-            break;

-        case Opcodes.MONITOREXIT:

-            monitorexit();

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitIntInsn(final int opcode, final int operand) {

-        switch (opcode) {

-        case Opcodes.BIPUSH:

-            iconst(operand);

-            break;

-        case Opcodes.SIPUSH:

-            iconst(operand);

-            break;

-        case Opcodes.NEWARRAY:

-            switch (operand) {

-            case Opcodes.T_BOOLEAN:

-                newarray(Type.BOOLEAN_TYPE);

-                break;

-            case Opcodes.T_CHAR:

-                newarray(Type.CHAR_TYPE);

-                break;

-            case Opcodes.T_BYTE:

-                newarray(Type.BYTE_TYPE);

-                break;

-            case Opcodes.T_SHORT:

-                newarray(Type.SHORT_TYPE);

-                break;

-            case Opcodes.T_INT:

-                newarray(Type.INT_TYPE);

-                break;

-            case Opcodes.T_FLOAT:

-                newarray(Type.FLOAT_TYPE);

-                break;

-            case Opcodes.T_LONG:

-                newarray(Type.LONG_TYPE);

-                break;

-            case Opcodes.T_DOUBLE:

-                newarray(Type.DOUBLE_TYPE);

-                break;

-            default:

-                throw new IllegalArgumentException();

-            }

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitVarInsn(final int opcode, final int var) {

-        switch (opcode) {

-        case Opcodes.ILOAD:

-            load(var, Type.INT_TYPE);

-            break;

-        case Opcodes.LLOAD:

-            load(var, Type.LONG_TYPE);

-            break;

-        case Opcodes.FLOAD:

-            load(var, Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DLOAD:

-            load(var, Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.ALOAD:

-            load(var, OBJECT_TYPE);

-            break;

-        case Opcodes.ISTORE:

-            store(var, Type.INT_TYPE);

-            break;

-        case Opcodes.LSTORE:

-            store(var, Type.LONG_TYPE);

-            break;

-        case Opcodes.FSTORE:

-            store(var, Type.FLOAT_TYPE);

-            break;

-        case Opcodes.DSTORE:

-            store(var, Type.DOUBLE_TYPE);

-            break;

-        case Opcodes.ASTORE:

-            store(var, OBJECT_TYPE);

-            break;

-        case Opcodes.RET:

-            ret(var);

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitTypeInsn(final int opcode, final String type) {

-        Type t = Type.getObjectType(type);

-        switch (opcode) {

-        case Opcodes.NEW:

-            anew(t);

-            break;

-        case Opcodes.ANEWARRAY:

-            newarray(t);

-            break;

-        case Opcodes.CHECKCAST:

-            checkcast(t);

-            break;

-        case Opcodes.INSTANCEOF:

-            instanceOf(t);

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitFieldInsn(final int opcode, final String owner,

-            final String name, final String desc) {

-        switch (opcode) {

-        case Opcodes.GETSTATIC:

-            getstatic(owner, name, desc);

-            break;

-        case Opcodes.PUTSTATIC:

-            putstatic(owner, name, desc);

-            break;

-        case Opcodes.GETFIELD:

-            getfield(owner, name, desc);

-            break;

-        case Opcodes.PUTFIELD:

-            putfield(owner, name, desc);

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitMethodInsn(final int opcode, final String owner,

-            final String name, final String desc) {

-        switch (opcode) {

-        case Opcodes.INVOKESPECIAL:

-            invokespecial(owner, name, desc);

-            break;

-        case Opcodes.INVOKEVIRTUAL:

-            invokevirtual(owner, name, desc);

-            break;

-        case Opcodes.INVOKESTATIC:

-            invokestatic(owner, name, desc);

-            break;

-        case Opcodes.INVOKEINTERFACE:

-            invokeinterface(owner, name, desc);

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,

-            Object... bsmArgs) {

-        invokedynamic(name, desc, bsm, bsmArgs);

-    }

-

-    @Override

-    public void visitJumpInsn(final int opcode, final Label label) {

-        switch (opcode) {

-        case Opcodes.IFEQ:

-            ifeq(label);

-            break;

-        case Opcodes.IFNE:

-            ifne(label);

-            break;

-        case Opcodes.IFLT:

-            iflt(label);

-            break;

-        case Opcodes.IFGE:

-            ifge(label);

-            break;

-        case Opcodes.IFGT:

-            ifgt(label);

-            break;

-        case Opcodes.IFLE:

-            ifle(label);

-            break;

-        case Opcodes.IF_ICMPEQ:

-            ificmpeq(label);

-            break;

-        case Opcodes.IF_ICMPNE:

-            ificmpne(label);

-            break;

-        case Opcodes.IF_ICMPLT:

-            ificmplt(label);

-            break;

-        case Opcodes.IF_ICMPGE:

-            ificmpge(label);

-            break;

-        case Opcodes.IF_ICMPGT:

-            ificmpgt(label);

-            break;

-        case Opcodes.IF_ICMPLE:

-            ificmple(label);

-            break;

-        case Opcodes.IF_ACMPEQ:

-            ifacmpeq(label);

-            break;

-        case Opcodes.IF_ACMPNE:

-            ifacmpne(label);

-            break;

-        case Opcodes.GOTO:

-            goTo(label);

-            break;

-        case Opcodes.JSR:

-            jsr(label);

-            break;

-        case Opcodes.IFNULL:

-            ifnull(label);

-            break;

-        case Opcodes.IFNONNULL:

-            ifnonnull(label);

-            break;

-        default:

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitLabel(final Label label) {

-        mark(label);

-    }

-

-    @Override

-    public void visitLdcInsn(final Object cst) {

-        if (cst instanceof Integer) {

-            int val = ((Integer) cst).intValue();

-            iconst(val);

-        } else if (cst instanceof Byte) {

-            int val = ((Byte) cst).intValue();

-            iconst(val);

-        } else if (cst instanceof Character) {

-            int val = ((Character) cst).charValue();

-            iconst(val);

-        } else if (cst instanceof Short) {

-            int val = ((Short) cst).intValue();

-            iconst(val);

-        } else if (cst instanceof Boolean) {

-            int val = ((Boolean) cst).booleanValue() ? 1 : 0;

-            iconst(val);

-        } else if (cst instanceof Float) {

-            float val = ((Float) cst).floatValue();

-            fconst(val);

-        } else if (cst instanceof Long) {

-            long val = ((Long) cst).longValue();

-            lconst(val);

-        } else if (cst instanceof Double) {

-            double val = ((Double) cst).doubleValue();

-            dconst(val);

-        } else if (cst instanceof String) {

-            aconst(cst);

-        } else if (cst instanceof Type) {

-            tconst((Type) cst);

-        } else if (cst instanceof Handle) {

-            hconst((Handle) cst);

-        } else {

-            throw new IllegalArgumentException();

-        }

-    }

-

-    @Override

-    public void visitIincInsn(final int var, final int increment) {

-        iinc(var, increment);

-    }

-

-    @Override

-    public void visitTableSwitchInsn(final int min, final int max,

-            final Label dflt, final Label... labels) {

-        tableswitch(min, max, dflt, labels);

-    }

-

-    @Override

-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,

-            final Label[] labels) {

-        lookupswitch(dflt, keys, labels);

-    }

-

-    @Override

-    public void visitMultiANewArrayInsn(final String desc, final int dims) {

-        multianewarray(desc, dims);

-    }

-

-    // -----------------------------------------------------------------------

-

-    public void nop() {

-        mv.visitInsn(Opcodes.NOP);

-    }

-

-    public void aconst(final Object cst) {

-        if (cst == null) {

-            mv.visitInsn(Opcodes.ACONST_NULL);

-        } else {

-            mv.visitLdcInsn(cst);

-        }

-    }

-

-    public void iconst(final int cst) {

-        if (cst >= -1 && cst <= 5) {

-            mv.visitInsn(Opcodes.ICONST_0 + cst);

-        } else if (cst >= Byte.MIN_VALUE && cst <= Byte.MAX_VALUE) {

-            mv.visitIntInsn(Opcodes.BIPUSH, cst);

-        } else if (cst >= Short.MIN_VALUE && cst <= Short.MAX_VALUE) {

-            mv.visitIntInsn(Opcodes.SIPUSH, cst);

-        } else {

-            mv.visitLdcInsn(new Integer(cst));

-        }

-    }

-

-    public void lconst(final long cst) {

-        if (cst == 0L || cst == 1L) {

-            mv.visitInsn(Opcodes.LCONST_0 + (int) cst);

-        } else {

-            mv.visitLdcInsn(new Long(cst));

-        }

-    }

-

-    public void fconst(final float cst) {

-        int bits = Float.floatToIntBits(cst);

-        if (bits == 0L || bits == 0x3f800000 || bits == 0x40000000) { // 0..2

-            mv.visitInsn(Opcodes.FCONST_0 + (int) cst);

-        } else {

-            mv.visitLdcInsn(new Float(cst));

-        }

-    }

-

-    public void dconst(final double cst) {

-        long bits = Double.doubleToLongBits(cst);

-        if (bits == 0L || bits == 0x3ff0000000000000L) { // +0.0d and 1.0d

-            mv.visitInsn(Opcodes.DCONST_0 + (int) cst);

-        } else {

-            mv.visitLdcInsn(new Double(cst));

-        }

-    }

-

-    public void tconst(final Type type) {

-        mv.visitLdcInsn(type);

-    }

-

-    public void hconst(final Handle handle) {

-        mv.visitLdcInsn(handle);

-    }

-

-    public void load(final int var, final Type type) {

-        mv.visitVarInsn(type.getOpcode(Opcodes.ILOAD), var);

-    }

-

-    public void aload(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IALOAD));

-    }

-

-    public void store(final int var, final Type type) {

-        mv.visitVarInsn(type.getOpcode(Opcodes.ISTORE), var);

-    }

-

-    public void astore(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IASTORE));

-    }

-

-    public void pop() {

-        mv.visitInsn(Opcodes.POP);

-    }

-

-    public void pop2() {

-        mv.visitInsn(Opcodes.POP2);

-    }

-

-    public void dup() {

-        mv.visitInsn(Opcodes.DUP);

-    }

-

-    public void dup2() {

-        mv.visitInsn(Opcodes.DUP2);

-    }

-

-    public void dupX1() {

-        mv.visitInsn(Opcodes.DUP_X1);

-    }

-

-    public void dupX2() {

-        mv.visitInsn(Opcodes.DUP_X2);

-    }

-

-    public void dup2X1() {

-        mv.visitInsn(Opcodes.DUP2_X1);

-    }

-

-    public void dup2X2() {

-        mv.visitInsn(Opcodes.DUP2_X2);

-    }

-

-    public void swap() {

-        mv.visitInsn(Opcodes.SWAP);

-    }

-

-    public void add(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IADD));

-    }

-

-    public void sub(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.ISUB));

-    }

-

-    public void mul(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IMUL));

-    }

-

-    public void div(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IDIV));

-    }

-

-    public void rem(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IREM));

-    }

-

-    public void neg(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.INEG));

-    }

-

-    public void shl(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.ISHL));

-    }

-

-    public void shr(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.ISHR));

-    }

-

-    public void ushr(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IUSHR));

-    }

-

-    public void and(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IAND));

-    }

-

-    public void or(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IOR));

-    }

-

-    public void xor(final Type type) {

-        mv.visitInsn(type.getOpcode(Opcodes.IXOR));

-    }

-

-    public void iinc(final int var, final int increment) {

-        mv.visitIincInsn(var, increment);

-    }

-

-    public void cast(final Type from, final Type to) {

-        if (from != to) {

-            if (from == Type.DOUBLE_TYPE) {

-                if (to == Type.FLOAT_TYPE) {

-                    mv.visitInsn(Opcodes.D2F);

-                } else if (to == Type.LONG_TYPE) {

-                    mv.visitInsn(Opcodes.D2L);

-                } else {

-                    mv.visitInsn(Opcodes.D2I);

-                    cast(Type.INT_TYPE, to);

-                }

-            } else if (from == Type.FLOAT_TYPE) {

-                if (to == Type.DOUBLE_TYPE) {

-                    mv.visitInsn(Opcodes.F2D);

-                } else if (to == Type.LONG_TYPE) {

-                    mv.visitInsn(Opcodes.F2L);

-                } else {

-                    mv.visitInsn(Opcodes.F2I);

-                    cast(Type.INT_TYPE, to);

-                }

-            } else if (from == Type.LONG_TYPE) {

-                if (to == Type.DOUBLE_TYPE) {

-                    mv.visitInsn(Opcodes.L2D);

-                } else if (to == Type.FLOAT_TYPE) {

-                    mv.visitInsn(Opcodes.L2F);

-                } else {

-                    mv.visitInsn(Opcodes.L2I);

-                    cast(Type.INT_TYPE, to);

-                }

-            } else {

-                if (to == Type.BYTE_TYPE) {

-                    mv.visitInsn(Opcodes.I2B);

-                } else if (to == Type.CHAR_TYPE) {

-                    mv.visitInsn(Opcodes.I2C);

-                } else if (to == Type.DOUBLE_TYPE) {

-                    mv.visitInsn(Opcodes.I2D);

-                } else if (to == Type.FLOAT_TYPE) {

-                    mv.visitInsn(Opcodes.I2F);

-                } else if (to == Type.LONG_TYPE) {

-                    mv.visitInsn(Opcodes.I2L);

-                } else if (to == Type.SHORT_TYPE) {

-                    mv.visitInsn(Opcodes.I2S);

-                }

-            }

-        }

-    }

-

-    public void lcmp() {

-        mv.visitInsn(Opcodes.LCMP);

-    }

-

-    public void cmpl(final Type type) {

-        mv.visitInsn(type == Type.FLOAT_TYPE ? Opcodes.FCMPL : Opcodes.DCMPL);

-    }

-

-    public void cmpg(final Type type) {

-        mv.visitInsn(type == Type.FLOAT_TYPE ? Opcodes.FCMPG : Opcodes.DCMPG);

-    }

-

-    public void ifeq(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFEQ, label);

-    }

-

-    public void ifne(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFNE, label);

-    }

-

-    public void iflt(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFLT, label);

-    }

-

-    public void ifge(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFGE, label);

-    }

-

-    public void ifgt(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFGT, label);

-    }

-

-    public void ifle(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFLE, label);

-    }

-

-    public void ificmpeq(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ICMPEQ, label);

-    }

-

-    public void ificmpne(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ICMPNE, label);

-    }

-

-    public void ificmplt(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ICMPLT, label);

-    }

-

-    public void ificmpge(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ICMPGE, label);

-    }

-

-    public void ificmpgt(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ICMPGT, label);

-    }

-

-    public void ificmple(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ICMPLE, label);

-    }

-

-    public void ifacmpeq(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ACMPEQ, label);

-    }

-

-    public void ifacmpne(final Label label) {

-        mv.visitJumpInsn(Opcodes.IF_ACMPNE, label);

-    }

-

-    public void goTo(final Label label) {

-        mv.visitJumpInsn(Opcodes.GOTO, label);

-    }

-

-    public void jsr(final Label label) {

-        mv.visitJumpInsn(Opcodes.JSR, label);

-    }

-

-    public void ret(final int var) {

-        mv.visitVarInsn(Opcodes.RET, var);

-    }

-

-    public void tableswitch(final int min, final int max, final Label dflt,

-            final Label... labels) {

-        mv.visitTableSwitchInsn(min, max, dflt, labels);

-    }

-

-    public void lookupswitch(final Label dflt, final int[] keys,

-            final Label[] labels) {

-        mv.visitLookupSwitchInsn(dflt, keys, labels);

-    }

-

-    public void areturn(final Type t) {

-        mv.visitInsn(t.getOpcode(Opcodes.IRETURN));

-    }

-

-    public void getstatic(final String owner, final String name,

-            final String desc) {

-        mv.visitFieldInsn(Opcodes.GETSTATIC, owner, name, desc);

-    }

-

-    public void putstatic(final String owner, final String name,

-            final String desc) {

-        mv.visitFieldInsn(Opcodes.PUTSTATIC, owner, name, desc);

-    }

-

-    public void getfield(final String owner, final String name,

-            final String desc) {

-        mv.visitFieldInsn(Opcodes.GETFIELD, owner, name, desc);

-    }

-

-    public void putfield(final String owner, final String name,

-            final String desc) {

-        mv.visitFieldInsn(Opcodes.PUTFIELD, owner, name, desc);

-    }

-

-    public void invokevirtual(final String owner, final String name,

-            final String desc) {

-        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, owner, name, desc);

-    }

-

-    public void invokespecial(final String owner, final String name,

-            final String desc) {

-        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, owner, name, desc);

-    }

-

-    public void invokestatic(final String owner, final String name,

-            final String desc) {

-        mv.visitMethodInsn(Opcodes.INVOKESTATIC, owner, name, desc);

-    }

-

-    public void invokeinterface(final String owner, final String name,

-            final String desc) {

-        mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, owner, name, desc);

-    }

-

-    public void invokedynamic(String name, String desc, Handle bsm,

-            Object[] bsmArgs) {

-        mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);

-    }

-

-    public void anew(final Type type) {

-        mv.visitTypeInsn(Opcodes.NEW, type.getInternalName());

-    }

-

-    public void newarray(final Type type) {

-        int typ;

-        switch (type.getSort()) {

-        case Type.BOOLEAN:

-            typ = Opcodes.T_BOOLEAN;

-            break;

-        case Type.CHAR:

-            typ = Opcodes.T_CHAR;

-            break;

-        case Type.BYTE:

-            typ = Opcodes.T_BYTE;

-            break;

-        case Type.SHORT:

-            typ = Opcodes.T_SHORT;

-            break;

-        case Type.INT:

-            typ = Opcodes.T_INT;

-            break;

-        case Type.FLOAT:

-            typ = Opcodes.T_FLOAT;

-            break;

-        case Type.LONG:

-            typ = Opcodes.T_LONG;

-            break;

-        case Type.DOUBLE:

-            typ = Opcodes.T_DOUBLE;

-            break;

-        default:

-            mv.visitTypeInsn(Opcodes.ANEWARRAY, type.getInternalName());

-            return;

-        }

-        mv.visitIntInsn(Opcodes.NEWARRAY, typ);

-    }

-

-    public void arraylength() {

-        mv.visitInsn(Opcodes.ARRAYLENGTH);

-    }

-

-    public void athrow() {

-        mv.visitInsn(Opcodes.ATHROW);

-    }

-

-    public void checkcast(final Type type) {

-        mv.visitTypeInsn(Opcodes.CHECKCAST, type.getInternalName());

-    }

-

-    public void instanceOf(final Type type) {

-        mv.visitTypeInsn(Opcodes.INSTANCEOF, type.getInternalName());

-    }

-

-    public void monitorenter() {

-        mv.visitInsn(Opcodes.MONITORENTER);

-    }

-

-    public void monitorexit() {

-        mv.visitInsn(Opcodes.MONITOREXIT);

-    }

-

-    public void multianewarray(final String desc, final int dims) {

-        mv.visitMultiANewArrayInsn(desc, dims);

-    }

-

-    public void ifnull(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFNULL, label);

-    }

-

-    public void ifnonnull(final Label label) {

-        mv.visitJumpInsn(Opcodes.IFNONNULL, label);

-    }

-

-    public void mark(final Label label) {

-        mv.visitLabel(label);

-    }

-}

diff --git a/asm4/src/org/objectweb/asm/commons/JSRInlinerAdapter.java b/asm4/src/org/objectweb/asm/commons/JSRInlinerAdapter.java
deleted file mode 100644
index 8fd5d45..0000000
--- a/asm4/src/org/objectweb/asm/commons/JSRInlinerAdapter.java
+++ /dev/null
@@ -1,736 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.InsnList;
-import org.objectweb.asm.tree.InsnNode;
-import org.objectweb.asm.tree.JumpInsnNode;
-import org.objectweb.asm.tree.LabelNode;
-import org.objectweb.asm.tree.LocalVariableNode;
-import org.objectweb.asm.tree.LookupSwitchInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.TableSwitchInsnNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-
-/**
- * A {@link org.objectweb.asm.MethodVisitor} that removes JSR instructions and
- * inlines the referenced subroutines.
- * 
- * <b>Explanation of how it works</b> TODO
- * 
- * @author Niko Matsakis
- */
-public class JSRInlinerAdapter extends MethodNode implements Opcodes {
-
-    private static final boolean LOGGING = false;
-
-    /**
-     * For each label that is jumped to by a JSR, we create a BitSet instance.
-     */
-    private final Map<LabelNode, BitSet> subroutineHeads = new HashMap<LabelNode, BitSet>();
-
-    /**
-     * This subroutine instance denotes the line of execution that is not
-     * contained within any subroutine; i.e., the "subroutine" that is executing
-     * when a method first begins.
-     */
-    private final BitSet mainSubroutine = new BitSet();
-
-    /**
-     * This BitSet contains the index of every instruction that belongs to more
-     * than one subroutine. This should not happen often.
-     */
-    final BitSet dualCitizens = new BitSet();
-
-    /**
-     * Creates a new JSRInliner. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #JSRInlinerAdapter(int, MethodVisitor, int, String, String, String, String[])}
-     * version.
-     * 
-     * @param mv
-     *            the <code>MethodVisitor</code> to send the resulting inlined
-     *            method code to (use <code>null</code> for none).
-     * @param access
-     *            the method's access flags (see {@link Opcodes}). This
-     *            parameter also indicates if the method is synthetic and/or
-     *            deprecated.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt>.
-     * @param exceptions
-     *            the internal names of the method's exception classes (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     */
-    public JSRInlinerAdapter(final MethodVisitor mv, final int access,
-            final String name, final String desc, final String signature,
-            final String[] exceptions) {
-        this(Opcodes.ASM4, mv, access, name, desc, signature, exceptions);
-    }
-
-    /**
-     * Creates a new JSRInliner.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param mv
-     *            the <code>MethodVisitor</code> to send the resulting inlined
-     *            method code to (use <code>null</code> for none).
-     * @param access
-     *            the method's access flags (see {@link Opcodes}). This
-     *            parameter also indicates if the method is synthetic and/or
-     *            deprecated.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt>.
-     * @param exceptions
-     *            the internal names of the method's exception classes (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     */
-    protected JSRInlinerAdapter(final int api, final MethodVisitor mv,
-            final int access, final String name, final String desc,
-            final String signature, final String[] exceptions) {
-        super(api, access, name, desc, signature, exceptions);
-        this.mv = mv;
-    }
-
-    /**
-     * Detects a JSR instruction and sets a flag to indicate we will need to do
-     * inlining.
-     */
-    @Override
-    public void visitJumpInsn(final int opcode, final Label lbl) {
-        super.visitJumpInsn(opcode, lbl);
-        LabelNode ln = ((JumpInsnNode) instructions.getLast()).label;
-        if (opcode == JSR && !subroutineHeads.containsKey(ln)) {
-            subroutineHeads.put(ln, new BitSet());
-        }
-    }
-
-    /**
-     * If any JSRs were seen, triggers the inlining process. Otherwise, forwards
-     * the byte codes untouched.
-     */
-    @Override
-    public void visitEnd() {
-        if (!subroutineHeads.isEmpty()) {
-            markSubroutines();
-            if (LOGGING) {
-                log(mainSubroutine.toString());
-                Iterator<BitSet> it = subroutineHeads.values().iterator();
-                while (it.hasNext()) {
-                    BitSet sub = it.next();
-                    log(sub.toString());
-                }
-            }
-            emitCode();
-        }
-
-        // Forward the translate opcodes on if appropriate:
-        if (mv != null) {
-            accept(mv);
-        }
-    }
-
-    /**
-     * Walks the method and determines which internal subroutine(s), if any,
-     * each instruction is a method of.
-     */
-    private void markSubroutines() {
-        BitSet anyvisited = new BitSet();
-
-        // First walk the main subroutine and find all those instructions which
-        // can be reached without invoking any JSR at all
-        markSubroutineWalk(mainSubroutine, 0, anyvisited);
-
-        // Go through the head of each subroutine and find any nodes reachable
-        // to that subroutine without following any JSR links.
-        for (Iterator<Map.Entry<LabelNode, BitSet>> it = subroutineHeads
-                .entrySet().iterator(); it.hasNext();) {
-            Map.Entry<LabelNode, BitSet> entry = it.next();
-            LabelNode lab = entry.getKey();
-            BitSet sub = entry.getValue();
-            int index = instructions.indexOf(lab);
-            markSubroutineWalk(sub, index, anyvisited);
-        }
-    }
-
-    /**
-     * Performs a depth first search walking the normal byte code path starting
-     * at <code>index</code>, and adding each instruction encountered into the
-     * subroutine <code>sub</code>. After this walk is complete, iterates over
-     * the exception handlers to ensure that we also include those byte codes
-     * which are reachable through an exception that may be thrown during the
-     * execution of the subroutine. Invoked from <code>markSubroutines()</code>.
-     * 
-     * @param sub
-     *            the subroutine whose instructions must be computed.
-     * @param index
-     *            an instruction of this subroutine.
-     * @param anyvisited
-     *            indexes of the already visited instructions, i.e. marked as
-     *            part of this subroutine or any previously computed subroutine.
-     */
-    private void markSubroutineWalk(final BitSet sub, final int index,
-            final BitSet anyvisited) {
-        if (LOGGING) {
-            log("markSubroutineWalk: sub=" + sub + " index=" + index);
-        }
-
-        // First find those instructions reachable via normal execution
-        markSubroutineWalkDFS(sub, index, anyvisited);
-
-        // Now, make sure we also include any applicable exception handlers
-        boolean loop = true;
-        while (loop) {
-            loop = false;
-            for (Iterator<TryCatchBlockNode> it = tryCatchBlocks.iterator(); it
-                    .hasNext();) {
-                TryCatchBlockNode trycatch = it.next();
-
-                if (LOGGING) {
-                    // TODO use of default toString().
-                    log("Scanning try/catch " + trycatch);
-                }
-
-                // If the handler has already been processed, skip it.
-                int handlerindex = instructions.indexOf(trycatch.handler);
-                if (sub.get(handlerindex)) {
-                    continue;
-                }
-
-                int startindex = instructions.indexOf(trycatch.start);
-                int endindex = instructions.indexOf(trycatch.end);
-                int nextbit = sub.nextSetBit(startindex);
-                if (nextbit != -1 && nextbit < endindex) {
-                    if (LOGGING) {
-                        log("Adding exception handler: " + startindex + '-'
-                                + endindex + " due to " + nextbit + " handler "
-                                + handlerindex);
-                    }
-                    markSubroutineWalkDFS(sub, handlerindex, anyvisited);
-                    loop = true;
-                }
-            }
-        }
-    }
-
-    /**
-     * Performs a simple DFS of the instructions, assigning each to the
-     * subroutine <code>sub</code>. Starts from <code>index</code>. Invoked only
-     * by <code>markSubroutineWalk()</code>.
-     * 
-     * @param sub
-     *            the subroutine whose instructions must be computed.
-     * @param index
-     *            an instruction of this subroutine.
-     * @param anyvisited
-     *            indexes of the already visited instructions, i.e. marked as
-     *            part of this subroutine or any previously computed subroutine.
-     */
-    private void markSubroutineWalkDFS(final BitSet sub, int index,
-            final BitSet anyvisited) {
-        while (true) {
-            AbstractInsnNode node = instructions.get(index);
-
-            // don't visit a node twice
-            if (sub.get(index)) {
-                return;
-            }
-            sub.set(index);
-
-            // check for those nodes already visited by another subroutine
-            if (anyvisited.get(index)) {
-                dualCitizens.set(index);
-                if (LOGGING) {
-                    log("Instruction #" + index + " is dual citizen.");
-                }
-            }
-            anyvisited.set(index);
-
-            if (node.getType() == AbstractInsnNode.JUMP_INSN
-                    && node.getOpcode() != JSR) {
-                // we do not follow recursively called subroutines here; but any
-                // other sort of branch we do follow
-                JumpInsnNode jnode = (JumpInsnNode) node;
-                int destidx = instructions.indexOf(jnode.label);
-                markSubroutineWalkDFS(sub, destidx, anyvisited);
-            }
-            if (node.getType() == AbstractInsnNode.TABLESWITCH_INSN) {
-                TableSwitchInsnNode tsnode = (TableSwitchInsnNode) node;
-                int destidx = instructions.indexOf(tsnode.dflt);
-                markSubroutineWalkDFS(sub, destidx, anyvisited);
-                for (int i = tsnode.labels.size() - 1; i >= 0; --i) {
-                    LabelNode l = tsnode.labels.get(i);
-                    destidx = instructions.indexOf(l);
-                    markSubroutineWalkDFS(sub, destidx, anyvisited);
-                }
-            }
-            if (node.getType() == AbstractInsnNode.LOOKUPSWITCH_INSN) {
-                LookupSwitchInsnNode lsnode = (LookupSwitchInsnNode) node;
-                int destidx = instructions.indexOf(lsnode.dflt);
-                markSubroutineWalkDFS(sub, destidx, anyvisited);
-                for (int i = lsnode.labels.size() - 1; i >= 0; --i) {
-                    LabelNode l = lsnode.labels.get(i);
-                    destidx = instructions.indexOf(l);
-                    markSubroutineWalkDFS(sub, destidx, anyvisited);
-                }
-            }
-
-            // check to see if this opcode falls through to the next instruction
-            // or not; if not, return.
-            switch (instructions.get(index).getOpcode()) {
-            case GOTO:
-            case RET:
-            case TABLESWITCH:
-            case LOOKUPSWITCH:
-            case IRETURN:
-            case LRETURN:
-            case FRETURN:
-            case DRETURN:
-            case ARETURN:
-            case RETURN:
-            case ATHROW:
-                /*
-                 * note: this either returns from this subroutine, or a parent
-                 * subroutine which invoked it
-                 */
-                return;
-            }
-
-            // Use tail recursion here in the form of an outer while loop to
-            // avoid our stack growing needlessly:
-            index++;
-        }
-    }
-
-    /**
-     * Creates the new instructions, inlining each instantiation of each
-     * subroutine until the code is fully elaborated.
-     */
-    private void emitCode() {
-        LinkedList<Instantiation> worklist = new LinkedList<Instantiation>();
-        // Create an instantiation of the "root" subroutine, which is just the
-        // main routine
-        worklist.add(new Instantiation(null, mainSubroutine));
-
-        // Emit instantiations of each subroutine we encounter, including the
-        // main subroutine
-        InsnList newInstructions = new InsnList();
-        List<TryCatchBlockNode> newTryCatchBlocks = new ArrayList<TryCatchBlockNode>();
-        List<LocalVariableNode> newLocalVariables = new ArrayList<LocalVariableNode>();
-        while (!worklist.isEmpty()) {
-            Instantiation inst = worklist.removeFirst();
-            emitSubroutine(inst, worklist, newInstructions, newTryCatchBlocks,
-                    newLocalVariables);
-        }
-        instructions = newInstructions;
-        tryCatchBlocks = newTryCatchBlocks;
-        localVariables = newLocalVariables;
-    }
-
-    /**
-     * Emits one instantiation of one subroutine, specified by
-     * <code>instant</code>. May add new instantiations that are invoked by this
-     * one to the <code>worklist</code> parameter, and new try/catch blocks to
-     * <code>newTryCatchBlocks</code>.
-     * 
-     * @param instant
-     *            the instantiation that must be performed.
-     * @param worklist
-     *            list of the instantiations that remain to be done.
-     * @param newInstructions
-     *            the instruction list to which the instantiated code must be
-     *            appended.
-     * @param newTryCatchBlocks
-     *            the exception handler list to which the instantiated handlers
-     *            must be appended.
-     */
-    private void emitSubroutine(final Instantiation instant,
-            final List<Instantiation> worklist, final InsnList newInstructions,
-            final List<TryCatchBlockNode> newTryCatchBlocks,
-            final List<LocalVariableNode> newLocalVariables) {
-        LabelNode duplbl = null;
-
-        if (LOGGING) {
-            log("--------------------------------------------------------");
-            log("Emitting instantiation of subroutine " + instant.subroutine);
-        }
-
-        // Emit the relevant instructions for this instantiation, translating
-        // labels and jump targets as we go:
-        for (int i = 0, c = instructions.size(); i < c; i++) {
-            AbstractInsnNode insn = instructions.get(i);
-            Instantiation owner = instant.findOwner(i);
-
-            // Always remap labels:
-            if (insn.getType() == AbstractInsnNode.LABEL) {
-                // Translate labels into their renamed equivalents.
-                // Avoid adding the same label more than once. Note
-                // that because we own this instruction the gotoTable
-                // and the rangeTable will always agree.
-                LabelNode ilbl = (LabelNode) insn;
-                LabelNode remap = instant.rangeLabel(ilbl);
-                if (LOGGING) {
-                    // TODO use of default toString().
-                    log("Translating lbl #" + i + ':' + ilbl + " to " + remap);
-                }
-                if (remap != duplbl) {
-                    newInstructions.add(remap);
-                    duplbl = remap;
-                }
-                continue;
-            }
-
-            // We don't want to emit instructions that were already
-            // emitted by a subroutine higher on the stack. Note that
-            // it is still possible for a given instruction to be
-            // emitted twice because it may belong to two subroutines
-            // that do not invoke each other.
-            if (owner != instant) {
-                continue;
-            }
-
-            if (LOGGING) {
-                log("Emitting inst #" + i);
-            }
-
-            if (insn.getOpcode() == RET) {
-                // Translate RET instruction(s) to a jump to the return label
-                // for the appropriate instantiation. The problem is that the
-                // subroutine may "fall through" to the ret of a parent
-                // subroutine; therefore, to find the appropriate ret label we
-                // find the lowest subroutine on the stack that claims to own
-                // this instruction. See the class javadoc comment for an
-                // explanation on why this technique is safe (note: it is only
-                // safe if the input is verifiable).
-                LabelNode retlabel = null;
-                for (Instantiation p = instant; p != null; p = p.previous) {
-                    if (p.subroutine.get(i)) {
-                        retlabel = p.returnLabel;
-                    }
-                }
-                if (retlabel == null) {
-                    // This is only possible if the mainSubroutine owns a RET
-                    // instruction, which should never happen for verifiable
-                    // code.
-                    throw new RuntimeException("Instruction #" + i
-                            + " is a RET not owned by any subroutine");
-                }
-                newInstructions.add(new JumpInsnNode(GOTO, retlabel));
-            } else if (insn.getOpcode() == JSR) {
-                LabelNode lbl = ((JumpInsnNode) insn).label;
-                BitSet sub = subroutineHeads.get(lbl);
-                Instantiation newinst = new Instantiation(instant, sub);
-                LabelNode startlbl = newinst.gotoLabel(lbl);
-
-                if (LOGGING) {
-                    log(" Creating instantiation of subr " + sub);
-                }
-
-                // Rather than JSRing, we will jump to the inline version and
-                // push NULL for what was once the return value. This hack
-                // allows us to avoid doing any sort of data flow analysis to
-                // figure out which instructions manipulate the old return value
-                // pointer which is now known to be unneeded.
-                newInstructions.add(new InsnNode(ACONST_NULL));
-                newInstructions.add(new JumpInsnNode(GOTO, startlbl));
-                newInstructions.add(newinst.returnLabel);
-
-                // Insert this new instantiation into the queue to be emitted
-                // later.
-                worklist.add(newinst);
-            } else {
-                newInstructions.add(insn.clone(instant));
-            }
-        }
-
-        // Emit try/catch blocks that are relevant to this method.
-        for (Iterator<TryCatchBlockNode> it = tryCatchBlocks.iterator(); it
-                .hasNext();) {
-            TryCatchBlockNode trycatch = it.next();
-
-            if (LOGGING) {
-                // TODO use of default toString().
-                log("try catch block original labels=" + trycatch.start + '-'
-                        + trycatch.end + "->" + trycatch.handler);
-            }
-
-            final LabelNode start = instant.rangeLabel(trycatch.start);
-            final LabelNode end = instant.rangeLabel(trycatch.end);
-
-            // Ignore empty try/catch regions
-            if (start == end) {
-                if (LOGGING) {
-                    log(" try catch block empty in this subroutine");
-                }
-                continue;
-            }
-
-            final LabelNode handler = instant.gotoLabel(trycatch.handler);
-
-            if (LOGGING) {
-                // TODO use of default toString().
-                log(" try catch block new labels=" + start + '-' + end + "->"
-                        + handler);
-            }
-
-            if (start == null || end == null || handler == null) {
-                throw new RuntimeException("Internal error!");
-            }
-
-            newTryCatchBlocks.add(new TryCatchBlockNode(start, end, handler,
-                    trycatch.type));
-        }
-
-        for (Iterator<LocalVariableNode> it = localVariables.iterator(); it
-                .hasNext();) {
-            LocalVariableNode lvnode = it.next();
-            if (LOGGING) {
-                log("local var " + lvnode.name);
-            }
-            final LabelNode start = instant.rangeLabel(lvnode.start);
-            final LabelNode end = instant.rangeLabel(lvnode.end);
-            if (start == end) {
-                if (LOGGING) {
-                    log("  local variable empty in this sub");
-                }
-                continue;
-            }
-            newLocalVariables.add(new LocalVariableNode(lvnode.name,
-                    lvnode.desc, lvnode.signature, start, end, lvnode.index));
-        }
-    }
-
-    private static void log(final String str) {
-        System.err.println(str);
-    }
-
-    /**
-     * A class that represents an instantiation of a subroutine. Each
-     * instantiation has an associate "stack" --- which is a listing of those
-     * instantiations that were active when this particular instance of this
-     * subroutine was invoked. Each instantiation also has a map from the
-     * original labels of the program to the labels appropriate for this
-     * instantiation, and finally a label to return to.
-     */
-    private class Instantiation extends AbstractMap<LabelNode, LabelNode> {
-
-        /**
-         * Previous instantiations; the stack must be statically predictable to
-         * be inlinable.
-         */
-        final Instantiation previous;
-
-        /**
-         * The subroutine this is an instantiation of.
-         */
-        public final BitSet subroutine;
-
-        /**
-         * This table maps Labels from the original source to Labels pointing at
-         * code specific to this instantiation, for use in remapping try/catch
-         * blocks,as well as gotos.
-         * 
-         * Note that in the presence of dual citizens instructions, that is,
-         * instructions which belong to more than one subroutine due to the
-         * merging of control flow without a RET instruction, we will map the
-         * target label of a GOTO to the label used by the instantiation lowest
-         * on the stack. This avoids code duplication during inlining in most
-         * cases.
-         * 
-         * @see #findOwner(int)
-         */
-        public final Map<LabelNode, LabelNode> rangeTable = new HashMap<LabelNode, LabelNode>();
-
-        /**
-         * All returns for this instantiation will be mapped to this label
-         */
-        public final LabelNode returnLabel;
-
-        Instantiation(final Instantiation prev, final BitSet sub) {
-            previous = prev;
-            subroutine = sub;
-            for (Instantiation p = prev; p != null; p = p.previous) {
-                if (p.subroutine == sub) {
-                    throw new RuntimeException("Recursive invocation of " + sub);
-                }
-            }
-
-            // Determine the label to return to when this subroutine terminates
-            // via RET: note that the main subroutine never terminates via RET.
-            if (prev != null) {
-                returnLabel = new LabelNode();
-            } else {
-                returnLabel = null;
-            }
-
-            // Each instantiation will remap the labels from the code above to
-            // refer to its particular copy of its own instructions. Note that
-            // we collapse labels which point at the same instruction into one:
-            // this is fairly common as we are often ignoring large chunks of
-            // instructions, so what were previously distinct labels become
-            // duplicates.
-            LabelNode duplbl = null;
-            for (int i = 0, c = instructions.size(); i < c; i++) {
-                AbstractInsnNode insn = instructions.get(i);
-
-                if (insn.getType() == AbstractInsnNode.LABEL) {
-                    LabelNode ilbl = (LabelNode) insn;
-
-                    if (duplbl == null) {
-                        // if we already have a label pointing at this spot,
-                        // don't recreate it.
-                        duplbl = new LabelNode();
-                    }
-
-                    // Add an entry in the rangeTable for every label
-                    // in the original code which points at the next
-                    // instruction of our own to be emitted.
-                    rangeTable.put(ilbl, duplbl);
-                } else if (findOwner(i) == this) {
-                    // We will emit this instruction, so clear the 'duplbl' flag
-                    // since the next Label will refer to a distinct
-                    // instruction.
-                    duplbl = null;
-                }
-            }
-        }
-
-        /**
-         * Returns the "owner" of a particular instruction relative to this
-         * instantiation: the owner referes to the Instantiation which will emit
-         * the version of this instruction that we will execute.
-         * 
-         * Typically, the return value is either <code>this</code> or
-         * <code>null</code>. <code>this</code> indicates that this
-         * instantiation will generate the version of this instruction that we
-         * will execute, and <code>null</code> indicates that this instantiation
-         * never executes the given instruction.
-         * 
-         * Sometimes, however, an instruction can belong to multiple
-         * subroutines; this is called a "dual citizen" instruction (though it
-         * may belong to more than 2 subroutines), and occurs when multiple
-         * subroutines branch to common points of control. In this case, the
-         * owner is the subroutine that appears lowest on the stack, and which
-         * also owns the instruction in question.
-         * 
-         * @param i
-         *            the index of the instruction in the original code
-         * @return the "owner" of a particular instruction relative to this
-         *         instantiation.
-         */
-        public Instantiation findOwner(final int i) {
-            if (!subroutine.get(i)) {
-                return null;
-            }
-            if (!dualCitizens.get(i)) {
-                return this;
-            }
-            Instantiation own = this;
-            for (Instantiation p = previous; p != null; p = p.previous) {
-                if (p.subroutine.get(i)) {
-                    own = p;
-                }
-            }
-            return own;
-        }
-
-        /**
-         * Looks up the label <code>l</code> in the <code>gotoTable</code>, thus
-         * translating it from a Label in the original code, to a Label in the
-         * inlined code that is appropriate for use by an instruction that
-         * branched to the original label.
-         * 
-         * @param l
-         *            The label we will be translating
-         * @return a label for use by a branch instruction in the inlined code
-         * @see #rangeLabel
-         */
-        public LabelNode gotoLabel(final LabelNode l) {
-            // owner should never be null, because owner is only null
-            // if an instruction cannot be reached from this subroutine
-            Instantiation owner = findOwner(instructions.indexOf(l));
-            return owner.rangeTable.get(l);
-        }
-
-        /**
-         * Looks up the label <code>l</code> in the <code>rangeTable</code>,
-         * thus translating it from a Label in the original code, to a Label in
-         * the inlined code that is appropriate for use by an try/catch or
-         * variable use annotation.
-         * 
-         * @param l
-         *            The label we will be translating
-         * @return a label for use by a try/catch or variable annotation in the
-         *         original code
-         * @see #rangeTable
-         */
-        public LabelNode rangeLabel(final LabelNode l) {
-            return rangeTable.get(l);
-        }
-
-        // AbstractMap implementation
-
-        @Override
-        public Set<Map.Entry<LabelNode, LabelNode>> entrySet() {
-            return null;
-        }
-
-        @Override
-        public LabelNode get(final Object o) {
-            return gotoLabel((LabelNode) o);
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/LocalVariablesSorter.java b/asm4/src/org/objectweb/asm/commons/LocalVariablesSorter.java
deleted file mode 100644
index e228d9e..0000000
--- a/asm4/src/org/objectweb/asm/commons/LocalVariablesSorter.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link MethodVisitor} that renumbers local variables in their order of
- * appearance. This adapter allows one to easily add new local variables to a
- * method. It may be used by inheriting from this class, but the preferred way
- * of using it is via delegation: the next visitor in the chain can indeed add
- * new locals when needed by calling {@link #newLocal} on this adapter (this
- * requires a reference back to this {@link LocalVariablesSorter}).
- * 
- * @author Chris Nokleberg
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public class LocalVariablesSorter extends MethodVisitor {
-
-    private static final Type OBJECT_TYPE = Type
-            .getObjectType("java/lang/Object");
-
-    /**
-     * Mapping from old to new local variable indexes. A local variable at index
-     * i of size 1 is remapped to 'mapping[2*i]', while a local variable at
-     * index i of size 2 is remapped to 'mapping[2*i+1]'.
-     */
-    private int[] mapping = new int[40];
-
-    /**
-     * Array used to store stack map local variable types after remapping.
-     */
-    private Object[] newLocals = new Object[20];
-
-    /**
-     * Index of the first local variable, after formal parameters.
-     */
-    protected final int firstLocal;
-
-    /**
-     * Index of the next local variable to be created by {@link #newLocal}.
-     */
-    protected int nextLocal;
-
-    /**
-     * Indicates if at least one local variable has moved due to remapping.
-     */
-    private boolean changed;
-
-    /**
-     * Creates a new {@link LocalVariablesSorter}. <i>Subclasses must not use
-     * this constructor</i>. Instead, they must use the
-     * {@link #LocalVariablesSorter(int, int, String, MethodVisitor)} version.
-     * 
-     * @param access
-     *            access flags of the adapted method.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param mv
-     *            the method visitor to which this adapter delegates calls.
-     */
-    public LocalVariablesSorter(final int access, final String desc,
-            final MethodVisitor mv) {
-        this(Opcodes.ASM4, access, desc, mv);
-    }
-
-    /**
-     * Creates a new {@link LocalVariablesSorter}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param access
-     *            access flags of the adapted method.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param mv
-     *            the method visitor to which this adapter delegates calls.
-     */
-    protected LocalVariablesSorter(final int api, final int access,
-            final String desc, final MethodVisitor mv) {
-        super(api, mv);
-        Type[] args = Type.getArgumentTypes(desc);
-        nextLocal = (Opcodes.ACC_STATIC & access) == 0 ? 1 : 0;
-        for (int i = 0; i < args.length; i++) {
-            nextLocal += args[i].getSize();
-        }
-        firstLocal = nextLocal;
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        Type type;
-        switch (opcode) {
-        case Opcodes.LLOAD:
-        case Opcodes.LSTORE:
-            type = Type.LONG_TYPE;
-            break;
-
-        case Opcodes.DLOAD:
-        case Opcodes.DSTORE:
-            type = Type.DOUBLE_TYPE;
-            break;
-
-        case Opcodes.FLOAD:
-        case Opcodes.FSTORE:
-            type = Type.FLOAT_TYPE;
-            break;
-
-        case Opcodes.ILOAD:
-        case Opcodes.ISTORE:
-            type = Type.INT_TYPE;
-            break;
-
-        default:
-            // case Opcodes.ALOAD:
-            // case Opcodes.ASTORE:
-            // case RET:
-            type = OBJECT_TYPE;
-            break;
-        }
-        mv.visitVarInsn(opcode, remap(var, type));
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        mv.visitIincInsn(remap(var, Type.INT_TYPE), increment);
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        mv.visitMaxs(maxStack, nextLocal);
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        int newIndex = remap(index, Type.getType(desc));
-        mv.visitLocalVariable(name, desc, signature, start, end, newIndex);
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        if (type != Opcodes.F_NEW) { // uncompressed frame
-            throw new IllegalStateException(
-                    "ClassReader.accept() should be called with EXPAND_FRAMES flag");
-        }
-
-        if (!changed) { // optimization for the case where mapping = identity
-            mv.visitFrame(type, nLocal, local, nStack, stack);
-            return;
-        }
-
-        // creates a copy of newLocals
-        Object[] oldLocals = new Object[newLocals.length];
-        System.arraycopy(newLocals, 0, oldLocals, 0, oldLocals.length);
-
-        updateNewLocals(newLocals);
-
-        // copies types from 'local' to 'newLocals'
-        // 'newLocals' already contains the variables added with 'newLocal'
-
-        int index = 0; // old local variable index
-        int number = 0; // old local variable number
-        for (; number < nLocal; ++number) {
-            Object t = local[number];
-            int size = t == Opcodes.LONG || t == Opcodes.DOUBLE ? 2 : 1;
-            if (t != Opcodes.TOP) {
-                Type typ = OBJECT_TYPE;
-                if (t == Opcodes.INTEGER) {
-                    typ = Type.INT_TYPE;
-                } else if (t == Opcodes.FLOAT) {
-                    typ = Type.FLOAT_TYPE;
-                } else if (t == Opcodes.LONG) {
-                    typ = Type.LONG_TYPE;
-                } else if (t == Opcodes.DOUBLE) {
-                    typ = Type.DOUBLE_TYPE;
-                } else if (t instanceof String) {
-                    typ = Type.getObjectType((String) t);
-                }
-                setFrameLocal(remap(index, typ), t);
-            }
-            index += size;
-        }
-
-        // removes TOP after long and double types as well as trailing TOPs
-
-        index = 0;
-        number = 0;
-        for (int i = 0; index < newLocals.length; ++i) {
-            Object t = newLocals[index++];
-            if (t != null && t != Opcodes.TOP) {
-                newLocals[i] = t;
-                number = i + 1;
-                if (t == Opcodes.LONG || t == Opcodes.DOUBLE) {
-                    index += 1;
-                }
-            } else {
-                newLocals[i] = Opcodes.TOP;
-            }
-        }
-
-        // visits remapped frame
-        mv.visitFrame(type, number, newLocals, nStack, stack);
-
-        // restores original value of 'newLocals'
-        newLocals = oldLocals;
-    }
-
-    // -------------
-
-    /**
-     * Creates a new local variable of the given type.
-     * 
-     * @param type
-     *            the type of the local variable to be created.
-     * @return the identifier of the newly created local variable.
-     */
-    public int newLocal(final Type type) {
-        Object t;
-        switch (type.getSort()) {
-        case Type.BOOLEAN:
-        case Type.CHAR:
-        case Type.BYTE:
-        case Type.SHORT:
-        case Type.INT:
-            t = Opcodes.INTEGER;
-            break;
-        case Type.FLOAT:
-            t = Opcodes.FLOAT;
-            break;
-        case Type.LONG:
-            t = Opcodes.LONG;
-            break;
-        case Type.DOUBLE:
-            t = Opcodes.DOUBLE;
-            break;
-        case Type.ARRAY:
-            t = type.getDescriptor();
-            break;
-        // case Type.OBJECT:
-        default:
-            t = type.getInternalName();
-            break;
-        }
-        int local = newLocalMapping(type);
-        setLocalType(local, type);
-        setFrameLocal(local, t);
-        return local;
-    }
-
-    /**
-     * Notifies subclasses that a new stack map frame is being visited. The
-     * array argument contains the stack map frame types corresponding to the
-     * local variables added with {@link #newLocal}. This method can update
-     * these types in place for the stack map frame being visited. The default
-     * implementation of this method does nothing, i.e. a local variable added
-     * with {@link #newLocal} will have the same type in all stack map frames.
-     * But this behavior is not always the desired one, for instance if a local
-     * variable is added in the middle of a try/catch block: the frame for the
-     * exception handler should have a TOP type for this new local.
-     * 
-     * @param newLocals
-     *            the stack map frame types corresponding to the local variables
-     *            added with {@link #newLocal} (and null for the others). The
-     *            format of this array is the same as in
-     *            {@link MethodVisitor#visitFrame}, except that long and double
-     *            types use two slots. The types for the current stack map frame
-     *            must be updated in place in this array.
-     */
-    protected void updateNewLocals(Object[] newLocals) {
-    }
-
-    /**
-     * Notifies subclasses that a local variable has been added or remapped. The
-     * default implementation of this method does nothing.
-     * 
-     * @param local
-     *            a local variable identifier, as returned by {@link #newLocal
-     *            newLocal()}.
-     * @param type
-     *            the type of the value being stored in the local variable.
-     */
-    protected void setLocalType(final int local, final Type type) {
-    }
-
-    private void setFrameLocal(final int local, final Object type) {
-        int l = newLocals.length;
-        if (local >= l) {
-            Object[] a = new Object[Math.max(2 * l, local + 1)];
-            System.arraycopy(newLocals, 0, a, 0, l);
-            newLocals = a;
-        }
-        newLocals[local] = type;
-    }
-
-    private int remap(final int var, final Type type) {
-        if (var + type.getSize() <= firstLocal) {
-            return var;
-        }
-        int key = 2 * var + type.getSize() - 1;
-        int size = mapping.length;
-        if (key >= size) {
-            int[] newMapping = new int[Math.max(2 * size, key + 1)];
-            System.arraycopy(mapping, 0, newMapping, 0, size);
-            mapping = newMapping;
-        }
-        int value = mapping[key];
-        if (value == 0) {
-            value = newLocalMapping(type);
-            setLocalType(value, type);
-            mapping[key] = value + 1;
-        } else {
-            value--;
-        }
-        if (value != var) {
-            changed = true;
-        }
-        return value;
-    }
-
-    protected int newLocalMapping(final Type type) {
-        int local = nextLocal;
-        nextLocal += type.getSize();
-        return local;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/Method.java b/asm4/src/org/objectweb/asm/commons/Method.java
deleted file mode 100644
index 25c3660..0000000
--- a/asm4/src/org/objectweb/asm/commons/Method.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.objectweb.asm.Type;
-
-/**
- * A named method descriptor.
- * 
- * @author Juozas Baliuka
- * @author Chris Nokleberg
- * @author Eric Bruneton
- */
-public class Method {
-
-    /**
-     * The method name.
-     */
-    private final String name;
-
-    /**
-     * The method descriptor.
-     */
-    private final String desc;
-
-    /**
-     * Maps primitive Java type names to their descriptors.
-     */
-    private static final Map<String, String> DESCRIPTORS;
-
-    static {
-        DESCRIPTORS = new HashMap<String, String>();
-        DESCRIPTORS.put("void", "V");
-        DESCRIPTORS.put("byte", "B");
-        DESCRIPTORS.put("char", "C");
-        DESCRIPTORS.put("double", "D");
-        DESCRIPTORS.put("float", "F");
-        DESCRIPTORS.put("int", "I");
-        DESCRIPTORS.put("long", "J");
-        DESCRIPTORS.put("short", "S");
-        DESCRIPTORS.put("boolean", "Z");
-    }
-
-    /**
-     * Creates a new {@link Method}.
-     * 
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor.
-     */
-    public Method(final String name, final String desc) {
-        this.name = name;
-        this.desc = desc;
-    }
-
-    /**
-     * Creates a new {@link Method}.
-     * 
-     * @param name
-     *            the method's name.
-     * @param returnType
-     *            the method's return type.
-     * @param argumentTypes
-     *            the method's argument types.
-     */
-    public Method(final String name, final Type returnType,
-            final Type[] argumentTypes) {
-        this(name, Type.getMethodDescriptor(returnType, argumentTypes));
-    }
-
-    /**
-     * Creates a new {@link Method}.
-     * 
-     * @param m
-     *            a java.lang.reflect method descriptor
-     * @return a {@link Method} corresponding to the given Java method
-     *         declaration.
-     */
-    public static Method getMethod(java.lang.reflect.Method m) {
-        return new Method(m.getName(), Type.getMethodDescriptor(m));
-    }
-
-    /**
-     * Creates a new {@link Method}.
-     * 
-     * @param c
-     *            a java.lang.reflect constructor descriptor
-     * @return a {@link Method} corresponding to the given Java constructor
-     *         declaration.
-     */
-    public static Method getMethod(java.lang.reflect.Constructor<?> c) {
-        return new Method("<init>", Type.getConstructorDescriptor(c));
-    }
-
-    /**
-     * Returns a {@link Method} corresponding to the given Java method
-     * declaration.
-     * 
-     * @param method
-     *            a Java method declaration, without argument names, of the form
-     *            "returnType name (argumentType1, ... argumentTypeN)", where
-     *            the types are in plain Java (e.g. "int", "float",
-     *            "java.util.List", ...). Classes of the java.lang package can
-     *            be specified by their unqualified name; all other classes
-     *            names must be fully qualified.
-     * @return a {@link Method} corresponding to the given Java method
-     *         declaration.
-     * @throws IllegalArgumentException
-     *             if <code>method</code> could not get parsed.
-     */
-    public static Method getMethod(final String method)
-            throws IllegalArgumentException {
-        return getMethod(method, false);
-    }
-
-    /**
-     * Returns a {@link Method} corresponding to the given Java method
-     * declaration.
-     * 
-     * @param method
-     *            a Java method declaration, without argument names, of the form
-     *            "returnType name (argumentType1, ... argumentTypeN)", where
-     *            the types are in plain Java (e.g. "int", "float",
-     *            "java.util.List", ...). Classes of the java.lang package may
-     *            be specified by their unqualified name, depending on the
-     *            defaultPackage argument; all other classes names must be fully
-     *            qualified.
-     * @param defaultPackage
-     *            true if unqualified class names belong to the default package,
-     *            or false if they correspond to java.lang classes. For instance
-     *            "Object" means "Object" if this option is true, or
-     *            "java.lang.Object" otherwise.
-     * @return a {@link Method} corresponding to the given Java method
-     *         declaration.
-     * @throws IllegalArgumentException
-     *             if <code>method</code> could not get parsed.
-     */
-    public static Method getMethod(final String method,
-            final boolean defaultPackage) throws IllegalArgumentException {
-        int space = method.indexOf(' ');
-        int start = method.indexOf('(', space) + 1;
-        int end = method.indexOf(')', start);
-        if (space == -1 || start == -1 || end == -1) {
-            throw new IllegalArgumentException();
-        }
-        String returnType = method.substring(0, space);
-        String methodName = method.substring(space + 1, start - 1).trim();
-        StringBuffer sb = new StringBuffer();
-        sb.append('(');
-        int p;
-        do {
-            String s;
-            p = method.indexOf(',', start);
-            if (p == -1) {
-                s = map(method.substring(start, end).trim(), defaultPackage);
-            } else {
-                s = map(method.substring(start, p).trim(), defaultPackage);
-                start = p + 1;
-            }
-            sb.append(s);
-        } while (p != -1);
-        sb.append(')');
-        sb.append(map(returnType, defaultPackage));
-        return new Method(methodName, sb.toString());
-    }
-
-    private static String map(final String type, final boolean defaultPackage) {
-        if ("".equals(type)) {
-            return type;
-        }
-
-        StringBuffer sb = new StringBuffer();
-        int index = 0;
-        while ((index = type.indexOf("[]", index) + 1) > 0) {
-            sb.append('[');
-        }
-
-        String t = type.substring(0, type.length() - sb.length() * 2);
-        String desc = DESCRIPTORS.get(t);
-        if (desc != null) {
-            sb.append(desc);
-        } else {
-            sb.append('L');
-            if (t.indexOf('.') < 0) {
-                if (!defaultPackage) {
-                    sb.append("java/lang/");
-                }
-                sb.append(t);
-            } else {
-                sb.append(t.replace('.', '/'));
-            }
-            sb.append(';');
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Returns the name of the method described by this object.
-     * 
-     * @return the name of the method described by this object.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Returns the descriptor of the method described by this object.
-     * 
-     * @return the descriptor of the method described by this object.
-     */
-    public String getDescriptor() {
-        return desc;
-    }
-
-    /**
-     * Returns the return type of the method described by this object.
-     * 
-     * @return the return type of the method described by this object.
-     */
-    public Type getReturnType() {
-        return Type.getReturnType(desc);
-    }
-
-    /**
-     * Returns the argument types of the method described by this object.
-     * 
-     * @return the argument types of the method described by this object.
-     */
-    public Type[] getArgumentTypes() {
-        return Type.getArgumentTypes(desc);
-    }
-
-    @Override
-    public String toString() {
-        return name + desc;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (!(o instanceof Method)) {
-            return false;
-        }
-        Method other = (Method) o;
-        return name.equals(other.name) && desc.equals(other.desc);
-    }
-
-    @Override
-    public int hashCode() {
-        return name.hashCode() ^ desc.hashCode();
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/commons/Remapper.java b/asm4/src/org/objectweb/asm/commons/Remapper.java
deleted file mode 100644
index 9c359fb..0000000
--- a/asm4/src/org/objectweb/asm/commons/Remapper.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.signature.SignatureReader;
-import org.objectweb.asm.signature.SignatureVisitor;
-import org.objectweb.asm.signature.SignatureWriter;
-
-/**
- * A class responsible for remapping types and names. Subclasses can override
- * the following methods:
- * 
- * <ul>
- * <li>{@link #map(String)} - map type</li>
- * <li>{@link #mapFieldName(String, String, String)} - map field name</li>
- * <li>{@link #mapMethodName(String, String, String)} - map method name</li>
- * </ul>
- * 
- * @author Eugene Kuleshov
- */
-public abstract class Remapper {
-
-    public String mapDesc(String desc) {
-        Type t = Type.getType(desc);
-        switch (t.getSort()) {
-        case Type.ARRAY:
-            String s = mapDesc(t.getElementType().getDescriptor());
-            for (int i = 0; i < t.getDimensions(); ++i) {
-                s = '[' + s;
-            }
-            return s;
-        case Type.OBJECT:
-            String newType = map(t.getInternalName());
-            if (newType != null) {
-                return 'L' + newType + ';';
-            }
-        }
-        return desc;
-    }
-
-    private Type mapType(Type t) {
-        switch (t.getSort()) {
-        case Type.ARRAY:
-            String s = mapDesc(t.getElementType().getDescriptor());
-            for (int i = 0; i < t.getDimensions(); ++i) {
-                s = '[' + s;
-            }
-            return Type.getType(s);
-        case Type.OBJECT:
-            s = map(t.getInternalName());
-            return s != null ? Type.getObjectType(s) : t;
-        case Type.METHOD:
-            return Type.getMethodType(mapMethodDesc(t.getDescriptor()));
-        }
-        return t;
-    }
-
-    public String mapType(String type) {
-        if (type == null) {
-            return null;
-        }
-        return mapType(Type.getObjectType(type)).getInternalName();
-    }
-
-    public String[] mapTypes(String[] types) {
-        String[] newTypes = null;
-        boolean needMapping = false;
-        for (int i = 0; i < types.length; i++) {
-            String type = types[i];
-            String newType = map(type);
-            if (newType != null && newTypes == null) {
-                newTypes = new String[types.length];
-                if (i > 0) {
-                    System.arraycopy(types, 0, newTypes, 0, i);
-                }
-                needMapping = true;
-            }
-            if (needMapping) {
-                newTypes[i] = newType == null ? type : newType;
-            }
-        }
-        return needMapping ? newTypes : types;
-    }
-
-    public String mapMethodDesc(String desc) {
-        if ("()V".equals(desc)) {
-            return desc;
-        }
-
-        Type[] args = Type.getArgumentTypes(desc);
-        StringBuffer s = new StringBuffer("(");
-        for (int i = 0; i < args.length; i++) {
-            s.append(mapDesc(args[i].getDescriptor()));
-        }
-        Type returnType = Type.getReturnType(desc);
-        if (returnType == Type.VOID_TYPE) {
-            s.append(")V");
-            return s.toString();
-        }
-        s.append(')').append(mapDesc(returnType.getDescriptor()));
-        return s.toString();
-    }
-
-    public Object mapValue(Object value) {
-        if (value instanceof Type) {
-            return mapType((Type) value);
-        }
-        if (value instanceof Handle) {
-            Handle h = (Handle) value;
-            return new Handle(h.getTag(), mapType(h.getOwner()), mapMethodName(
-                    h.getOwner(), h.getName(), h.getDesc()),
-                    mapMethodDesc(h.getDesc()));
-        }
-        return value;
-    }
-
-    /**
-     * 
-     * @param typeSignature
-     *            true if signature is a FieldTypeSignature, such as the
-     *            signature parameter of the ClassVisitor.visitField or
-     *            MethodVisitor.visitLocalVariable methods
-     */
-    public String mapSignature(String signature, boolean typeSignature) {
-        if (signature == null) {
-            return null;
-        }
-        SignatureReader r = new SignatureReader(signature);
-        SignatureWriter w = new SignatureWriter();
-        SignatureVisitor a = createRemappingSignatureAdapter(w);
-        if (typeSignature) {
-            r.acceptType(a);
-        } else {
-            r.accept(a);
-        }
-        return w.toString();
-    }
-
-    protected SignatureVisitor createRemappingSignatureAdapter(
-            SignatureVisitor v) {
-        return new RemappingSignatureAdapter(v, this);
-    }
-
-    /**
-     * Map method name to the new name. Subclasses can override.
-     * 
-     * @param owner
-     *            owner of the method.
-     * @param name
-     *            name of the method.
-     * @param desc
-     *            descriptor of the method.
-     * @return new name of the method
-     */
-    public String mapMethodName(String owner, String name, String desc) {
-        return name;
-    }
-
-    /**
-     * Map invokedynamic method name to the new name. Subclasses can override.
-     * 
-     * @param name
-     *            name of the invokedynamic.
-     * @param desc
-     *            descriptor of the invokedynamic.
-     * @return new invokdynamic name.
-     */
-    public String mapInvokeDynamicMethodName(String name, String desc) {
-        return name;
-    }
-
-    /**
-     * Map field name to the new name. Subclasses can override.
-     * 
-     * @param owner
-     *            owner of the field.
-     * @param name
-     *            name of the field
-     * @param desc
-     *            descriptor of the field
-     * @return new name of the field.
-     */
-    public String mapFieldName(String owner, String name, String desc) {
-        return name;
-    }
-
-    /**
-     * Map type name to the new name. Subclasses can override.
-     */
-    public String map(String typeName) {
-        return typeName;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/RemappingAnnotationAdapter.java b/asm4/src/org/objectweb/asm/commons/RemappingAnnotationAdapter.java
deleted file mode 100644
index 8fff2d1..0000000
--- a/asm4/src/org/objectweb/asm/commons/RemappingAnnotationAdapter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * An {@link AnnotationVisitor} adapter for type remapping.
- * 
- * @author Eugene Kuleshov
- */
-public class RemappingAnnotationAdapter extends AnnotationVisitor {
-
-    protected final Remapper remapper;
-
-    public RemappingAnnotationAdapter(final AnnotationVisitor av,
-            final Remapper remapper) {
-        this(Opcodes.ASM4, av, remapper);
-    }
-
-    protected RemappingAnnotationAdapter(final int api,
-            final AnnotationVisitor av, final Remapper remapper) {
-        super(api, av);
-        this.remapper = remapper;
-    }
-
-    @Override
-    public void visit(String name, Object value) {
-        av.visit(name, remapper.mapValue(value));
-    }
-
-    @Override
-    public void visitEnum(String name, String desc, String value) {
-        av.visitEnum(name, remapper.mapDesc(desc), value);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(String name, String desc) {
-        AnnotationVisitor v = av.visitAnnotation(name, remapper.mapDesc(desc));
-        return v == null ? null : (v == av ? this
-                : new RemappingAnnotationAdapter(v, remapper));
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(String name) {
-        AnnotationVisitor v = av.visitArray(name);
-        return v == null ? null : (v == av ? this
-                : new RemappingAnnotationAdapter(v, remapper));
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/RemappingClassAdapter.java b/asm4/src/org/objectweb/asm/commons/RemappingClassAdapter.java
deleted file mode 100644
index f9e577d..0000000
--- a/asm4/src/org/objectweb/asm/commons/RemappingClassAdapter.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassVisitor} for type remapping.
- * 
- * @author Eugene Kuleshov
- */
-public class RemappingClassAdapter extends ClassVisitor {
-
-    protected final Remapper remapper;
-
-    protected String className;
-
-    public RemappingClassAdapter(final ClassVisitor cv, final Remapper remapper) {
-        this(Opcodes.ASM4, cv, remapper);
-    }
-
-    protected RemappingClassAdapter(final int api, final ClassVisitor cv,
-            final Remapper remapper) {
-        super(api, cv);
-        this.remapper = remapper;
-    }
-
-    @Override
-    public void visit(int version, int access, String name, String signature,
-            String superName, String[] interfaces) {
-        this.className = name;
-        super.visit(version, access, remapper.mapType(name), remapper
-                .mapSignature(signature, false), remapper.mapType(superName),
-                interfaces == null ? null : remapper.mapTypes(interfaces));
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        AnnotationVisitor av;
-        av = super.visitAnnotation(remapper.mapDesc(desc), visible);
-        return av == null ? null : createRemappingAnnotationAdapter(av);
-    }
-
-    @Override
-    public FieldVisitor visitField(int access, String name, String desc,
-            String signature, Object value) {
-        FieldVisitor fv = super.visitField(access,
-                remapper.mapFieldName(className, name, desc),
-                remapper.mapDesc(desc), remapper.mapSignature(signature, true),
-                remapper.mapValue(value));
-        return fv == null ? null : createRemappingFieldAdapter(fv);
-    }
-
-    @Override
-    public MethodVisitor visitMethod(int access, String name, String desc,
-            String signature, String[] exceptions) {
-        String newDesc = remapper.mapMethodDesc(desc);
-        MethodVisitor mv = super.visitMethod(access, remapper.mapMethodName(
-                className, name, desc), newDesc, remapper.mapSignature(
-                signature, false),
-                exceptions == null ? null : remapper.mapTypes(exceptions));
-        return mv == null ? null : createRemappingMethodAdapter(access,
-                newDesc, mv);
-    }
-
-    @Override
-    public void visitInnerClass(String name, String outerName,
-            String innerName, int access) {
-        // TODO should innerName be changed?
-        super.visitInnerClass(remapper.mapType(name), outerName == null ? null
-                : remapper.mapType(outerName), innerName, access);
-    }
-
-    @Override
-    public void visitOuterClass(String owner, String name, String desc) {
-        super.visitOuterClass(remapper.mapType(owner), name == null ? null
-                : remapper.mapMethodName(owner, name, desc),
-                desc == null ? null : remapper.mapMethodDesc(desc));
-    }
-
-    protected FieldVisitor createRemappingFieldAdapter(FieldVisitor fv) {
-        return new RemappingFieldAdapter(fv, remapper);
-    }
-
-    protected MethodVisitor createRemappingMethodAdapter(int access,
-            String newDesc, MethodVisitor mv) {
-        return new RemappingMethodAdapter(access, newDesc, mv, remapper);
-    }
-
-    protected AnnotationVisitor createRemappingAnnotationAdapter(
-            AnnotationVisitor av) {
-        return new RemappingAnnotationAdapter(av, remapper);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/RemappingFieldAdapter.java b/asm4/src/org/objectweb/asm/commons/RemappingFieldAdapter.java
deleted file mode 100644
index 1dbee7e..0000000
--- a/asm4/src/org/objectweb/asm/commons/RemappingFieldAdapter.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link FieldVisitor} adapter for type remapping.
- * 
- * @author Eugene Kuleshov
- */
-public class RemappingFieldAdapter extends FieldVisitor {
-
-    private final Remapper remapper;
-
-    public RemappingFieldAdapter(final FieldVisitor fv, final Remapper remapper) {
-        this(Opcodes.ASM4, fv, remapper);
-    }
-
-    protected RemappingFieldAdapter(final int api, final FieldVisitor fv,
-            final Remapper remapper) {
-        super(api, fv);
-        this.remapper = remapper;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        AnnotationVisitor av = fv.visitAnnotation(remapper.mapDesc(desc),
-                visible);
-        return av == null ? null : new RemappingAnnotationAdapter(av, remapper);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/RemappingMethodAdapter.java b/asm4/src/org/objectweb/asm/commons/RemappingMethodAdapter.java
deleted file mode 100644
index e1c3b9c..0000000
--- a/asm4/src/org/objectweb/asm/commons/RemappingMethodAdapter.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link LocalVariablesSorter} for type mapping.
- * 
- * @author Eugene Kuleshov
- */
-public class RemappingMethodAdapter extends LocalVariablesSorter {
-
-    protected final Remapper remapper;
-
-    public RemappingMethodAdapter(final int access, final String desc,
-            final MethodVisitor mv, final Remapper remapper) {
-        this(Opcodes.ASM4, access, desc, mv, remapper);
-    }
-
-    protected RemappingMethodAdapter(final int api, final int access,
-            final String desc, final MethodVisitor mv, final Remapper remapper) {
-        super(api, access, desc, mv);
-        this.remapper = remapper;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        AnnotationVisitor av = mv.visitAnnotationDefault();
-        return av == null ? av : new RemappingAnnotationAdapter(av, remapper);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        AnnotationVisitor av = mv.visitAnnotation(remapper.mapDesc(desc),
-                visible);
-        return av == null ? av : new RemappingAnnotationAdapter(av, remapper);
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(int parameter,
-            String desc, boolean visible) {
-        AnnotationVisitor av = mv.visitParameterAnnotation(parameter,
-                remapper.mapDesc(desc), visible);
-        return av == null ? av : new RemappingAnnotationAdapter(av, remapper);
-    }
-
-    @Override
-    public void visitFrame(int type, int nLocal, Object[] local, int nStack,
-            Object[] stack) {
-        super.visitFrame(type, nLocal, remapEntries(nLocal, local), nStack,
-                remapEntries(nStack, stack));
-    }
-
-    private Object[] remapEntries(int n, Object[] entries) {
-        for (int i = 0; i < n; i++) {
-            if (entries[i] instanceof String) {
-                Object[] newEntries = new Object[n];
-                if (i > 0) {
-                    System.arraycopy(entries, 0, newEntries, 0, i);
-                }
-                do {
-                    Object t = entries[i];
-                    newEntries[i++] = t instanceof String ? remapper
-                            .mapType((String) t) : t;
-                } while (i < n);
-                return newEntries;
-            }
-        }
-        return entries;
-    }
-
-    @Override
-    public void visitFieldInsn(int opcode, String owner, String name,
-            String desc) {
-        super.visitFieldInsn(opcode, remapper.mapType(owner),
-                remapper.mapFieldName(owner, name, desc),
-                remapper.mapDesc(desc));
-    }
-
-    @Override
-    public void visitMethodInsn(int opcode, String owner, String name,
-            String desc) {
-        super.visitMethodInsn(opcode, remapper.mapType(owner),
-                remapper.mapMethodName(owner, name, desc),
-                remapper.mapMethodDesc(desc));
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        for (int i = 0; i < bsmArgs.length; i++) {
-            bsmArgs[i] = remapper.mapValue(bsmArgs[i]);
-        }
-        super.visitInvokeDynamicInsn(
-                remapper.mapInvokeDynamicMethodName(name, desc),
-                remapper.mapMethodDesc(desc), (Handle) remapper.mapValue(bsm),
-                bsmArgs);
-    }
-
-    @Override
-    public void visitTypeInsn(int opcode, String type) {
-        super.visitTypeInsn(opcode, remapper.mapType(type));
-    }
-
-    @Override
-    public void visitLdcInsn(Object cst) {
-        super.visitLdcInsn(remapper.mapValue(cst));
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(String desc, int dims) {
-        super.visitMultiANewArrayInsn(remapper.mapDesc(desc), dims);
-    }
-
-    @Override
-    public void visitTryCatchBlock(Label start, Label end, Label handler,
-            String type) {
-        super.visitTryCatchBlock(start, end, handler, type == null ? null
-                : remapper.mapType(type));
-    }
-
-    @Override
-    public void visitLocalVariable(String name, String desc, String signature,
-            Label start, Label end, int index) {
-        super.visitLocalVariable(name, remapper.mapDesc(desc),
-                remapper.mapSignature(signature, true), start, end, index);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/RemappingSignatureAdapter.java b/asm4/src/org/objectweb/asm/commons/RemappingSignatureAdapter.java
deleted file mode 100644
index 88d5315..0000000
--- a/asm4/src/org/objectweb/asm/commons/RemappingSignatureAdapter.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.signature.SignatureVisitor;
-
-/**
- * A {@link SignatureVisitor} adapter for type mapping.
- * 
- * @author Eugene Kuleshov
- */
-public class RemappingSignatureAdapter extends SignatureVisitor {
-
-    private final SignatureVisitor v;
-
-    private final Remapper remapper;
-
-    private String className;
-
-    public RemappingSignatureAdapter(final SignatureVisitor v,
-            final Remapper remapper) {
-        this(Opcodes.ASM4, v, remapper);
-    }
-
-    protected RemappingSignatureAdapter(final int api,
-            final SignatureVisitor v, final Remapper remapper) {
-        super(api);
-        this.v = v;
-        this.remapper = remapper;
-    }
-
-    @Override
-    public void visitClassType(String name) {
-        className = name;
-        v.visitClassType(remapper.mapType(name));
-    }
-
-    @Override
-    public void visitInnerClassType(String name) {
-        className = className + '$' + name;
-        String remappedName = remapper.mapType(className);
-        v.visitInnerClassType(remappedName.substring(remappedName
-                .lastIndexOf('$') + 1));
-    }
-
-    @Override
-    public void visitFormalTypeParameter(String name) {
-        v.visitFormalTypeParameter(name);
-    }
-
-    @Override
-    public void visitTypeVariable(String name) {
-        v.visitTypeVariable(name);
-    }
-
-    @Override
-    public SignatureVisitor visitArrayType() {
-        v.visitArrayType();
-        return this;
-    }
-
-    @Override
-    public void visitBaseType(char descriptor) {
-        v.visitBaseType(descriptor);
-    }
-
-    @Override
-    public SignatureVisitor visitClassBound() {
-        v.visitClassBound();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitExceptionType() {
-        v.visitExceptionType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitInterface() {
-        v.visitInterface();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitInterfaceBound() {
-        v.visitInterfaceBound();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitParameterType() {
-        v.visitParameterType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitReturnType() {
-        v.visitReturnType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitSuperclass() {
-        v.visitSuperclass();
-        return this;
-    }
-
-    @Override
-    public void visitTypeArgument() {
-        v.visitTypeArgument();
-    }
-
-    @Override
-    public SignatureVisitor visitTypeArgument(char wildcard) {
-        v.visitTypeArgument(wildcard);
-        return this;
-    }
-
-    @Override
-    public void visitEnd() {
-        v.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/SerialVersionUIDAdder.java b/asm4/src/org/objectweb/asm/commons/SerialVersionUIDAdder.java
deleted file mode 100644
index 29a6696..0000000
--- a/asm4/src/org/objectweb/asm/commons/SerialVersionUIDAdder.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.security.MessageDigest;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassVisitor} that adds a serial version unique identifier to a
- * class if missing. Here is typical usage of this class:
- * 
- * <pre>
- *   ClassWriter cw = new ClassWriter(...);
- *   ClassVisitor sv = new SerialVersionUIDAdder(cw);
- *   ClassVisitor ca = new MyClassAdapter(sv);
- *   new ClassReader(orginalClass).accept(ca, false);
- * </pre>
- * 
- * The SVUID algorithm can be found <a href=
- * "http://java.sun.com/j2se/1.4.2/docs/guide/serialization/spec/class.html"
- * >http://java.sun.com/j2se/1.4.2/docs/guide/serialization/spec/class.html</a>:
- * 
- * <pre>
- * The serialVersionUID is computed using the signature of a stream of bytes
- * that reflect the class definition. The National Institute of Standards and
- * Technology (NIST) Secure Hash Algorithm (SHA-1) is used to compute a
- * signature for the stream. The first two 32-bit quantities are used to form a
- * 64-bit hash. A java.lang.DataOutputStream is used to convert primitive data
- * types to a sequence of bytes. The values input to the stream are defined by
- * the Java Virtual Machine (VM) specification for classes.
- * 
- * The sequence of items in the stream is as follows:
- * 
- * 1. The class name written using UTF encoding.
- * 2. The class modifiers written as a 32-bit integer.
- * 3. The name of each interface sorted by name written using UTF encoding.
- * 4. For each field of the class sorted by field name (except private static
- * and private transient fields):
- * 1. The name of the field in UTF encoding.
- * 2. The modifiers of the field written as a 32-bit integer.
- * 3. The descriptor of the field in UTF encoding
- * 5. If a class initializer exists, write out the following:
- * 1. The name of the method, &lt;clinit&gt;, in UTF encoding.
- * 2. The modifier of the method, java.lang.reflect.Modifier.STATIC,
- * written as a 32-bit integer.
- * 3. The descriptor of the method, ()V, in UTF encoding.
- * 6. For each non-private constructor sorted by method name and signature:
- * 1. The name of the method, &lt;init&gt;, in UTF encoding.
- * 2. The modifiers of the method written as a 32-bit integer.
- * 3. The descriptor of the method in UTF encoding.
- * 7. For each non-private method sorted by method name and signature:
- * 1. The name of the method in UTF encoding.
- * 2. The modifiers of the method written as a 32-bit integer.
- * 3. The descriptor of the method in UTF encoding.
- * 8. The SHA-1 algorithm is executed on the stream of bytes produced by
- * DataOutputStream and produces five 32-bit values sha[0..4].
- * 
- * 9. The hash value is assembled from the first and second 32-bit values of
- * the SHA-1 message digest. If the result of the message digest, the five
- * 32-bit words H0 H1 H2 H3 H4, is in an array of five int values named
- * sha, the hash value would be computed as follows:
- * 
- * long hash = ((sha[0] &gt;&gt;&gt; 24) &amp; 0xFF) |
- * ((sha[0] &gt;&gt;&gt; 16) &amp; 0xFF) &lt;&lt; 8 |
- * ((sha[0] &gt;&gt;&gt; 8) &amp; 0xFF) &lt;&lt; 16 |
- * ((sha[0] &gt;&gt;&gt; 0) &amp; 0xFF) &lt;&lt; 24 |
- * ((sha[1] &gt;&gt;&gt; 24) &amp; 0xFF) &lt;&lt; 32 |
- * ((sha[1] &gt;&gt;&gt; 16) &amp; 0xFF) &lt;&lt; 40 |
- * ((sha[1] &gt;&gt;&gt; 8) &amp; 0xFF) &lt;&lt; 48 |
- * ((sha[1] &gt;&gt;&gt; 0) &amp; 0xFF) &lt;&lt; 56;
- * </pre>
- * 
- * @author Rajendra Inamdar, Vishal Vishnoi
- */
-public class SerialVersionUIDAdder extends ClassVisitor {
-
-    /**
-     * Flag that indicates if we need to compute SVUID.
-     */
-    private boolean computeSVUID;
-
-    /**
-     * Set to true if the class already has SVUID.
-     */
-    private boolean hasSVUID;
-
-    /**
-     * Classes access flags.
-     */
-    private int access;
-
-    /**
-     * Internal name of the class
-     */
-    private String name;
-
-    /**
-     * Interfaces implemented by the class.
-     */
-    private String[] interfaces;
-
-    /**
-     * Collection of fields. (except private static and private transient
-     * fields)
-     */
-    private Collection<Item> svuidFields;
-
-    /**
-     * Set to true if the class has static initializer.
-     */
-    private boolean hasStaticInitializer;
-
-    /**
-     * Collection of non-private constructors.
-     */
-    private Collection<Item> svuidConstructors;
-
-    /**
-     * Collection of non-private methods.
-     */
-    private Collection<Item> svuidMethods;
-
-    /**
-     * Creates a new {@link SerialVersionUIDAdder}. <i>Subclasses must not use
-     * this constructor</i>. Instead, they must use the
-     * {@link #SerialVersionUIDAdder(int, ClassVisitor)} version.
-     * 
-     * @param cv
-     *            a {@link ClassVisitor} to which this visitor will delegate
-     *            calls.
-     */
-    public SerialVersionUIDAdder(final ClassVisitor cv) {
-        this(Opcodes.ASM4, cv);
-    }
-
-    /**
-     * Creates a new {@link SerialVersionUIDAdder}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param cv
-     *            a {@link ClassVisitor} to which this visitor will delegate
-     *            calls.
-     */
-    protected SerialVersionUIDAdder(final int api, final ClassVisitor cv) {
-        super(api, cv);
-        svuidFields = new ArrayList<Item>();
-        svuidConstructors = new ArrayList<Item>();
-        svuidMethods = new ArrayList<Item>();
-    }
-
-    // ------------------------------------------------------------------------
-    // Overriden methods
-    // ------------------------------------------------------------------------
-
-    /*
-     * Visit class header and get class name, access , and interfaces
-     * information (step 1,2, and 3) for SVUID computation.
-     */
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        computeSVUID = (access & Opcodes.ACC_INTERFACE) == 0;
-
-        if (computeSVUID) {
-            this.name = name;
-            this.access = access;
-            this.interfaces = interfaces;
-        }
-
-        super.visit(version, access, name, signature, superName, interfaces);
-    }
-
-    /*
-     * Visit the methods and get constructor and method information (step 5 and
-     * 7). Also determine if there is a class initializer (step 6).
-     */
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        if (computeSVUID) {
-            if ("<clinit>".equals(name)) {
-                hasStaticInitializer = true;
-            }
-            /*
-             * Remembers non private constructors and methods for SVUID
-             * computation For constructor and method modifiers, only the
-             * ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
-             * ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT and ACC_STRICT flags
-             * are used.
-             */
-            int mods = access
-                    & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE
-                            | Opcodes.ACC_PROTECTED | Opcodes.ACC_STATIC
-                            | Opcodes.ACC_FINAL | Opcodes.ACC_SYNCHRONIZED
-                            | Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT | Opcodes.ACC_STRICT);
-
-            // all non private methods
-            if ((access & Opcodes.ACC_PRIVATE) == 0) {
-                if ("<init>".equals(name)) {
-                    svuidConstructors.add(new Item(name, mods, desc));
-                } else if (!"<clinit>".equals(name)) {
-                    svuidMethods.add(new Item(name, mods, desc));
-                }
-            }
-        }
-
-        return super.visitMethod(access, name, desc, signature, exceptions);
-    }
-
-    /*
-     * Gets class field information for step 4 of the algorithm. Also determines
-     * if the class already has a SVUID.
-     */
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        if (computeSVUID) {
-            if ("serialVersionUID".equals(name)) {
-                // since the class already has SVUID, we won't be computing it.
-                computeSVUID = false;
-                hasSVUID = true;
-            }
-            /*
-             * Remember field for SVUID computation For field modifiers, only
-             * the ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC,
-             * ACC_FINAL, ACC_VOLATILE, and ACC_TRANSIENT flags are used when
-             * computing serialVersionUID values.
-             */
-            if ((access & Opcodes.ACC_PRIVATE) == 0
-                    || (access & (Opcodes.ACC_STATIC | Opcodes.ACC_TRANSIENT)) == 0) {
-                int mods = access
-                        & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE
-                                | Opcodes.ACC_PROTECTED | Opcodes.ACC_STATIC
-                                | Opcodes.ACC_FINAL | Opcodes.ACC_VOLATILE | Opcodes.ACC_TRANSIENT);
-                svuidFields.add(new Item(name, mods, desc));
-            }
-        }
-
-        return super.visitField(access, name, desc, signature, value);
-    }
-
-    /**
-     * Handle a bizarre special case. Nested classes (static classes declared
-     * inside another class) that are protected have their access bit set to
-     * public in their class files to deal with some odd reflection situation.
-     * Our SVUID computation must do as the JVM does and ignore access bits in
-     * the class file in favor of the access bits InnerClass attribute.
-     */
-    @Override
-    public void visitInnerClass(final String aname, final String outerName,
-            final String innerName, final int attr_access) {
-        if ((name != null) && name.equals(aname)) {
-            this.access = attr_access;
-        }
-        super.visitInnerClass(aname, outerName, innerName, attr_access);
-    }
-
-    /*
-     * Add the SVUID if class doesn't have one
-     */
-    @Override
-    public void visitEnd() {
-        // compute SVUID and add it to the class
-        if (computeSVUID && !hasSVUID) {
-            try {
-                addSVUID(computeSVUID());
-            } catch (Throwable e) {
-                throw new RuntimeException("Error while computing SVUID for "
-                        + name, e);
-            }
-        }
-
-        super.visitEnd();
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns true if the class already has a SVUID field. The result of this
-     * method is only valid when visitEnd is or has been called.
-     * 
-     * @return true if the class already has a SVUID field.
-     */
-    public boolean hasSVUID() {
-        return hasSVUID;
-    }
-
-    protected void addSVUID(long svuid) {
-        FieldVisitor fv = super.visitField(Opcodes.ACC_FINAL
-                + Opcodes.ACC_STATIC, "serialVersionUID", "J", null, new Long(
-                svuid));
-        if (fv != null) {
-            fv.visitEnd();
-        }
-    }
-
-    /**
-     * Computes and returns the value of SVUID.
-     * 
-     * @return Returns the serial version UID
-     * @throws IOException
-     *             if an I/O error occurs
-     */
-    protected long computeSVUID() throws IOException {
-        ByteArrayOutputStream bos;
-        DataOutputStream dos = null;
-        long svuid = 0;
-
-        try {
-            bos = new ByteArrayOutputStream();
-            dos = new DataOutputStream(bos);
-
-            /*
-             * 1. The class name written using UTF encoding.
-             */
-            dos.writeUTF(name.replace('/', '.'));
-
-            /*
-             * 2. The class modifiers written as a 32-bit integer.
-             */
-            dos.writeInt(access
-                    & (Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL
-                            | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT));
-
-            /*
-             * 3. The name of each interface sorted by name written using UTF
-             * encoding.
-             */
-            Arrays.sort(interfaces);
-            for (int i = 0; i < interfaces.length; i++) {
-                dos.writeUTF(interfaces[i].replace('/', '.'));
-            }
-
-            /*
-             * 4. For each field of the class sorted by field name (except
-             * private static and private transient fields):
-             * 
-             * 1. The name of the field in UTF encoding. 2. The modifiers of the
-             * field written as a 32-bit integer. 3. The descriptor of the field
-             * in UTF encoding
-             * 
-             * Note that field signatures are not dot separated. Method and
-             * constructor signatures are dot separated. Go figure...
-             */
-            writeItems(svuidFields, dos, false);
-
-            /*
-             * 5. If a class initializer exists, write out the following: 1. The
-             * name of the method, <clinit>, in UTF encoding. 2. The modifier of
-             * the method, java.lang.reflect.Modifier.STATIC, written as a
-             * 32-bit integer. 3. The descriptor of the method, ()V, in UTF
-             * encoding.
-             */
-            if (hasStaticInitializer) {
-                dos.writeUTF("<clinit>");
-                dos.writeInt(Opcodes.ACC_STATIC);
-                dos.writeUTF("()V");
-            } // if..
-
-            /*
-             * 6. For each non-private constructor sorted by method name and
-             * signature: 1. The name of the method, <init>, in UTF encoding. 2.
-             * The modifiers of the method written as a 32-bit integer. 3. The
-             * descriptor of the method in UTF encoding.
-             */
-            writeItems(svuidConstructors, dos, true);
-
-            /*
-             * 7. For each non-private method sorted by method name and
-             * signature: 1. The name of the method in UTF encoding. 2. The
-             * modifiers of the method written as a 32-bit integer. 3. The
-             * descriptor of the method in UTF encoding.
-             */
-            writeItems(svuidMethods, dos, true);
-
-            dos.flush();
-
-            /*
-             * 8. The SHA-1 algorithm is executed on the stream of bytes
-             * produced by DataOutputStream and produces five 32-bit values
-             * sha[0..4].
-             */
-            byte[] hashBytes = computeSHAdigest(bos.toByteArray());
-
-            /*
-             * 9. The hash value is assembled from the first and second 32-bit
-             * values of the SHA-1 message digest. If the result of the message
-             * digest, the five 32-bit words H0 H1 H2 H3 H4, is in an array of
-             * five int values named sha, the hash value would be computed as
-             * follows:
-             * 
-             * long hash = ((sha[0] >>> 24) & 0xFF) | ((sha[0] >>> 16) & 0xFF)
-             * << 8 | ((sha[0] >>> 8) & 0xFF) << 16 | ((sha[0] >>> 0) & 0xFF) <<
-             * 24 | ((sha[1] >>> 24) & 0xFF) << 32 | ((sha[1] >>> 16) & 0xFF) <<
-             * 40 | ((sha[1] >>> 8) & 0xFF) << 48 | ((sha[1] >>> 0) & 0xFF) <<
-             * 56;
-             */
-            for (int i = Math.min(hashBytes.length, 8) - 1; i >= 0; i--) {
-                svuid = (svuid << 8) | (hashBytes[i] & 0xFF);
-            }
-        } finally {
-            // close the stream (if open)
-            if (dos != null) {
-                dos.close();
-            }
-        }
-
-        return svuid;
-    }
-
-    /**
-     * Returns the SHA-1 message digest of the given value.
-     * 
-     * @param value
-     *            the value whose SHA message digest must be computed.
-     * @return the SHA-1 message digest of the given value.
-     */
-    protected byte[] computeSHAdigest(final byte[] value) {
-        try {
-            return MessageDigest.getInstance("SHA").digest(value);
-        } catch (Exception e) {
-            throw new UnsupportedOperationException(e.toString());
-        }
-    }
-
-    /**
-     * Sorts the items in the collection and writes it to the data output stream
-     * 
-     * @param itemCollection
-     *            collection of items
-     * @param dos
-     *            a <code>DataOutputStream</code> value
-     * @param dotted
-     *            a <code>boolean</code> value
-     * @exception IOException
-     *                if an error occurs
-     */
-    private static void writeItems(final Collection<Item> itemCollection,
-            final DataOutput dos, final boolean dotted) throws IOException {
-        int size = itemCollection.size();
-        Item[] items = itemCollection.toArray(new Item[size]);
-        Arrays.sort(items);
-        for (int i = 0; i < size; i++) {
-            dos.writeUTF(items[i].name);
-            dos.writeInt(items[i].access);
-            dos.writeUTF(dotted ? items[i].desc.replace('/', '.')
-                    : items[i].desc);
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Inner classes
-    // ------------------------------------------------------------------------
-
-    private static class Item implements Comparable<Item> {
-
-        final String name;
-
-        final int access;
-
-        final String desc;
-
-        Item(final String name, final int access, final String desc) {
-            this.name = name;
-            this.access = access;
-            this.desc = desc;
-        }
-
-        public int compareTo(final Item other) {
-            int retVal = name.compareTo(other.name);
-            if (retVal == 0) {
-                retVal = desc.compareTo(other.desc);
-            }
-            return retVal;
-        }
-
-        @Override
-        public boolean equals(final Object o) {
-            if (o instanceof Item) {
-                return compareTo((Item) o) == 0;
-            }
-            return false;
-        }
-
-        @Override
-        public int hashCode() {
-            return (name + desc).hashCode();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/SimpleRemapper.java b/asm4/src/org/objectweb/asm/commons/SimpleRemapper.java
deleted file mode 100644
index 95b43e5..0000000
--- a/asm4/src/org/objectweb/asm/commons/SimpleRemapper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * A {@link Remapper} using a {@link Map} to define its mapping.
- * 
- * @author Eugene Kuleshov
- */
-public class SimpleRemapper extends Remapper {
-
-    private final Map<String, String> mapping;
-
-    public SimpleRemapper(Map<String, String> mapping) {
-        this.mapping = mapping;
-    }
-
-    public SimpleRemapper(String oldName, String newName) {
-        this.mapping = Collections.singletonMap(oldName, newName);
-    }
-
-    @Override
-    public String mapMethodName(String owner, String name, String desc) {
-        String s = map(owner + '.' + name + desc);
-        return s == null ? name : s;
-    }
-
-    @Override
-    public String mapFieldName(String owner, String name, String desc) {
-        String s = map(owner + '.' + name);
-        return s == null ? name : s;
-    }
-
-    @Override
-    public String map(String key) {
-        return mapping.get(key);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/StaticInitMerger.java b/asm4/src/org/objectweb/asm/commons/StaticInitMerger.java
deleted file mode 100644
index 86c5ae3..0000000
--- a/asm4/src/org/objectweb/asm/commons/StaticInitMerger.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassVisitor} that merges clinit methods into a single one.
- * 
- * @author Eric Bruneton
- */
-public class StaticInitMerger extends ClassVisitor {
-
-    private String name;
-
-    private MethodVisitor clinit;
-
-    private final String prefix;
-
-    private int counter;
-
-    public StaticInitMerger(final String prefix, final ClassVisitor cv) {
-        this(Opcodes.ASM4, prefix, cv);
-    }
-
-    protected StaticInitMerger(final int api, final String prefix,
-            final ClassVisitor cv) {
-        super(api, cv);
-        this.prefix = prefix;
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        cv.visit(version, access, name, signature, superName, interfaces);
-        this.name = name;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        MethodVisitor mv;
-        if ("<clinit>".equals(name)) {
-            int a = Opcodes.ACC_PRIVATE + Opcodes.ACC_STATIC;
-            String n = prefix + counter++;
-            mv = cv.visitMethod(a, n, desc, signature, exceptions);
-
-            if (clinit == null) {
-                clinit = cv.visitMethod(a, name, desc, null, null);
-            }
-            clinit.visitMethodInsn(Opcodes.INVOKESTATIC, this.name, n, desc);
-        } else {
-            mv = cv.visitMethod(access, name, desc, signature, exceptions);
-        }
-        return mv;
-    }
-
-    @Override
-    public void visitEnd() {
-        if (clinit != null) {
-            clinit.visitInsn(Opcodes.RETURN);
-            clinit.visitMaxs(0, 0);
-        }
-        cv.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/TableSwitchGenerator.java b/asm4/src/org/objectweb/asm/commons/TableSwitchGenerator.java
deleted file mode 100644
index 52bd316..0000000
--- a/asm4/src/org/objectweb/asm/commons/TableSwitchGenerator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Label;
-
-/**
- * A code generator for switch statements.
- * 
- * @author Juozas Baliuka
- * @author Chris Nokleberg
- * @author Eric Bruneton
- */
-public interface TableSwitchGenerator {
-
-    /**
-     * Generates the code for a switch case.
-     * 
-     * @param key
-     *            the switch case key.
-     * @param end
-     *            a label that corresponds to the end of the switch statement.
-     */
-    void generateCase(int key, Label end);
-
-    /**
-     * Generates the code for the default switch case.
-     */
-    void generateDefault();
-}
diff --git a/asm4/src/org/objectweb/asm/commons/TryCatchBlockSorter.java b/asm4/src/org/objectweb/asm/commons/TryCatchBlockSorter.java
deleted file mode 100644
index 079c0cf..0000000
--- a/asm4/src/org/objectweb/asm/commons/TryCatchBlockSorter.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import java.util.Collections;
-import java.util.Comparator;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-
-/**
- * A {@link MethodVisitor} adapter to sort the exception handlers. The handlers
- * are sorted in a method innermost-to-outermost. This allows the programmer to
- * add handlers without worrying about ordering them correctly with respect to
- * existing, in-code handlers.
- * 
- * Behavior is only defined for properly-nested handlers. If any "try" blocks
- * overlap (something that isn't possible in Java code) then this may not do
- * what you want. In fact, this adapter just sorts by the length of the "try"
- * block, taking advantage of the fact that a given try block must be larger
- * than any block it contains).
- * 
- * @author Adrian Sampson
- */
-public class TryCatchBlockSorter extends MethodNode {
-
-    public TryCatchBlockSorter(final MethodVisitor mv, final int access,
-            final String name, final String desc, final String signature,
-            final String[] exceptions) {
-        this(Opcodes.ASM4, mv, access, name, desc, signature, exceptions);
-    }
-
-    protected TryCatchBlockSorter(final int api, final MethodVisitor mv,
-            final int access, final String name, final String desc,
-            final String signature, final String[] exceptions) {
-        super(api, access, name, desc, signature, exceptions);
-        this.mv = mv;
-    }
-
-    @Override
-    public void visitEnd() {
-        // Compares TryCatchBlockNodes by the length of their "try" block.
-        Comparator<TryCatchBlockNode> comp = new Comparator<TryCatchBlockNode>() {
-
-            public int compare(TryCatchBlockNode t1, TryCatchBlockNode t2) {
-                int len1 = blockLength(t1);
-                int len2 = blockLength(t2);
-                return len1 - len2;
-            }
-
-            private int blockLength(TryCatchBlockNode block) {
-                int startidx = instructions.indexOf(block.start);
-                int endidx = instructions.indexOf(block.end);
-                return endidx - startidx;
-            }
-        };
-        Collections.sort(tryCatchBlocks, comp);
-        if (mv != null) {
-            accept(mv);
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/commons/package.html b/asm4/src/org/objectweb/asm/commons/package.html
deleted file mode 100644
index 4ce0db8..0000000
--- a/asm4/src/org/objectweb/asm/commons/package.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-Provides some useful class and method adapters. <i>The preferred way of using
-these adapters is by chaining them together and to custom adapters (instead of
-inheriting from them)</i>. Indeed this approach provides more combination
-possibilities than inheritance. For instance, suppose you want to implement an
-adapter MyAdapter than needs sorted local variables and intermediate stack map
-frame values taking into account the local variables sort. By using inheritance,
-this would require MyAdapter to extend AnalyzerAdapter, itself extending
-LocalVariablesSorter. But AnalyzerAdapter is not a subclass of
-LocalVariablesSorter, so this is not possible. On the contrary, by using
-delegation, you can make LocalVariablesSorter delegate to AnalyzerAdapter,
-itself delegating to MyAdapter. In this case AnalyzerAdapter computes
-intermediate frames based on the output of LocalVariablesSorter, and MyAdapter
-can add new locals by calling the newLocal method on LocalVariablesSorter, and
-can get the stack map frame state before each instruction by reading the locals
-and stack fields in AnalyzerAdapter (this requires references from MyAdapter
-back to LocalVariablesSorter and AnalyzerAdapter).
-</body>
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java b/asm4/src/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java
deleted file mode 100644
index 3a3e315..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * An {@link AnnotationVisitor} that collects the {@link Constant}s of the
- * annotations it visits.
- * 
- * @author Eric Bruneton
- */
-public class AnnotationConstantsCollector extends AnnotationVisitor {
-
-    private final ConstantPool cp;
-
-    public AnnotationConstantsCollector(final AnnotationVisitor av,
-            final ConstantPool cp) {
-        super(Opcodes.ASM4, av);
-        this.cp = cp;
-    }
-
-    @Override
-    public void visit(final String name, final Object value) {
-        if (name != null) {
-            cp.newUTF8(name);
-        }
-        if (value instanceof Byte) {
-            cp.newInteger(((Byte) value).byteValue());
-        } else if (value instanceof Boolean) {
-            cp.newInteger(((Boolean) value).booleanValue() ? 1 : 0);
-        } else if (value instanceof Character) {
-            cp.newInteger(((Character) value).charValue());
-        } else if (value instanceof Short) {
-            cp.newInteger(((Short) value).shortValue());
-        } else if (value instanceof Type) {
-            cp.newUTF8(((Type) value).getDescriptor());
-        } else if (value instanceof byte[]) {
-            byte[] v = (byte[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newInteger(v[i]);
-            }
-        } else if (value instanceof boolean[]) {
-            boolean[] v = (boolean[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newInteger(v[i] ? 1 : 0);
-            }
-        } else if (value instanceof short[]) {
-            short[] v = (short[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newInteger(v[i]);
-            }
-        } else if (value instanceof char[]) {
-            char[] v = (char[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newInteger(v[i]);
-            }
-        } else if (value instanceof int[]) {
-            int[] v = (int[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newInteger(v[i]);
-            }
-        } else if (value instanceof long[]) {
-            long[] v = (long[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newLong(v[i]);
-            }
-        } else if (value instanceof float[]) {
-            float[] v = (float[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newFloat(v[i]);
-            }
-        } else if (value instanceof double[]) {
-            double[] v = (double[]) value;
-            for (int i = 0; i < v.length; i++) {
-                cp.newDouble(v[i]);
-            }
-        } else {
-            cp.newConst(value);
-        }
-        av.visit(name, value);
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        if (name != null) {
-            cp.newUTF8(name);
-        }
-        cp.newUTF8(desc);
-        cp.newUTF8(value);
-        av.visitEnum(name, desc, value);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        if (name != null) {
-            cp.newUTF8(name);
-        }
-        cp.newUTF8(desc);
-        return new AnnotationConstantsCollector(av.visitAnnotation(name, desc),
-                cp);
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        if (name != null) {
-            cp.newUTF8(name);
-        }
-        return new AnnotationConstantsCollector(av.visitArray(name), cp);
-    }
-
-    @Override
-    public void visitEnd() {
-        av.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/ClassConstantsCollector.java b/asm4/src/org/objectweb/asm/optimizer/ClassConstantsCollector.java
deleted file mode 100644
index aecd7ea..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/ClassConstantsCollector.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassVisitor} that collects the {@link Constant}s of the classes it
- * visits.
- * 
- * @author Eric Bruneton
- */
-public class ClassConstantsCollector extends ClassVisitor {
-
-    private final ConstantPool cp;
-
-    public ClassConstantsCollector(final ClassVisitor cv, final ConstantPool cp) {
-        super(Opcodes.ASM4, cv);
-        this.cp = cp;
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            cp.newUTF8("Deprecated");
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            cp.newUTF8("Synthetic");
-        }
-        cp.newClass(name);
-        if (signature != null) {
-            cp.newUTF8("Signature");
-            cp.newUTF8(signature);
-        }
-        if (superName != null) {
-            cp.newClass(superName);
-        }
-        if (interfaces != null) {
-            for (int i = 0; i < interfaces.length; ++i) {
-                cp.newClass(interfaces[i]);
-            }
-        }
-        cv.visit(version, access, name, signature, superName, interfaces);
-    }
-
-    @Override
-    public void visitSource(final String source, final String debug) {
-        if (source != null) {
-            cp.newUTF8("SourceFile");
-            cp.newUTF8(source);
-        }
-        if (debug != null) {
-            cp.newUTF8("SourceDebugExtension");
-        }
-        cv.visitSource(source, debug);
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        cp.newUTF8("EnclosingMethod");
-        cp.newClass(owner);
-        if (name != null && desc != null) {
-            cp.newNameType(name, desc);
-        }
-        cv.visitOuterClass(owner, name, desc);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        cp.newUTF8(desc);
-        if (visible) {
-            cp.newUTF8("RuntimeVisibleAnnotations");
-        } else {
-            cp.newUTF8("RuntimeInvisibleAnnotations");
-        }
-        return new AnnotationConstantsCollector(cv.visitAnnotation(desc,
-                visible), cp);
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        // can do nothing
-        cv.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        cp.newUTF8("InnerClasses");
-        if (name != null) {
-            cp.newClass(name);
-        }
-        if (outerName != null) {
-            cp.newClass(outerName);
-        }
-        if (innerName != null) {
-            cp.newUTF8(innerName);
-        }
-        cv.visitInnerClass(name, outerName, innerName, access);
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            cp.newUTF8("Synthetic");
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            cp.newUTF8("Deprecated");
-        }
-        cp.newUTF8(name);
-        cp.newUTF8(desc);
-        if (signature != null) {
-            cp.newUTF8("Signature");
-            cp.newUTF8(signature);
-        }
-        if (value != null) {
-            cp.newConst(value);
-        }
-        return new FieldConstantsCollector(cv.visitField(access, name, desc,
-                signature, value), cp);
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            cp.newUTF8("Synthetic");
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            cp.newUTF8("Deprecated");
-        }
-        cp.newUTF8(name);
-        cp.newUTF8(desc);
-        if (signature != null) {
-            cp.newUTF8("Signature");
-            cp.newUTF8(signature);
-        }
-        if (exceptions != null) {
-            cp.newUTF8("Exceptions");
-            for (int i = 0; i < exceptions.length; ++i) {
-                cp.newClass(exceptions[i]);
-            }
-        }
-        return new MethodConstantsCollector(cv.visitMethod(access, name, desc,
-                signature, exceptions), cp);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/ClassOptimizer.java b/asm4/src/org/objectweb/asm/optimizer/ClassOptimizer.java
deleted file mode 100644
index 941b652..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/ClassOptimizer.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.commons.Remapper;
-import org.objectweb.asm.commons.RemappingClassAdapter;
-
-/**
- * A {@link ClassVisitor} that renames fields and methods, and removes debug
- * info.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ClassOptimizer extends RemappingClassAdapter {
-
-    private String pkgName;
-    String clsName;
-    boolean class$;
-
-    public ClassOptimizer(final ClassVisitor cv, final Remapper remapper) {
-        super(cv, remapper);
-    }
-
-    FieldVisitor syntheticFieldVisitor(final int access, final String name,
-            final String desc) {
-        return super.visitField(access, name, desc, null, null);
-    }
-
-    // ------------------------------------------------------------------------
-    // Overridden methods
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        super.visit(Opcodes.V1_2, access, name, null, superName, interfaces);
-        clsName = name;
-        int index = name.lastIndexOf('/');
-        if (index > 0) {
-            pkgName = name.substring(0, index);
-        } else {
-            pkgName = "";
-        }
-    }
-
-    @Override
-    public void visitSource(final String source, final String debug) {
-        // remove debug info
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        // remove debug info
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        // remove annotations
-        return null;
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        // remove non standard attributes
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        // remove debug info
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        String s = remapper.mapFieldName(className, name, desc);
-        if ("-".equals(s)) {
-            return null;
-        }
-        if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
-            if ((access & Opcodes.ACC_FINAL) != 0
-                    && (access & Opcodes.ACC_STATIC) != 0 && desc.length() == 1) {
-                return null;
-            }
-            if ("org/objectweb/asm".equals(pkgName) && s.equals(name)) {
-                System.out.println("INFO: " + clsName + "." + s
-                        + " could be renamed");
-            }
-            super.visitField(access, name, desc, null, value);
-        } else {
-            if (!s.equals(name)) {
-                throw new RuntimeException("The public or protected field "
-                        + className + '.' + name + " must not be renamed.");
-            }
-            super.visitField(access, name, desc, null, value);
-        }
-        return null; // remove debug info
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        String s = remapper.mapMethodName(className, name, desc);
-        if ("-".equals(s)) {
-            return null;
-        }
-
-        if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
-            if ("org/objectweb/asm".equals(pkgName) && !name.startsWith("<")
-                    && s.equals(name)) {
-                System.out.println("INFO: " + clsName + "." + s
-                        + " could be renamed");
-            }
-            return super.visitMethod(access, name, desc, null, exceptions);
-        } else {
-            if (!s.equals(name)) {
-                throw new RuntimeException("The public or protected method "
-                        + className + '.' + name + desc
-                        + " must not be renamed.");
-            }
-            return super.visitMethod(access, name, desc, null, exceptions);
-        }
-    }
-
-    @Override
-    protected MethodVisitor createRemappingMethodAdapter(int access,
-            String newDesc, MethodVisitor mv) {
-        return new MethodOptimizer(this, access, newDesc, mv, remapper);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/Constant.java b/asm4/src/org/objectweb/asm/optimizer/Constant.java
deleted file mode 100644
index 597f51a..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/Constant.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import java.util.Arrays;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Handle;
-
-/**
- * A constant pool item.
- * 
- * @author Eric Bruneton
- */
-class Constant {
-
-    /**
-     * Type of this constant pool item. A single class is used to represent all
-     * constant pool item types, in order to minimize the bytecode size of this
-     * package. The value of this field is I, J, F, D, S, s, C, T, G, M, N, y,
-     * t, [h..p] (for Constant Integer, Long, Float, Double, STR, UTF8, Class,
-     * NameType, Fieldref, Methodref, InterfaceMethodref, InvokeDynamic,
-     * MethodType and MethodHandle constant pool items respectively).
-     * 
-     * The 9 variable of MethodHandle constants are stored between h and p.
-     */
-    char type;
-
-    /**
-     * Value of this item, for an integer item.
-     */
-    int intVal;
-
-    /**
-     * Value of this item, for a long item.
-     */
-    long longVal;
-
-    /**
-     * Value of this item, for a float item.
-     */
-    float floatVal;
-
-    /**
-     * Value of this item, for a double item.
-     */
-    double doubleVal;
-
-    /**
-     * First part of the value of this item, for items that do not hold a
-     * primitive value.
-     */
-    String strVal1;
-
-    /**
-     * Second part of the value of this item, for items that do not hold a
-     * primitive value.
-     */
-    String strVal2;
-
-    /**
-     * Third part of the value of this item, for items that do not hold a
-     * primitive value.
-     */
-    Object objVal3;
-
-    /**
-     * InvokeDynamic's constant values.
-     */
-    Object[] objVals;
-
-    /**
-     * The hash code value of this constant pool item.
-     */
-    int hashCode;
-
-    Constant() {
-    }
-
-    Constant(final Constant i) {
-        type = i.type;
-        intVal = i.intVal;
-        longVal = i.longVal;
-        floatVal = i.floatVal;
-        doubleVal = i.doubleVal;
-        strVal1 = i.strVal1;
-        strVal2 = i.strVal2;
-        objVal3 = i.objVal3;
-        objVals = i.objVals;
-        hashCode = i.hashCode;
-    }
-
-    /**
-     * Sets this item to an integer item.
-     * 
-     * @param intVal
-     *            the value of this item.
-     */
-    void set(final int intVal) {
-        this.type = 'I';
-        this.intVal = intVal;
-        this.hashCode = 0x7FFFFFFF & (type + intVal);
-    }
-
-    /**
-     * Sets this item to a long item.
-     * 
-     * @param longVal
-     *            the value of this item.
-     */
-    void set(final long longVal) {
-        this.type = 'J';
-        this.longVal = longVal;
-        this.hashCode = 0x7FFFFFFF & (type + (int) longVal);
-    }
-
-    /**
-     * Sets this item to a float item.
-     * 
-     * @param floatVal
-     *            the value of this item.
-     */
-    void set(final float floatVal) {
-        this.type = 'F';
-        this.floatVal = floatVal;
-        this.hashCode = 0x7FFFFFFF & (type + (int) floatVal);
-    }
-
-    /**
-     * Sets this item to a double item.
-     * 
-     * @param doubleVal
-     *            the value of this item.
-     */
-    void set(final double doubleVal) {
-        this.type = 'D';
-        this.doubleVal = doubleVal;
-        this.hashCode = 0x7FFFFFFF & (type + (int) doubleVal);
-    }
-
-    /**
-     * Sets this item to an item that do not hold a primitive value.
-     * 
-     * @param type
-     *            the type of this item.
-     * @param strVal1
-     *            first part of the value of this item.
-     * @param strVal2
-     *            second part of the value of this item.
-     * @param strVal3
-     *            third part of the value of this item.
-     */
-    void set(final char type, final String strVal1, final String strVal2,
-            final String strVal3) {
-        this.type = type;
-        this.strVal1 = strVal1;
-        this.strVal2 = strVal2;
-        this.objVal3 = strVal3;
-        switch (type) {
-        case 's':
-        case 'S':
-        case 'C':
-        case 't':
-            hashCode = 0x7FFFFFFF & (type + strVal1.hashCode());
-            return;
-        case 'T':
-            hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
-                    * strVal2.hashCode());
-            return;
-            // case 'G':
-            // case 'M':
-            // case 'N':
-            // case 'h' ... 'p':
-        default:
-            hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
-                    * strVal2.hashCode() * strVal3.hashCode());
-        }
-    }
-
-    /**
-     * Set this item to an InvokeDynamic item.
-     * 
-     * @param name
-     *            invokedynamic's name.
-     * @param desc
-     *            invokedynamic's descriptor.
-     * @param bsm
-     *            bootstrap method.
-     * @param bsmArgs
-     *            bootstrap method constant arguments.
-     */
-    void set(final String name, final String desc, final Handle bsm,
-            final Object[] bsmArgs) {
-        this.type = 'y';
-        this.strVal1 = name;
-        this.strVal2 = desc;
-        this.objVal3 = bsm;
-        this.objVals = bsmArgs;
-
-        int hashCode = 'y' + name.hashCode() * desc.hashCode() * bsm.hashCode();
-        for (int i = 0; i < bsmArgs.length; i++) {
-            hashCode *= bsmArgs[i].hashCode();
-        }
-        this.hashCode = 0x7FFFFFFF & hashCode;
-    }
-
-    void write(final ClassWriter cw) {
-        switch (type) {
-        case 'I':
-            cw.newConst(new Integer(intVal));
-            break;
-        case 'J':
-            cw.newConst(new Long(longVal));
-            break;
-        case 'F':
-            cw.newConst(new Float(floatVal));
-            break;
-        case 'D':
-            cw.newConst(new Double(doubleVal));
-            break;
-        case 'S':
-            cw.newConst(strVal1);
-            break;
-        case 's':
-            cw.newUTF8(strVal1);
-            break;
-        case 'C':
-            cw.newClass(strVal1);
-            break;
-        case 'T':
-            cw.newNameType(strVal1, strVal2);
-            break;
-        case 'G':
-            cw.newField(strVal1, strVal2, (String) objVal3);
-            break;
-        case 'M':
-            cw.newMethod(strVal1, strVal2, (String) objVal3, false);
-            break;
-        case 'N':
-            cw.newMethod(strVal1, strVal2, (String) objVal3, true);
-            break;
-        case 'y':
-            cw.newInvokeDynamic(strVal1, strVal2, (Handle) objVal3, objVals);
-            break;
-        case 't':
-            cw.newMethodType(strVal1);
-            break;
-        default: // 'h' ... 'p': handle
-            cw.newHandle(type - 'h' + 1, strVal1, strVal2, (String) objVal3);
-        }
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (!(o instanceof Constant)) {
-            return false;
-        }
-        Constant c = (Constant) o;
-        if (c.type == type) {
-            switch (type) {
-            case 'I':
-                return c.intVal == intVal;
-            case 'J':
-                return c.longVal == longVal;
-            case 'F':
-                return Float.compare(c.floatVal, floatVal) == 0;
-            case 'D':
-                return Double.compare(c.doubleVal, doubleVal) == 0;
-            case 's':
-            case 'S':
-            case 'C':
-            case 't':
-                return c.strVal1.equals(strVal1);
-            case 'T':
-                return c.strVal1.equals(strVal1) && c.strVal2.equals(strVal2);
-            case 'y':
-                return c.strVal1.equals(strVal1) && c.strVal2.equals(strVal2)
-                        && c.objVal3.equals(objVal3)
-                        && Arrays.equals(c.objVals, objVals);
-                // case 'G':
-                // case 'M':
-                // case 'N':
-                // case 'h' ... 'p':
-            default:
-                return c.strVal1.equals(strVal1) && c.strVal2.equals(strVal2)
-                        && c.objVal3.equals(objVal3);
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return hashCode;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/ConstantPool.java b/asm4/src/org/objectweb/asm/optimizer/ConstantPool.java
deleted file mode 100644
index 63391ab..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/ConstantPool.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import java.util.HashMap;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A constant pool.
- * 
- * @author Eric Bruneton
- */
-public class ConstantPool extends HashMap<Constant, Constant> {
-
-    private final Constant key1 = new Constant();
-
-    private final Constant key2 = new Constant();
-
-    private final Constant key3 = new Constant();
-
-    private final Constant key4 = new Constant();
-
-    private final Constant key5 = new Constant();
-
-    public Constant newInteger(final int value) {
-        key1.set(value);
-        Constant result = get(key1);
-        if (result == null) {
-            result = new Constant(key1);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newFloat(final float value) {
-        key1.set(value);
-        Constant result = get(key1);
-        if (result == null) {
-            result = new Constant(key1);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newLong(final long value) {
-        key1.set(value);
-        Constant result = get(key1);
-        if (result == null) {
-            result = new Constant(key1);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newDouble(final double value) {
-        key1.set(value);
-        Constant result = get(key1);
-        if (result == null) {
-            result = new Constant(key1);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newUTF8(final String value) {
-        key1.set('s', value, null, null);
-        Constant result = get(key1);
-        if (result == null) {
-            result = new Constant(key1);
-            put(result);
-        }
-        return result;
-    }
-
-    private Constant newString(final String value) {
-        key2.set('S', value, null, null);
-        Constant result = get(key2);
-        if (result == null) {
-            newUTF8(value);
-            result = new Constant(key2);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newClass(final String value) {
-        key2.set('C', value, null, null);
-        Constant result = get(key2);
-        if (result == null) {
-            newUTF8(value);
-            result = new Constant(key2);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newMethodType(final String methodDescriptor) {
-        key2.set('t', methodDescriptor, null, null);
-        Constant result = get(key2);
-        if (result == null) {
-            newUTF8(methodDescriptor);
-            result = new Constant(key2);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newHandle(final int tag, final String owner,
-            final String name, final String desc) {
-        key4.set((char) ('h' - 1 + tag), owner, name, desc);
-        Constant result = get(key4);
-        if (result == null) {
-            if (tag <= Opcodes.H_PUTSTATIC) {
-                newField(owner, name, desc);
-            } else {
-                newMethod(owner, name, desc, tag == Opcodes.H_INVOKEINTERFACE);
-            }
-            result = new Constant(key4);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newConst(final Object cst) {
-        if (cst instanceof Integer) {
-            int val = ((Integer) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Float) {
-            float val = ((Float) cst).floatValue();
-            return newFloat(val);
-        } else if (cst instanceof Long) {
-            long val = ((Long) cst).longValue();
-            return newLong(val);
-        } else if (cst instanceof Double) {
-            double val = ((Double) cst).doubleValue();
-            return newDouble(val);
-        } else if (cst instanceof String) {
-            return newString((String) cst);
-        } else if (cst instanceof Type) {
-            Type t = (Type) cst;
-            int s = t.getSort();
-            if (s == Type.OBJECT) {
-                return newClass(t.getInternalName());
-            } else if (s == Type.METHOD) {
-                return newMethodType(t.getDescriptor());
-            } else { // s == primitive type or array
-                return newClass(t.getDescriptor());
-            }
-        } else if (cst instanceof Handle) {
-            Handle h = (Handle) cst;
-            return newHandle(h.getTag(), h.getOwner(), h.getName(), h.getDesc());
-        } else {
-            throw new IllegalArgumentException("value " + cst);
-        }
-    }
-
-    public Constant newField(final String owner, final String name,
-            final String desc) {
-        key3.set('G', owner, name, desc);
-        Constant result = get(key3);
-        if (result == null) {
-            newClass(owner);
-            newNameType(name, desc);
-            result = new Constant(key3);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newMethod(final String owner, final String name,
-            final String desc, final boolean itf) {
-        key3.set(itf ? 'N' : 'M', owner, name, desc);
-        Constant result = get(key3);
-        if (result == null) {
-            newClass(owner);
-            newNameType(name, desc);
-            result = new Constant(key3);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newInvokeDynamic(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        key5.set(name, desc, bsm, bsmArgs);
-        Constant result = get(key5);
-        if (result == null) {
-            newNameType(name, desc);
-            newHandle(bsm.getTag(), bsm.getOwner(), bsm.getName(),
-                    bsm.getDesc());
-            for (int i = 0; i < bsmArgs.length; i++) {
-                newConst(bsmArgs[i]);
-            }
-            result = new Constant(key5);
-            put(result);
-        }
-        return result;
-    }
-
-    public Constant newNameType(final String name, final String desc) {
-        key2.set('T', name, desc, null);
-        Constant result = get(key2);
-        if (result == null) {
-            newUTF8(name);
-            newUTF8(desc);
-            result = new Constant(key2);
-            put(result);
-        }
-        return result;
-    }
-
-    private Constant get(final Constant key) {
-        return get((Object) key);
-    }
-
-    private void put(final Constant cst) {
-        put(cst, cst);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/optimizer/FieldConstantsCollector.java b/asm4/src/org/objectweb/asm/optimizer/FieldConstantsCollector.java
deleted file mode 100644
index ec21b09..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/FieldConstantsCollector.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link FieldVisitor} that collects the {@link Constant}s of the fields it
- * visits.
- * 
- * @author Eric Bruneton
- */
-public class FieldConstantsCollector extends FieldVisitor {
-
-    private final ConstantPool cp;
-
-    public FieldConstantsCollector(final FieldVisitor fv, final ConstantPool cp) {
-        super(Opcodes.ASM4, fv);
-        this.cp = cp;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        cp.newUTF8(desc);
-        if (visible) {
-            cp.newUTF8("RuntimeVisibleAnnotations");
-        } else {
-            cp.newUTF8("RuntimeInvisibleAnnotations");
-        }
-        return new AnnotationConstantsCollector(fv.visitAnnotation(desc,
-                visible), cp);
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        // can do nothing
-        fv.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitEnd() {
-        fv.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/JarOptimizer.java b/asm4/src/org/objectweb/asm/optimizer/JarOptimizer.java
deleted file mode 100644
index 2c09790..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/JarOptimizer.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A Jar file optimizer.
- * 
- * @author Eric Bruneton
- */
-public class JarOptimizer {
-
-    static final Set<String> API = new HashSet<String>();
-    static final Map<String, String> HIERARCHY = new HashMap<String, String>();
-    static boolean nodebug = false;
-
-    public static void main(final String[] args) throws IOException {
-        File f = new File(args[0]);
-        InputStream is = new GZIPInputStream(new FileInputStream(f));
-        BufferedReader lnr = new LineNumberReader(new InputStreamReader(is));
-        while (true) {
-            String line = lnr.readLine();
-            if (line != null) {
-                if (line.startsWith("class")) {
-                    String c = line.substring(6, line.lastIndexOf(' '));
-                    String sc = line.substring(line.lastIndexOf(' ') + 1);
-                    HIERARCHY.put(c, sc);
-                } else {
-                    API.add(line);
-                }
-            } else {
-                break;
-            }
-        }
-
-        int argIndex = 1;
-        if (args[argIndex].equals("-nodebug")) {
-            nodebug = true;
-            argIndex++;
-        }
-
-        optimize(new File(args[argIndex]));
-    }
-
-    static void optimize(final File f) throws IOException {
-        if (nodebug && f.getName().contains("debug")) {
-            return;
-        }
-
-        if (f.isDirectory()) {
-            File[] files = f.listFiles();
-            for (int i = 0; i < files.length; ++i) {
-                optimize(files[i]);
-            }
-        } else if (f.getName().endsWith(".jar")) {
-            File g = new File(f.getParentFile(), f.getName() + ".new");
-            ZipFile zf = new ZipFile(f);
-            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(g));
-            Enumeration<? extends ZipEntry> e = zf.entries();
-            byte[] buf = new byte[10000];
-            while (e.hasMoreElements()) {
-                ZipEntry ze = e.nextElement();
-                if (ze.isDirectory()) {
-                    continue;
-                }
-                out.putNextEntry(ze);
-                if (ze.getName().endsWith(".class")) {
-                    ClassReader cr = new ClassReader(zf.getInputStream(ze));
-                    // cr.accept(new ClassDump(), 0);
-                    cr.accept(new ClassVerifier(), 0);
-                }
-                InputStream is = zf.getInputStream(ze);
-                int n;
-                do {
-                    n = is.read(buf, 0, buf.length);
-                    if (n != -1) {
-                        out.write(buf, 0, n);
-                    }
-                } while (n != -1);
-                out.closeEntry();
-            }
-            out.close();
-            zf.close();
-            if (!f.delete()) {
-                throw new IOException("Cannot delete file " + f);
-            }
-            if (!g.renameTo(f)) {
-                throw new IOException("Cannot rename file " + g);
-            }
-        }
-    }
-
-    static class ClassDump extends ClassVisitor {
-
-        String owner;
-
-        public ClassDump() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public void visit(final int version, final int access,
-                final String name, final String signature,
-                final String superName, final String[] interfaces) {
-            owner = name;
-            if (owner.startsWith("java/")) {
-                System.out.println("class " + name + ' ' + superName);
-            }
-        }
-
-        @Override
-        public FieldVisitor visitField(final int access, final String name,
-                final String desc, final String signature, final Object value) {
-            if (owner.startsWith("java/")) {
-                System.out.println(owner + ' ' + name);
-            }
-            return null;
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            if (owner.startsWith("java/")) {
-                System.out.println(owner + ' ' + name + desc);
-            }
-            return null;
-        }
-    }
-
-    static class ClassVerifier extends ClassVisitor {
-
-        String owner;
-
-        String method;
-
-        public ClassVerifier() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public void visit(final int version, final int access,
-                final String name, final String signature,
-                final String superName, final String[] interfaces) {
-            owner = name;
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            method = name + desc;
-            return new MethodVisitor(Opcodes.ASM4) {
-                @Override
-                public void visitFieldInsn(final int opcode,
-                        final String owner, final String name, final String desc) {
-                    check(owner, name);
-                }
-
-                @Override
-                public void visitMethodInsn(final int opcode,
-                        final String owner, final String name, final String desc) {
-                    check(owner, name + desc);
-                }
-            };
-        }
-
-        void check(String owner, String member) {
-            if (owner.startsWith("java/")) {
-                String o = owner;
-                while (o != null) {
-                    if (API.contains(o + ' ' + member)) {
-                        return;
-                    }
-                    o = HIERARCHY.get(o);
-                }
-                System.out.println("WARNING: " + owner + ' ' + member
-                        + " called in " + this.owner + ' ' + method
-                        + " is not defined in JDK 1.3 API");
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/MethodConstantsCollector.java b/asm4/src/org/objectweb/asm/optimizer/MethodConstantsCollector.java
deleted file mode 100644
index 06033cd..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/MethodConstantsCollector.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * An {@link MethodVisitor} that collects the {@link Constant}s of the methods
- * it visits.
- * 
- * @author Eric Bruneton
- */
-public class MethodConstantsCollector extends MethodVisitor {
-
-    private final ConstantPool cp;
-
-    public MethodConstantsCollector(final MethodVisitor mv,
-            final ConstantPool cp) {
-        super(Opcodes.ASM4, mv);
-        this.cp = cp;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        cp.newUTF8("AnnotationDefault");
-        return new AnnotationConstantsCollector(mv.visitAnnotationDefault(), cp);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        cp.newUTF8(desc);
-        if (visible) {
-            cp.newUTF8("RuntimeVisibleAnnotations");
-        } else {
-            cp.newUTF8("RuntimeInvisibleAnnotations");
-        }
-        return new AnnotationConstantsCollector(mv.visitAnnotation(desc,
-                visible), cp);
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        cp.newUTF8(desc);
-        if (visible) {
-            cp.newUTF8("RuntimeVisibleParameterAnnotations");
-        } else {
-            cp.newUTF8("RuntimeInvisibleParameterAnnotations");
-        }
-        return new AnnotationConstantsCollector(mv.visitParameterAnnotation(
-                parameter, desc, visible), cp);
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        cp.newClass(type);
-        mv.visitTypeInsn(opcode, type);
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        cp.newField(owner, name, desc);
-        mv.visitFieldInsn(opcode, owner, name, desc);
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        boolean itf = opcode == Opcodes.INVOKEINTERFACE;
-        cp.newMethod(owner, name, desc, itf);
-        mv.visitMethodInsn(opcode, owner, name, desc);
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        cp.newInvokeDynamic(name, desc, bsm, bsmArgs);
-        mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        cp.newConst(cst);
-        mv.visitLdcInsn(cst);
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        cp.newClass(desc);
-        mv.visitMultiANewArrayInsn(desc, dims);
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        if (type != null) {
-            cp.newClass(type);
-        }
-        mv.visitTryCatchBlock(start, end, handler, type);
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        if (signature != null) {
-            cp.newUTF8("LocalVariableTypeTable");
-            cp.newUTF8(name);
-            cp.newUTF8(signature);
-        }
-        cp.newUTF8("LocalVariableTable");
-        cp.newUTF8(name);
-        cp.newUTF8(desc);
-        mv.visitLocalVariable(name, desc, signature, start, end, index);
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        cp.newUTF8("LineNumberTable");
-        mv.visitLineNumber(line, start);
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        cp.newUTF8("Code");
-        mv.visitMaxs(maxStack, maxLocals);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/MethodOptimizer.java b/asm4/src/org/objectweb/asm/optimizer/MethodOptimizer.java
deleted file mode 100644
index 64e9a4b..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/MethodOptimizer.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.Remapper;
-import org.objectweb.asm.commons.RemappingMethodAdapter;
-
-/**
- * A {@link MethodVisitor} that renames fields and methods, and removes debug
- * info.
- * 
- * @author Eugene Kuleshov
- */
-public class MethodOptimizer extends RemappingMethodAdapter implements Opcodes {
-
-    private final ClassOptimizer classOptimizer;
-
-    public MethodOptimizer(ClassOptimizer classOptimizer, int access,
-            String desc, MethodVisitor mv, Remapper remapper) {
-        super(access, desc, mv, remapper);
-        this.classOptimizer = classOptimizer;
-    }
-
-    // ------------------------------------------------------------------------
-    // Overridden methods
-    // ------------------------------------------------------------------------
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        // remove annotations
-        return null;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        // remove annotations
-        return null;
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        // remove annotations
-        return null;
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        // remove debug info
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        // remove debug info
-    }
-
-    @Override
-    public void visitFrame(int type, int local, Object[] local2, int stack,
-            Object[] stack2) {
-        // remove frame info
-    }
-
-    @Override
-    public void visitAttribute(Attribute attr) {
-        // remove non standard attributes
-    }
-
-    @Override
-    public void visitLdcInsn(Object cst) {
-        if (!(cst instanceof Type)) {
-            super.visitLdcInsn(cst);
-            return;
-        }
-
-        // transform Foo.class to foo$(class) for 1.2 compatibility
-        String ldcName = ((Type) cst).getInternalName();
-        String fieldName = "class$" + ldcName.replace('/', '$');
-
-        FieldVisitor fv = classOptimizer.syntheticFieldVisitor(ACC_STATIC
-                | ACC_SYNTHETIC, fieldName, "Ljava/lang/Class;");
-        fv.visitEnd();
-
-        if (!classOptimizer.class$) {
-            MethodVisitor mv = classOptimizer.visitMethod(ACC_STATIC
-                    | ACC_SYNTHETIC, "class$",
-                    "(Ljava/lang/String;)Ljava/lang/Class;", null, null);
-            mv.visitCode();
-            Label l0 = new Label();
-            Label l1 = new Label();
-            Label l2 = new Label();
-            mv.visitTryCatchBlock(l0, l1, l2,
-                    "java/lang/ClassNotFoundException");
-            mv.visitLabel(l0);
-            mv.visitVarInsn(ALOAD, 0);
-            mv.visitMethodInsn(INVOKESTATIC, "java/lang/Class", "forName",
-                    "(Ljava/lang/String;)Ljava/lang/Class;");
-            mv.visitLabel(l1);
-            mv.visitInsn(ARETURN);
-            mv.visitLabel(l2);
-            mv.visitMethodInsn(INVOKEVIRTUAL,
-                    "java/lang/ClassNotFoundException", "getMessage",
-                    "()Ljava/lang/String;");
-            mv.visitVarInsn(ASTORE, 1);
-            mv.visitTypeInsn(NEW, "java/lang/NoClassDefFoundError");
-            mv.visitInsn(DUP);
-            mv.visitVarInsn(ALOAD, 1);
-            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/NoClassDefFoundError",
-                    "<init>", "(Ljava/lang/String;)V");
-            mv.visitInsn(ATHROW);
-            mv.visitMaxs(3, 2);
-            mv.visitEnd();
-
-            classOptimizer.class$ = true;
-        }
-
-        String clsName = classOptimizer.clsName;
-        mv.visitFieldInsn(GETSTATIC, clsName, fieldName, "Ljava/lang/Class;");
-        Label elseLabel = new Label();
-        mv.visitJumpInsn(IFNONNULL, elseLabel);
-        mv.visitLdcInsn(ldcName.replace('/', '.'));
-        mv.visitMethodInsn(INVOKESTATIC, clsName, "class$",
-                "(Ljava/lang/String;)Ljava/lang/Class;");
-        mv.visitInsn(DUP);
-        mv.visitFieldInsn(PUTSTATIC, clsName, fieldName, "Ljava/lang/Class;");
-        Label endLabel = new Label();
-        mv.visitJumpInsn(GOTO, endLabel);
-        mv.visitLabel(elseLabel);
-        mv.visitFieldInsn(GETSTATIC, clsName, fieldName, "Ljava/lang/Class;");
-        mv.visitLabel(endLabel);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/NameMapping.java b/asm4/src/org/objectweb/asm/optimizer/NameMapping.java
deleted file mode 100644
index 8c84139..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/NameMapping.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-
-import org.objectweb.asm.Type;
-
-/**
- * A MAPPING from names to names, used to rename classes, fields and methods.
- * 
- * @author Eric Bruneton
- */
-public class NameMapping {
-
-    public final Properties mapping;
-
-    public final Set<Object> unused;
-
-    public NameMapping(final String file) throws IOException {
-        mapping = new Properties();
-        InputStream is = null;
-        try {
-            is = new BufferedInputStream(new FileInputStream(file));
-            mapping.load(is);
-            unused = new HashSet<Object>(mapping.keySet());
-        } finally {
-            if (is != null) {
-                is.close();
-            }
-        }
-    }
-
-    public String map(final String name) {
-        String s = (String) mapping.get(name);
-        if (s == null) {
-            int p = name.indexOf('.');
-            if (p == -1) {
-                s = name;
-            } else {
-                int q = name.indexOf('(');
-                if (q == -1) {
-                    s = name.substring(p + 1);
-                } else {
-                    s = name.substring(p + 1, q);
-                }
-            }
-        } else {
-            unused.remove(name);
-        }
-        return s;
-    }
-
-    public String fix(final String desc) {
-        if (desc.startsWith("(")) {
-            Type[] arguments = Type.getArgumentTypes(desc);
-            Type result = Type.getReturnType(desc);
-            for (int i = 0; i < arguments.length; ++i) {
-                arguments[i] = fix(arguments[i]);
-            }
-            result = fix(result);
-            return Type.getMethodDescriptor(result, arguments);
-        } else {
-            return fix(Type.getType(desc)).getDescriptor();
-        }
-    }
-
-    private Type fix(final Type t) {
-        if (t.getSort() == Type.OBJECT) {
-            return Type.getObjectType(map(t.getInternalName()));
-        } else if (t.getSort() == Type.ARRAY) {
-            String s = fix(t.getElementType()).getDescriptor();
-            for (int i = 0; i < t.getDimensions(); ++i) {
-                s = '[' + s;
-            }
-            return Type.getType(s);
-        } else {
-            return t;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/Shrinker.java b/asm4/src/org/objectweb/asm/optimizer/Shrinker.java
deleted file mode 100644
index c4ee651..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/Shrinker.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.optimizer;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.Remapper;
-import org.objectweb.asm.commons.SimpleRemapper;
-
-/**
- * A class file shrinker utility.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class Shrinker {
-
-    static final HashMap<String, String> MAPPING = new HashMap<String, String>();
-
-    public static void main(final String[] args) throws IOException {
-        Properties properties = new Properties();
-        int n = args.length - 1;
-        for (int i = 0; i < n - 1; ++i) {
-            properties.load(new FileInputStream(args[i]));
-        }
-
-        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
-            MAPPING.put((String) entry.getKey(), (String) entry.getValue());
-        }
-
-        final Set<String> unused = new HashSet<String>(MAPPING.keySet());
-
-        File f = new File(args[n - 1]);
-        File d = new File(args[n]);
-
-        optimize(f, d, new SimpleRemapper(MAPPING) {
-            @Override
-            public String map(String key) {
-                String s = super.map(key);
-                if (s != null) {
-                    unused.remove(key);
-                }
-                return s;
-            }
-        });
-
-        Iterator<String> i = unused.iterator();
-        while (i.hasNext()) {
-            String s = i.next();
-            if (!s.endsWith("/remove")) {
-                System.out.println("INFO: unused mapping " + s);
-            }
-        }
-    }
-
-    static void optimize(final File f, final File d, final Remapper remapper)
-            throws IOException {
-        if (f.isDirectory()) {
-            File[] files = f.listFiles();
-            for (int i = 0; i < files.length; ++i) {
-                optimize(files[i], d, remapper);
-            }
-        } else if (f.getName().endsWith(".class")) {
-            ConstantPool cp = new ConstantPool();
-            ClassReader cr = new ClassReader(new FileInputStream(f));
-            ClassWriter cw = new ClassWriter(0);
-            ClassConstantsCollector ccc = new ClassConstantsCollector(cw, cp);
-            ClassOptimizer co = new ClassOptimizer(ccc, remapper);
-            cr.accept(co, ClassReader.SKIP_DEBUG);
-
-            Set<Constant> constants = new TreeSet<Constant>(
-                    new ConstantComparator());
-            constants.addAll(cp.values());
-
-            cr = new ClassReader(cw.toByteArray());
-            cw = new ClassWriter(0);
-            Iterator<Constant> i = constants.iterator();
-            while (i.hasNext()) {
-                Constant c = i.next();
-                c.write(cw);
-            }
-            cr.accept(cw, ClassReader.SKIP_DEBUG);
-
-            if (MAPPING.get(cr.getClassName() + "/remove") != null) {
-                return;
-            }
-            String n = remapper.mapType(cr.getClassName());
-            File g = new File(d, n + ".class");
-            if (!g.exists() || g.lastModified() < f.lastModified()) {
-                if (!g.getParentFile().exists() && !g.getParentFile().mkdirs()) {
-                    throw new IOException("Cannot create directory "
-                            + g.getParentFile());
-                }
-                OutputStream os = new FileOutputStream(g);
-                try {
-                    os.write(cw.toByteArray());
-                } finally {
-                    os.close();
-                }
-            }
-        }
-    }
-
-    static class ConstantComparator implements Comparator<Constant> {
-
-        public int compare(final Constant c1, final Constant c2) {
-            int d = getSort(c1) - getSort(c2);
-            if (d == 0) {
-                switch (c1.type) {
-                case 'I':
-                    return new Integer(c1.intVal).compareTo(new Integer(
-                            c2.intVal));
-                case 'J':
-                    return new Long(c1.longVal).compareTo(new Long(c2.longVal));
-                case 'F':
-                    return new Float(c1.floatVal).compareTo(new Float(
-                            c2.floatVal));
-                case 'D':
-                    return new Double(c1.doubleVal).compareTo(new Double(
-                            c2.doubleVal));
-                case 's':
-                case 'S':
-                case 'C':
-                case 't':
-                    return c1.strVal1.compareTo(c2.strVal1);
-                case 'T':
-                    d = c1.strVal1.compareTo(c2.strVal1);
-                    if (d == 0) {
-                        d = c1.strVal2.compareTo(c2.strVal2);
-                    }
-                    break;
-                case 'y':
-                    d = c1.strVal1.compareTo(c2.strVal1);
-                    if (d == 0) {
-                        d = c1.strVal2.compareTo(c2.strVal2);
-                        if (d == 0) {
-                            Handle bsm1 = (Handle) c1.objVal3;
-                            Handle bsm2 = (Handle) c2.objVal3;
-                            d = compareHandle(bsm1, bsm2);
-                            if (d == 0) {
-                                d = compareObjects(c1.objVals, c2.objVals);
-                            }
-                        }
-                    }
-                    break;
-
-                default:
-                    d = c1.strVal1.compareTo(c2.strVal1);
-                    if (d == 0) {
-                        d = c1.strVal2.compareTo(c2.strVal2);
-                        if (d == 0) {
-                            d = ((String) c1.objVal3)
-                                    .compareTo((String) c2.objVal3);
-                        }
-                    }
-                }
-            }
-            return d;
-        }
-
-        private static int compareHandle(Handle h1, Handle h2) {
-            int d = h1.getTag() - h2.getTag();
-            if (d == 0) {
-                d = h1.getOwner().compareTo(h2.getOwner());
-                if (d == 0) {
-                    d = h1.getName().compareTo(h2.getName());
-                    if (d == 0) {
-                        d = h1.getDesc().compareTo(h2.getDesc());
-                    }
-                }
-            }
-            return d;
-        }
-
-        private static int compareType(Type mtype1, Type mtype2) {
-            return mtype1.getDescriptor().compareTo(mtype2.getDescriptor());
-        }
-
-        private static int compareObjects(Object[] objVals1, Object[] objVals2) {
-            int length = objVals1.length;
-            int d = length - objVals2.length;
-            if (d == 0) {
-                for (int i = 0; i < length; i++) {
-                    Object objVal1 = objVals1[i];
-                    Object objVal2 = objVals2[i];
-                    d = objVal1.getClass().getName()
-                            .compareTo(objVal2.getClass().getName());
-                    if (d == 0) {
-                        if (objVal1 instanceof Type) {
-                            d = compareType((Type) objVal1, (Type) objVal2);
-                        } else if (objVal1 instanceof Handle) {
-                            d = compareHandle((Handle) objVal1,
-                                    (Handle) objVal2);
-                        } else {
-                            d = ((Comparable) objVal1).compareTo(objVal2);
-                        }
-                    }
-
-                    if (d != 0) {
-                        return d;
-                    }
-                }
-            }
-            return 0;
-        }
-
-        private static int getSort(final Constant c) {
-            switch (c.type) {
-            case 'I':
-                return 0;
-            case 'J':
-                return 1;
-            case 'F':
-                return 2;
-            case 'D':
-                return 3;
-            case 's':
-                return 4;
-            case 'S':
-                return 5;
-            case 'C':
-                return 6;
-            case 'T':
-                return 7;
-            case 'G':
-                return 8;
-            case 'M':
-                return 9;
-            case 'N':
-                return 10;
-            case 'y':
-                return 11;
-            case 't':
-                return 12;
-            default:
-                return 100 + c.type - 'h';
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/optimizer/jdk1.2.2_017.txt.gz b/asm4/src/org/objectweb/asm/optimizer/jdk1.2.2_017.txt.gz
deleted file mode 100644
index 39cdf9d..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/jdk1.2.2_017.txt.gz
+++ /dev/null
Binary files differ
diff --git a/asm4/src/org/objectweb/asm/optimizer/jdk1.3.1_19.txt.gz b/asm4/src/org/objectweb/asm/optimizer/jdk1.3.1_19.txt.gz
deleted file mode 100644
index a3c7aa6..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/jdk1.3.1_19.txt.gz
+++ /dev/null
Binary files differ
diff --git a/asm4/src/org/objectweb/asm/optimizer/shrink-annotations.properties b/asm4/src/org/objectweb/asm/optimizer/shrink-annotations.properties
deleted file mode 100644
index 03fec2e..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/shrink-annotations.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# class mappings
-
-org/objectweb/asm/AnnotationWriter/remove=true
-
-# field mappings
-
-org/objectweb/asm/ClassWriter.anns=-
-org/objectweb/asm/ClassWriter.ianns=-
-
-org/objectweb/asm/FieldWriter.anns=-
-org/objectweb/asm/FieldWriter.ianns=-
-
-org/objectweb/asm/MethodWriter.annd=-
-org/objectweb/asm/MethodWriter.anns=-
-org/objectweb/asm/MethodWriter.ianns=-
-org/objectweb/asm/MethodWriter.panns=-
-org/objectweb/asm/MethodWriter.ipanns=-
-
-# method mappings
-
-org/objectweb/asm/ClassReader.readAnnotationValue(I[CLjava/lang/String;Lorg/objectweb/asm/AnnotationVisitor;)I=-
-org/objectweb/asm/ClassReader.readAnnotationValues(I[CZLorg/objectweb/asm/AnnotationVisitor;)I=-
-org/objectweb/asm/ClassReader.readParameterAnnotations(I[CZLorg/objectweb/asm/MethodVisitor;)V=-
diff --git a/asm4/src/org/objectweb/asm/optimizer/shrink-frames.properties b/asm4/src/org/objectweb/asm/optimizer/shrink-frames.properties
deleted file mode 100644
index ecf580f..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/shrink-frames.properties
+++ /dev/null
@@ -1,62 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# class mappings
-
-org/objectweb/asm/Frame/remove=true
-
-# field mappings
-
-org/objectweb/asm/ClassWriter.typeCount=-
-org/objectweb/asm/ClassWriter.typeTable=-
-
-org/objectweb/asm/Label.frame=-
-
-org/objectweb/asm/MethodWriter.frameCount=-
-org/objectweb/asm/MethodWriter.stackMap=-
-org/objectweb/asm/MethodWriter.previousFrameOffset=-
-org/objectweb/asm/MethodWriter.previousFrame=-
-org/objectweb/asm/MethodWriter.frameIndex=-
-org/objectweb/asm/MethodWriter.frame=-
-
-# method mappings
-
-org/objectweb/asm/ClassReader.readFrameType([Ljava/lang/Object;II[C[Lorg/objectweb/asm/Label;)I=-
-
-org/objectweb/asm/ClassWriter.addType(Ljava/lang/String;)I=-
-org/objectweb/asm/ClassWriter.addUninitializedType(Ljava/lang/String;I)I=-
-org/objectweb/asm/ClassWriter.addType(Lorg/objectweb/asm/Item;)Lorg/objectweb/asm/Item;=-
-org/objectweb/asm/ClassWriter.getMergedType(II)I=-
-
-org/objectweb/asm/MethodWriter.startFrame(III)V=-
-org/objectweb/asm/MethodWriter.endFrame()V=-
-org/objectweb/asm/MethodWriter.writeFrame()V=-
-org/objectweb/asm/MethodWriter.writeFrameTypes(II)V=-
-org/objectweb/asm/MethodWriter.writeFrameType(Ljava/lang/Object;)V=-
diff --git a/asm4/src/org/objectweb/asm/optimizer/shrink-resize.properties b/asm4/src/org/objectweb/asm/optimizer/shrink-resize.properties
deleted file mode 100644
index 97f7e34..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/shrink-resize.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# class mappings
-
-# field mappings
-
-# method mappings
-
-org/objectweb/asm/MethodWriter.resizeInstructions()V=-
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/optimizer/shrink-signatures.properties b/asm4/src/org/objectweb/asm/optimizer/shrink-signatures.properties
deleted file mode 100644
index 6a48623..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/shrink-signatures.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# class mappings
-
-org/objectweb/asm/signature/SignatureReader/remove=true
-org/objectweb/asm/signature/SignatureVisitor/remove=true
-org/objectweb/asm/signature/SignatureWriter/remove=true
-
-# field mappings
-
-org/objectweb/asm/ClassWriter.signature=-
-
-org/objectweb/asm/FieldWriter.signature=-
-
-org/objectweb/asm/MethodWriter.signature=-
diff --git a/asm4/src/org/objectweb/asm/optimizer/shrink-writer.properties b/asm4/src/org/objectweb/asm/optimizer/shrink-writer.properties
deleted file mode 100644
index 1c83ca2..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/shrink-writer.properties
+++ /dev/null
@@ -1,66 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# class mappings
-
-org/objectweb/asm/AnnotationWriter/remove=true
-org/objectweb/asm/ByteVector/remove=true
-org/objectweb/asm/ClassWriter/remove=true
-org/objectweb/asm/Edge/remove=true
-org/objectweb/asm/FieldWriter/remove=true
-org/objectweb/asm/Frame/remove=true
-org/objectweb/asm/Handler/remove=true
-org/objectweb/asm/Item/remove=true
-org/objectweb/asm/MethodWriter/remove=true
-
-# field mappings
-
-org/objectweb/asm/Label.position=-
-org/objectweb/asm/Label.referenceCount=-
-org/objectweb/asm/Label.srcAndRefPositions=-
-org/objectweb/asm/Label.inputStackTop=-
-org/objectweb/asm/Label.outputStackMax=-
-org/objectweb/asm/Label.frame=-
-org/objectweb/asm/Label.successor=-
-org/objectweb/asm/Label.successors=-
-org/objectweb/asm/Label.next=-
-
-# method mappings
-
-org/objectweb/asm/ClassReader.copyPool(Lorg/objectweb/asm/ClassWriter;)V=-
-
-org/objectweb/asm/Label.addReference(II)V=-
-org/objectweb/asm/Label.put(Lorg/objectweb/asm/MethodWriter;Lorg/objectweb/asm/ByteVector;IZ)V=-
-org/objectweb/asm/Label.resolve(Lorg/objectweb/asm/MethodWriter;I[B)Z=-
-org/objectweb/asm/Label.getFirst()Lorg/objectweb/asm/Label;=-
-org/objectweb/asm/Label.inSubroutine(J)Z=-
-org/objectweb/asm/Label.inSameSubroutine(Lorg/objectweb/asm/Label;)Z=-
-org/objectweb/asm/Label.addToSubroutine(JI)V=-
-org/objectweb/asm/Label.visitSubroutine(Lorg/objectweb/asm/Label;JI)V=-
diff --git a/asm4/src/org/objectweb/asm/optimizer/shrink.properties b/asm4/src/org/objectweb/asm/optimizer/shrink.properties
deleted file mode 100644
index 7130025..0000000
--- a/asm4/src/org/objectweb/asm/optimizer/shrink.properties
+++ /dev/null
@@ -1,354 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#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.
-###############################################################################
-
-# class mappings
-
-#org/objectweb/asm/Edge=org/objectweb/asm/a
-#org/objectweb/asm/Item=org/objectweb/asm/b
-#org/objectweb/asm/FieldWriter=org/objectweb/asm/c
-#org/objectweb/asm/MethodWriter=org/objectweb/asm/d
-#org/objectweb/asm/AnnotationWriter=org/objectweb/asm/e
-#org/objectweb/asm/Context=org/objectweb/asm/f
-
-java/lang/StringBuilder=java/lang/StringBuffer
-
-
-# field mappings
-
-org/objectweb/asm/AnnotationWriter.cw=a
-org/objectweb/asm/AnnotationWriter.size=b
-org/objectweb/asm/AnnotationWriter.named=c
-org/objectweb/asm/AnnotationWriter.bv=d
-org/objectweb/asm/AnnotationWriter.parent=e
-org/objectweb/asm/AnnotationWriter.offset=f
-org/objectweb/asm/AnnotationWriter.next=g
-org/objectweb/asm/AnnotationWriter.prev=h
-
-org/objectweb/asm/Attribute.next=a
-org/objectweb/asm/Attribute.value=b
-
-org/objectweb/asm/ByteVector.data=a
-org/objectweb/asm/ByteVector.length=b
-
-org/objectweb/asm/ClassReader.items=a
-org/objectweb/asm/ClassReader.strings=c
-org/objectweb/asm/ClassReader.maxStringLength=d
-#org/objectweb/asm/ClassReader.header=e
-
-org/objectweb/asm/Context.attrs=a
-org/objectweb/asm/Context.flags=b
-org/objectweb/asm/Context.buffer=c
-org/objectweb/asm/Context.bootstrapMethods=d
-org/objectweb/asm/Context.access=e
-org/objectweb/asm/Context.name=f
-org/objectweb/asm/Context.desc=g
-org/objectweb/asm/Context.offset=h
-org/objectweb/asm/Context.mode=i
-org/objectweb/asm/Context.localCount=j
-org/objectweb/asm/Context.localDiff=k
-org/objectweb/asm/Context.local=l
-org/objectweb/asm/Context.stackCount=m
-org/objectweb/asm/Context.stack=n
-
-org/objectweb/asm/ClassWriter.TYPE=a
-org/objectweb/asm/ClassWriter.version=b
-org/objectweb/asm/ClassWriter.index=c
-org/objectweb/asm/ClassWriter.pool=d
-org/objectweb/asm/ClassWriter.items=e
-org/objectweb/asm/ClassWriter.threshold=f
-org/objectweb/asm/ClassWriter.key=g
-org/objectweb/asm/ClassWriter.key2=h
-org/objectweb/asm/ClassWriter.key3=i
-org/objectweb/asm/ClassWriter.key4=j
-org/objectweb/asm/ClassWriter.access=k
-org/objectweb/asm/ClassWriter.name=l
-org/objectweb/asm/ClassWriter.signature=m
-org/objectweb/asm/ClassWriter.superName=n
-org/objectweb/asm/ClassWriter.interfaceCount=o
-org/objectweb/asm/ClassWriter.interfaces=p
-org/objectweb/asm/ClassWriter.sourceFile=q
-org/objectweb/asm/ClassWriter.sourceDebug=r
-org/objectweb/asm/ClassWriter.enclosingMethodOwner=s
-org/objectweb/asm/ClassWriter.enclosingMethod=t
-org/objectweb/asm/ClassWriter.anns=u
-org/objectweb/asm/ClassWriter.ianns=v
-org/objectweb/asm/ClassWriter.attrs=w
-org/objectweb/asm/ClassWriter.innerClassesCount=x
-org/objectweb/asm/ClassWriter.innerClasses=y
-org/objectweb/asm/ClassWriter.bootstrapMethodsCount=z
-org/objectweb/asm/ClassWriter.bootstrapMethods=A
-org/objectweb/asm/ClassWriter.firstField=B
-org/objectweb/asm/ClassWriter.lastField=C
-org/objectweb/asm/ClassWriter.firstMethod=D
-org/objectweb/asm/ClassWriter.lastMethod=E
-org/objectweb/asm/ClassWriter.computeMaxs=F
-org/objectweb/asm/ClassWriter.typeCount=G
-org/objectweb/asm/ClassWriter.typeTable=H
-org/objectweb/asm/ClassWriter.thisName=I
-org/objectweb/asm/ClassWriter.computeFrames=J
-org/objectweb/asm/ClassWriter.computeMaxs=K
-org/objectweb/asm/ClassWriter.invalidFrames=L
-org/objectweb/asm/ClassWriter.cr=M
-    
-org/objectweb/asm/Edge.info=a
-org/objectweb/asm/Edge.successor=b
-org/objectweb/asm/Edge.next=c
-
-org/objectweb/asm/Handler.start=a
-org/objectweb/asm/Handler.end=b
-org/objectweb/asm/Handler.handler=c
-org/objectweb/asm/Handler.desc=d
-org/objectweb/asm/Handler.type=e
-org/objectweb/asm/Handler.next=f
-
-org/objectweb/asm/FieldWriter.cw=b
-org/objectweb/asm/FieldWriter.access=c
-org/objectweb/asm/FieldWriter.name=d
-org/objectweb/asm/FieldWriter.desc=e
-org/objectweb/asm/FieldWriter.signature=f
-org/objectweb/asm/FieldWriter.value=g
-org/objectweb/asm/FieldWriter.anns=h
-org/objectweb/asm/FieldWriter.ianns=i
-org/objectweb/asm/FieldWriter.attrs=j
-
-org/objectweb/asm/Item.index=a
-org/objectweb/asm/Item.type=b
-org/objectweb/asm/Item.intVal=c
-org/objectweb/asm/Item.longVal=d
-org/objectweb/asm/Item.strVal1=g
-org/objectweb/asm/Item.strVal2=h
-org/objectweb/asm/Item.strVal3=i
-org/objectweb/asm/Item.hashCode=j
-org/objectweb/asm/Item.next=k
-
-org/objectweb/asm/Label.status=a
-org/objectweb/asm/Label.line=b
-org/objectweb/asm/Label.position=c
-org/objectweb/asm/Label.referenceCount=d
-org/objectweb/asm/Label.srcAndRefPositions=e
-org/objectweb/asm/Label.inputStackTop=f
-org/objectweb/asm/Label.outputStackMax=g
-org/objectweb/asm/Label.frame=h
-org/objectweb/asm/Label.successor=i
-org/objectweb/asm/Label.successors=j
-org/objectweb/asm/Label.next=k
-
-org/objectweb/asm/Frame.SIZE=a
-org/objectweb/asm/Frame.owner=b
-org/objectweb/asm/Frame.inputLocals=c
-org/objectweb/asm/Frame.inputStack=d
-org/objectweb/asm/Frame.outputLocals=e
-org/objectweb/asm/Frame.outputStack=f
-org/objectweb/asm/Frame.outputStackTop=g
-org/objectweb/asm/Frame.initializationCount=h
-org/objectweb/asm/Frame.initializations=i
-
-org/objectweb/asm/MethodWriter.cw=b
-org/objectweb/asm/MethodWriter.access=c
-org/objectweb/asm/MethodWriter.name=d
-org/objectweb/asm/MethodWriter.desc=e
-org/objectweb/asm/MethodWriter.descriptor=f
-org/objectweb/asm/MethodWriter.signature=g
-org/objectweb/asm/MethodWriter.classReaderOffset=h
-org/objectweb/asm/MethodWriter.classReaderLength=i
-org/objectweb/asm/MethodWriter.exceptionCount=j
-org/objectweb/asm/MethodWriter.exceptions=k
-org/objectweb/asm/MethodWriter.annd=l
-org/objectweb/asm/MethodWriter.anns=m
-org/objectweb/asm/MethodWriter.ianns=n
-org/objectweb/asm/MethodWriter.panns=o
-org/objectweb/asm/MethodWriter.ipanns=p
-org/objectweb/asm/MethodWriter.attrs=q
-org/objectweb/asm/MethodWriter.code=r
-org/objectweb/asm/MethodWriter.maxStack=s
-org/objectweb/asm/MethodWriter.maxLocals=t
-org/objectweb/asm/MethodWriter.currentLocals=T
-org/objectweb/asm/MethodWriter.frameCount=u
-org/objectweb/asm/MethodWriter.stackMap=v
-org/objectweb/asm/MethodWriter.previousFrameOffset=w
-org/objectweb/asm/MethodWriter.previousFrame=x
-#org/objectweb/asm/MethodWriter.frameIndex=y
-org/objectweb/asm/MethodWriter.frame=z
-org/objectweb/asm/MethodWriter.handlerCount=A
-org/objectweb/asm/MethodWriter.firstHandler=B
-org/objectweb/asm/MethodWriter.lastHandler=C
-org/objectweb/asm/MethodWriter.localVarCount=D
-org/objectweb/asm/MethodWriter.localVar=E
-org/objectweb/asm/MethodWriter.localVarTypeCount=F
-org/objectweb/asm/MethodWriter.localVarType=G
-org/objectweb/asm/MethodWriter.lineNumberCount=H
-org/objectweb/asm/MethodWriter.lineNumber=I
-org/objectweb/asm/MethodWriter.cattrs=J
-org/objectweb/asm/MethodWriter.resize=K
-org/objectweb/asm/MethodWriter.subroutines=L
-org/objectweb/asm/MethodWriter.compute=M
-org/objectweb/asm/MethodWriter.labels=N
-org/objectweb/asm/MethodWriter.previousBlock=O
-org/objectweb/asm/MethodWriter.currentBlock=P
-org/objectweb/asm/MethodWriter.stackSize=Q
-org/objectweb/asm/MethodWriter.maxStackSize=R
-org/objectweb/asm/MethodWriter.synthetics=S
-
-org/objectweb/asm/Type.sort=a
-org/objectweb/asm/Type.buf=b
-org/objectweb/asm/Type.off=c
-org/objectweb/asm/Type.len=d
-
-org/objectweb/asm/Handle.tag=a
-org/objectweb/asm/Handle.owner=b
-org/objectweb/asm/Handle.name=c
-org/objectweb/asm/Handle.desc=d
-
-org/objectweb/asm/signature/SignatureReader.signature=a
-
-org/objectweb/asm/signature/SignatureWriter.buf=a
-org/objectweb/asm/signature/SignatureWriter.hasFormals=b
-org/objectweb/asm/signature/SignatureWriter.hasParameters=c
-org/objectweb/asm/signature/SignatureWriter.argumentStack=d
-
-# method mappings
-
-org/objectweb/asm/AnnotationWriter.getSize()I=a
-org/objectweb/asm/AnnotationWriter.put([Lorg/objectweb/asm/AnnotationWriter;ILorg/objectweb/asm/ByteVector;)V=a
-org/objectweb/asm/AnnotationWriter.put(Lorg/objectweb/asm/ByteVector;)V=a
-
-org/objectweb/asm/Attribute.getCount()I=a
-org/objectweb/asm/Attribute.getSize(Lorg/objectweb/asm/ClassWriter;[BIII)I=a
-org/objectweb/asm/Attribute.put(Lorg/objectweb/asm/ClassWriter;[BIIILorg/objectweb/asm/ByteVector;)V=a
-
-org/objectweb/asm/ByteVector.enlarge(I)V=a
-org/objectweb/asm/ByteVector.put11(II)Lorg/objectweb/asm/ByteVector;=a
-org/objectweb/asm/ByteVector.put12(II)Lorg/objectweb/asm/ByteVector;=b
-
-org/objectweb/asm/ClassReader.copyPool(Lorg/objectweb/asm/ClassWriter;)V=a
-org/objectweb/asm/ClassReader.copyBootstrapMethods(Lorg/objectweb/asm/ClassWriter;[Lorg/objectweb/asm/Item;[C)V=a
-org/objectweb/asm/ClassReader.readField(Lorg/objectweb/asm/ClassVisitor;Lorg/objectweb/asm/Context;I)I=a
-org/objectweb/asm/ClassReader.readMethod(Lorg/objectweb/asm/ClassVisitor;Lorg/objectweb/asm/Context;I)I=b
-org/objectweb/asm/ClassReader.readCode(Lorg/objectweb/asm/MethodVisitor;Lorg/objectweb/asm/Context;I)V=a
-org/objectweb/asm/ClassReader.readAnnotationValue(I[CLjava/lang/String;Lorg/objectweb/asm/AnnotationVisitor;)I=a
-org/objectweb/asm/ClassReader.readAnnotationValues(I[CZLorg/objectweb/asm/AnnotationVisitor;)I=a
-org/objectweb/asm/ClassReader.getAttributes()I=a
-org/objectweb/asm/ClassReader.readAttribute([Lorg/objectweb/asm/Attribute;Ljava/lang/String;II[CI[Lorg/objectweb/asm/Label;)Lorg/objectweb/asm/Attribute;=a
-org/objectweb/asm/ClassReader.readClass(Ljava/io/InputStream;Z)[B=a
-org/objectweb/asm/ClassReader.readParameterAnnotations(ILjava/lang/String;[CZLorg/objectweb/asm/MethodVisitor;)V=a
-org/objectweb/asm/ClassReader.readUTF(II[C)Ljava/lang/String;=a
-org/objectweb/asm/ClassReader.getImplicitFrame(Lorg/objectweb/asm/Context;)V=a
-org/objectweb/asm/ClassReader.readFrame(IZZ[Lorg/objectweb/asm/Label;Lorg/objectweb/asm/Context;)I=a
-org/objectweb/asm/ClassReader.readFrameType([Ljava/lang/Object;II[C[Lorg/objectweb/asm/Label;)I=a
-
-org/objectweb/asm/ClassWriter.get(Lorg/objectweb/asm/Item;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newClassItem(Ljava/lang/String;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newConstItem(Ljava/lang/Object;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newDouble(D)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newFloat(F)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newInteger(I)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newLong(J)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newMethodItem(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newString(Ljava/lang/String;)Lorg/objectweb/asm/Item;=b
-org/objectweb/asm/ClassWriter.put122(III)V=a
-org/objectweb/asm/ClassWriter.put112(III)V=b
-org/objectweb/asm/ClassWriter.put(Lorg/objectweb/asm/Item;)V=b
-org/objectweb/asm/ClassWriter.newFieldItem(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.addType(Ljava/lang/String;)I=c
-org/objectweb/asm/ClassWriter.addUninitializedType(Ljava/lang/String;I)I=a
-org/objectweb/asm/ClassWriter.addType(Lorg/objectweb/asm/Item;)Lorg/objectweb/asm/Item;=c
-org/objectweb/asm/ClassWriter.getMergedType(II)I=a
-org/objectweb/asm/ClassWriter.newNameTypeItem(Ljava/lang/String;Ljava/lang/String;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newMethodTypeItem(Ljava/lang/String;)Lorg/objectweb/asm/Item;=c
-org/objectweb/asm/ClassWriter.newHandleItem(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newInvokeDynamicItem(Ljava/lang/String;Ljava/lang/String;Lorg/objectweb/asm/Handle;[Ljava/lang/Object;)Lorg/objectweb/asm/Item;=a
-
-org/objectweb/asm/FieldWriter.getSize()I=a
-org/objectweb/asm/FieldWriter.put(Lorg/objectweb/asm/ByteVector;)V=a
-
-org/objectweb/asm/Item.isEqualTo(Lorg/objectweb/asm/Item;)Z=a
-org/objectweb/asm/Item.set(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=a
-org/objectweb/asm/Item.set(D)V=a
-org/objectweb/asm/Item.set(F)V=a
-org/objectweb/asm/Item.set(I)V=a
-org/objectweb/asm/Item.set(J)V=a
-org/objectweb/asm/Item.set(Ljava/lang/String;Ljava/lang/String;I)V=a
-org/objectweb/asm/Item.set(II)V=a
-
-org/objectweb/asm/Label.addReference(II)V=a
-org/objectweb/asm/Label.put(Lorg/objectweb/asm/MethodWriter;Lorg/objectweb/asm/ByteVector;IZ)V=a
-org/objectweb/asm/Label.resolve(Lorg/objectweb/asm/MethodWriter;I[B)Z=a
-org/objectweb/asm/Label.getFirst()Lorg/objectweb/asm/Label;=a
-org/objectweb/asm/Label.inSubroutine(J)Z=a
-org/objectweb/asm/Label.inSameSubroutine(Lorg/objectweb/asm/Label;)Z=a
-org/objectweb/asm/Label.addToSubroutine(JI)V=a
-org/objectweb/asm/Label.visitSubroutine(Lorg/objectweb/asm/Label;JI)V=b
-
-org/objectweb/asm/Frame.get(I)I=a
-org/objectweb/asm/Frame.set(II)V=a
-org/objectweb/asm/Frame.push(I)V=b
-org/objectweb/asm/Frame.push(Lorg/objectweb/asm/ClassWriter;Ljava/lang/String;)V=a
-org/objectweb/asm/Frame.type(Lorg/objectweb/asm/ClassWriter;Ljava/lang/String;)I=b
-org/objectweb/asm/Frame.pop()I=a
-org/objectweb/asm/Frame.pop(Ljava/lang/String;)V=a
-org/objectweb/asm/Frame.pop(I)V=c
-org/objectweb/asm/Frame.init(I)V=d
-org/objectweb/asm/Frame.init(Lorg/objectweb/asm/ClassWriter;I)I=a
-org/objectweb/asm/Frame.initInputFrame(Lorg/objectweb/asm/ClassWriter;I[Lorg/objectweb/asm/Type;I)V=a
-org/objectweb/asm/Frame.execute(IILorg/objectweb/asm/ClassWriter;Lorg/objectweb/asm/Item;)V=a
-org/objectweb/asm/Frame.merge(Lorg/objectweb/asm/ClassWriter;Lorg/objectweb/asm/Frame;I)Z=a
-org/objectweb/asm/Frame.merge(Lorg/objectweb/asm/ClassWriter;I[II)Z=a
-
-org/objectweb/asm/Handler.remove(Lorg/objectweb/asm/Handler;Lorg/objectweb/asm/Label;Lorg/objectweb/asm/Label;)Lorg/objectweb/asm/Handler;=a
-
-org/objectweb/asm/MethodWriter.visitSwitchInsn(Lorg/objectweb/asm/Label;[Lorg/objectweb/asm/Label;)V=a
-org/objectweb/asm/MethodWriter.addSuccessor(ILorg/objectweb/asm/Label;)V=a
-org/objectweb/asm/MethodWriter.getNewOffset([I[III)I=a
-org/objectweb/asm/MethodWriter.getSize()I=a
-org/objectweb/asm/MethodWriter.put(Lorg/objectweb/asm/ByteVector;)V=a
-org/objectweb/asm/MethodWriter.readInt([BI)I=a
-org/objectweb/asm/MethodWriter.readShort([BI)S=b
-org/objectweb/asm/MethodWriter.readUnsignedShort([BI)I=c
-org/objectweb/asm/MethodWriter.writeShort([BII)V=a
-org/objectweb/asm/MethodWriter.visitFrame(Lorg/objectweb/asm/Frame;)V=b
-org/objectweb/asm/MethodWriter.visitImplicitFirstFrame()V=f
-org/objectweb/asm/MethodWriter.startFrame(III)I=a
-org/objectweb/asm/MethodWriter.endFrame()V=b
-org/objectweb/asm/MethodWriter.writeFrame()V=c
-org/objectweb/asm/MethodWriter.resizeInstructions()V=d
-org/objectweb/asm/MethodWriter.noSuccessor()V=e
-org/objectweb/asm/MethodWriter.writeFrameTypes(II)V=a
-org/objectweb/asm/MethodWriter.writeFrameType(Ljava/lang/Object;)V=a
-org/objectweb/asm/MethodWriter.getNewOffset([I[ILorg/objectweb/asm/Label;)V=a
-
-org/objectweb/asm/Type.getType([CI)Lorg/objectweb/asm/Type;=a
-org/objectweb/asm/Type.getDescriptor(Ljava/lang/StringBuffer;)V=a
-org/objectweb/asm/Type.getDescriptor(Ljava/lang/StringBuffer;Ljava/lang/Class;)V=a
-
-org/objectweb/asm/signature/SignatureReader.parseType(Ljava/lang/String;ILorg/objectweb/asm/signature/SignatureVisitor;)I=a
-
-org/objectweb/asm/signature/SignatureWriter.endFormals()V=a
-org/objectweb/asm/signature/SignatureWriter.endArguments()V=b
-     
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/package.html b/asm4/src/org/objectweb/asm/package.html
deleted file mode 100644
index 2d4a765..0000000
--- a/asm4/src/org/objectweb/asm/package.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-Provides a small and fast bytecode manipulation framework.
-
-<p>
-The <a href="http://www.objectweb.org/asm">ASM</a> framework is organized
-around the {@link org.objectweb.asm.ClassVisitor ClassVisitor},
-{@link org.objectweb.asm.FieldVisitor FieldVisitor},
-{@link org.objectweb.asm.MethodVisitor MethodVisitor} and
-{@link org.objectweb.asm.AnnotationVisitor AnnotationVisitor} abstract classes,
-which allow one to visit the fields, methods and annotations of a class,
-including the bytecode instructions of each method.
-
-<p>
-In addition to these main abstract classes, ASM provides a {@link
-org.objectweb.asm.ClassReader ClassReader} class, that can parse an
-existing class and make a given visitor visit it. ASM also provides
-a {@link org.objectweb.asm.ClassWriter ClassWriter} class, which is
-a visitor that generates Java class files.
-
-<p>
-In order to generate a class from scratch, only the {@link
-org.objectweb.asm.ClassWriter ClassWriter} class is necessary. Indeed,
-in order to generate a class, one must just call its visit<i>Xxx</i>
-methods with the appropriate arguments to generate the desired fields
-and methods. See the "helloworld" example in the ASM distribution for
-more details about class generation.
-
-<p>
-In order to modify existing classes, one must use a {@link
-org.objectweb.asm.ClassReader ClassReader} class to analyze
-the original class, a class modifier, and a {@link org.objectweb.asm.ClassWriter
-ClassWriter} to construct the modified class. The class modifier
-is just a {@link org.objectweb.asm.ClassVisitor ClassVisitor}
-that delegates most of the work to another {@link org.objectweb.asm.ClassVisitor
-ClassVisitor}, but that sometimes changes some parameter values,
-or call additional methods, in order to implement the desired
-modification process. In order to make it easier to implement such
-class modifiers, the {@link org.objectweb.asm.ClassVisitor
-ClassVisitor} and {@link org.objectweb.asm.MethodVisitor MethodVisitor}
-classes delegate by default all the method calls they receive to an
-optional visitor. See the "adapt" example in the ASM
-distribution for more details about class modification.
-
-<p>
-The size of the core ASM library, <tt>asm.jar</tt>, is only 45KB, which is much
-smaller than the size of the
-<a href="http://jakarta.apache.org/bcel">BCEL</a> library (504KB), and than the
-size of the
-<a href="http://serp.sourceforge.net">SERP</a> library (150KB). ASM is also
-much faster than these tools. Indeed the overhead of a load time class
-transformation process is of the order of 60% with ASM, 700% or more with BCEL,
-and 1100% or more with SERP (see the <tt>test/perf</tt> directory in the ASM
-distribution)!
-
-@since ASM 1.3
-</body>
-</html>
diff --git a/asm4/src/org/objectweb/asm/signature/SignatureReader.java b/asm4/src/org/objectweb/asm/signature/SignatureReader.java
deleted file mode 100644
index 1083b3d..0000000
--- a/asm4/src/org/objectweb/asm/signature/SignatureReader.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.signature;
-
-/**
- * A type signature parser to make a signature visitor visit an existing
- * signature.
- * 
- * @author Thomas Hallgren
- * @author Eric Bruneton
- */
-public class SignatureReader {
-
-    /**
-     * The signature to be read.
-     */
-    private final String signature;
-
-    /**
-     * Constructs a {@link SignatureReader} for the given signature.
-     * 
-     * @param signature
-     *            A <i>ClassSignature</i>, <i>MethodTypeSignature</i>, or
-     *            <i>FieldTypeSignature</i>.
-     */
-    public SignatureReader(final String signature) {
-        this.signature = signature;
-    }
-
-    /**
-     * Makes the given visitor visit the signature of this
-     * {@link SignatureReader}. This signature is the one specified in the
-     * constructor (see {@link #SignatureReader(String) SignatureReader}). This
-     * method is intended to be called on a {@link SignatureReader} that was
-     * created using a <i>ClassSignature</i> (such as the <code>signature</code>
-     * parameter of the {@link org.objectweb.asm.ClassVisitor#visit
-     * ClassVisitor.visit} method) or a <i>MethodTypeSignature</i> (such as the
-     * <code>signature</code> parameter of the
-     * {@link org.objectweb.asm.ClassVisitor#visitMethod
-     * ClassVisitor.visitMethod} method).
-     * 
-     * @param v
-     *            the visitor that must visit this signature.
-     */
-    public void accept(final SignatureVisitor v) {
-        String signature = this.signature;
-        int len = signature.length();
-        int pos;
-        char c;
-
-        if (signature.charAt(0) == '<') {
-            pos = 2;
-            do {
-                int end = signature.indexOf(':', pos);
-                v.visitFormalTypeParameter(signature.substring(pos - 1, end));
-                pos = end + 1;
-
-                c = signature.charAt(pos);
-                if (c == 'L' || c == '[' || c == 'T') {
-                    pos = parseType(signature, pos, v.visitClassBound());
-                }
-
-                while ((c = signature.charAt(pos++)) == ':') {
-                    pos = parseType(signature, pos, v.visitInterfaceBound());
-                }
-            } while (c != '>');
-        } else {
-            pos = 0;
-        }
-
-        if (signature.charAt(pos) == '(') {
-            pos++;
-            while (signature.charAt(pos) != ')') {
-                pos = parseType(signature, pos, v.visitParameterType());
-            }
-            pos = parseType(signature, pos + 1, v.visitReturnType());
-            while (pos < len) {
-                pos = parseType(signature, pos + 1, v.visitExceptionType());
-            }
-        } else {
-            pos = parseType(signature, pos, v.visitSuperclass());
-            while (pos < len) {
-                pos = parseType(signature, pos, v.visitInterface());
-            }
-        }
-    }
-
-    /**
-     * Makes the given visitor visit the signature of this
-     * {@link SignatureReader}. This signature is the one specified in the
-     * constructor (see {@link #SignatureReader(String) SignatureReader}). This
-     * method is intended to be called on a {@link SignatureReader} that was
-     * created using a <i>FieldTypeSignature</i>, such as the
-     * <code>signature</code> parameter of the
-     * {@link org.objectweb.asm.ClassVisitor#visitField ClassVisitor.visitField}
-     * or {@link org.objectweb.asm.MethodVisitor#visitLocalVariable
-     * MethodVisitor.visitLocalVariable} methods.
-     * 
-     * @param v
-     *            the visitor that must visit this signature.
-     */
-    public void acceptType(final SignatureVisitor v) {
-        parseType(this.signature, 0, v);
-    }
-
-    /**
-     * Parses a field type signature and makes the given visitor visit it.
-     * 
-     * @param signature
-     *            a string containing the signature that must be parsed.
-     * @param pos
-     *            index of the first character of the signature to parsed.
-     * @param v
-     *            the visitor that must visit this signature.
-     * @return the index of the first character after the parsed signature.
-     */
-    private static int parseType(final String signature, int pos,
-            final SignatureVisitor v) {
-        char c;
-        int start, end;
-        boolean visited, inner;
-        String name;
-
-        switch (c = signature.charAt(pos++)) {
-        case 'Z':
-        case 'C':
-        case 'B':
-        case 'S':
-        case 'I':
-        case 'F':
-        case 'J':
-        case 'D':
-        case 'V':
-            v.visitBaseType(c);
-            return pos;
-
-        case '[':
-            return parseType(signature, pos, v.visitArrayType());
-
-        case 'T':
-            end = signature.indexOf(';', pos);
-            v.visitTypeVariable(signature.substring(pos, end));
-            return end + 1;
-
-        default: // case 'L':
-            start = pos;
-            visited = false;
-            inner = false;
-            for (;;) {
-                switch (c = signature.charAt(pos++)) {
-                case '.':
-                case ';':
-                    if (!visited) {
-                        name = signature.substring(start, pos - 1);
-                        if (inner) {
-                            v.visitInnerClassType(name);
-                        } else {
-                            v.visitClassType(name);
-                        }
-                    }
-                    if (c == ';') {
-                        v.visitEnd();
-                        return pos;
-                    }
-                    start = pos;
-                    visited = false;
-                    inner = true;
-                    break;
-
-                case '<':
-                    name = signature.substring(start, pos - 1);
-                    if (inner) {
-                        v.visitInnerClassType(name);
-                    } else {
-                        v.visitClassType(name);
-                    }
-                    visited = true;
-                    top: for (;;) {
-                        switch (c = signature.charAt(pos)) {
-                        case '>':
-                            break top;
-                        case '*':
-                            ++pos;
-                            v.visitTypeArgument();
-                            break;
-                        case '+':
-                        case '-':
-                            pos = parseType(signature, pos + 1,
-                                    v.visitTypeArgument(c));
-                            break;
-                        default:
-                            pos = parseType(signature, pos,
-                                    v.visitTypeArgument('='));
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/signature/SignatureVisitor.java b/asm4/src/org/objectweb/asm/signature/SignatureVisitor.java
deleted file mode 100644
index c0819ed..0000000
--- a/asm4/src/org/objectweb/asm/signature/SignatureVisitor.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.signature;
-
-import org.objectweb.asm.Opcodes;
-
-/**
- * A visitor to visit a generic signature. The methods of this interface must be
- * called in one of the three following orders (the last one is the only valid
- * order for a {@link SignatureVisitor} that is returned by a method of this
- * interface):
- * <ul>
- * <li><i>ClassSignature</i> = ( <tt>visitFormalTypeParameter</tt>
- * <tt>visitClassBound</tt>? <tt>visitInterfaceBound</tt>* )* (
- * <tt>visitSuperClass</tt> <tt>visitInterface</tt>* )</li>
- * <li><i>MethodSignature</i> = ( <tt>visitFormalTypeParameter</tt>
- * <tt>visitClassBound</tt>? <tt>visitInterfaceBound</tt>* )* (
- * <tt>visitParameterType</tt>* <tt>visitReturnType</tt>
- * <tt>visitExceptionType</tt>* )</li>
- * <li><i>TypeSignature</i> = <tt>visitBaseType</tt> |
- * <tt>visitTypeVariable</tt> | <tt>visitArrayType</tt> | (
- * <tt>visitClassType</tt> <tt>visitTypeArgument</tt>* (
- * <tt>visitInnerClassType</tt> <tt>visitTypeArgument</tt>* )* <tt>visitEnd</tt>
- * ) )</li>
- * </ul>
- * 
- * @author Thomas Hallgren
- * @author Eric Bruneton
- */
-public abstract class SignatureVisitor {
-
-    /**
-     * Wildcard for an "extends" type argument.
-     */
-    public final static char EXTENDS = '+';
-
-    /**
-     * Wildcard for a "super" type argument.
-     */
-    public final static char SUPER = '-';
-
-    /**
-     * Wildcard for a normal type argument.
-     */
-    public final static char INSTANCEOF = '=';
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * Constructs a new {@link SignatureVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public SignatureVisitor(final int api) {
-        this.api = api;
-    }
-
-    /**
-     * Visits a formal type parameter.
-     * 
-     * @param name
-     *            the name of the formal parameter.
-     */
-    public void visitFormalTypeParameter(String name) {
-    }
-
-    /**
-     * Visits the class bound of the last visited formal type parameter.
-     * 
-     * @return a non null visitor to visit the signature of the class bound.
-     */
-    public SignatureVisitor visitClassBound() {
-        return this;
-    }
-
-    /**
-     * Visits an interface bound of the last visited formal type parameter.
-     * 
-     * @return a non null visitor to visit the signature of the interface bound.
-     */
-    public SignatureVisitor visitInterfaceBound() {
-        return this;
-    }
-
-    /**
-     * Visits the type of the super class.
-     * 
-     * @return a non null visitor to visit the signature of the super class
-     *         type.
-     */
-    public SignatureVisitor visitSuperclass() {
-        return this;
-    }
-
-    /**
-     * Visits the type of an interface implemented by the class.
-     * 
-     * @return a non null visitor to visit the signature of the interface type.
-     */
-    public SignatureVisitor visitInterface() {
-        return this;
-    }
-
-    /**
-     * Visits the type of a method parameter.
-     * 
-     * @return a non null visitor to visit the signature of the parameter type.
-     */
-    public SignatureVisitor visitParameterType() {
-        return this;
-    }
-
-    /**
-     * Visits the return type of the method.
-     * 
-     * @return a non null visitor to visit the signature of the return type.
-     */
-    public SignatureVisitor visitReturnType() {
-        return this;
-    }
-
-    /**
-     * Visits the type of a method exception.
-     * 
-     * @return a non null visitor to visit the signature of the exception type.
-     */
-    public SignatureVisitor visitExceptionType() {
-        return this;
-    }
-
-    /**
-     * Visits a signature corresponding to a primitive type.
-     * 
-     * @param descriptor
-     *            the descriptor of the primitive type, or 'V' for <tt>void</tt>
-     *            .
-     */
-    public void visitBaseType(char descriptor) {
-    }
-
-    /**
-     * Visits a signature corresponding to a type variable.
-     * 
-     * @param name
-     *            the name of the type variable.
-     */
-    public void visitTypeVariable(String name) {
-    }
-
-    /**
-     * Visits a signature corresponding to an array type.
-     * 
-     * @return a non null visitor to visit the signature of the array element
-     *         type.
-     */
-    public SignatureVisitor visitArrayType() {
-        return this;
-    }
-
-    /**
-     * Starts the visit of a signature corresponding to a class or interface
-     * type.
-     * 
-     * @param name
-     *            the internal name of the class or interface.
-     */
-    public void visitClassType(String name) {
-    }
-
-    /**
-     * Visits an inner class.
-     * 
-     * @param name
-     *            the local name of the inner class in its enclosing class.
-     */
-    public void visitInnerClassType(String name) {
-    }
-
-    /**
-     * Visits an unbounded type argument of the last visited class or inner
-     * class type.
-     */
-    public void visitTypeArgument() {
-    }
-
-    /**
-     * Visits a type argument of the last visited class or inner class type.
-     * 
-     * @param wildcard
-     *            '+', '-' or '='.
-     * @return a non null visitor to visit the signature of the type argument.
-     */
-    public SignatureVisitor visitTypeArgument(char wildcard) {
-        return this;
-    }
-
-    /**
-     * Ends the visit of a signature corresponding to a class or interface type.
-     */
-    public void visitEnd() {
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/signature/SignatureWriter.java b/asm4/src/org/objectweb/asm/signature/SignatureWriter.java
deleted file mode 100644
index 361b213..0000000
--- a/asm4/src/org/objectweb/asm/signature/SignatureWriter.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.signature;
-
-import org.objectweb.asm.Opcodes;
-
-/**
- * A signature visitor that generates signatures in string format.
- * 
- * @author Thomas Hallgren
- * @author Eric Bruneton
- */
-public class SignatureWriter extends SignatureVisitor {
-
-    /**
-     * Buffer used to construct the signature.
-     */
-    private final StringBuffer buf = new StringBuffer();
-
-    /**
-     * Indicates if the signature contains formal type parameters.
-     */
-    private boolean hasFormals;
-
-    /**
-     * Indicates if the signature contains method parameter types.
-     */
-    private boolean hasParameters;
-
-    /**
-     * Stack used to keep track of class types that have arguments. Each element
-     * of this stack is a boolean encoded in one bit. The top of the stack is
-     * the lowest order bit. Pushing false = *2, pushing true = *2+1, popping =
-     * /2.
-     */
-    private int argumentStack;
-
-    /**
-     * Constructs a new {@link SignatureWriter} object.
-     */
-    public SignatureWriter() {
-        super(Opcodes.ASM4);
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the SignatureVisitor interface
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visitFormalTypeParameter(final String name) {
-        if (!hasFormals) {
-            hasFormals = true;
-            buf.append('<');
-        }
-        buf.append(name);
-        buf.append(':');
-    }
-
-    @Override
-    public SignatureVisitor visitClassBound() {
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitInterfaceBound() {
-        buf.append(':');
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitSuperclass() {
-        endFormals();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitInterface() {
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitParameterType() {
-        endFormals();
-        if (!hasParameters) {
-            hasParameters = true;
-            buf.append('(');
-        }
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitReturnType() {
-        endFormals();
-        if (!hasParameters) {
-            buf.append('(');
-        }
-        buf.append(')');
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitExceptionType() {
-        buf.append('^');
-        return this;
-    }
-
-    @Override
-    public void visitBaseType(final char descriptor) {
-        buf.append(descriptor);
-    }
-
-    @Override
-    public void visitTypeVariable(final String name) {
-        buf.append('T');
-        buf.append(name);
-        buf.append(';');
-    }
-
-    @Override
-    public SignatureVisitor visitArrayType() {
-        buf.append('[');
-        return this;
-    }
-
-    @Override
-    public void visitClassType(final String name) {
-        buf.append('L');
-        buf.append(name);
-        argumentStack *= 2;
-    }
-
-    @Override
-    public void visitInnerClassType(final String name) {
-        endArguments();
-        buf.append('.');
-        buf.append(name);
-        argumentStack *= 2;
-    }
-
-    @Override
-    public void visitTypeArgument() {
-        if (argumentStack % 2 == 0) {
-            ++argumentStack;
-            buf.append('<');
-        }
-        buf.append('*');
-    }
-
-    @Override
-    public SignatureVisitor visitTypeArgument(final char wildcard) {
-        if (argumentStack % 2 == 0) {
-            ++argumentStack;
-            buf.append('<');
-        }
-        if (wildcard != '=') {
-            buf.append(wildcard);
-        }
-        return this;
-    }
-
-    @Override
-    public void visitEnd() {
-        endArguments();
-        buf.append(';');
-    }
-
-    /**
-     * Returns the signature that was built by this signature writer.
-     * 
-     * @return the signature that was built by this signature writer.
-     */
-    @Override
-    public String toString() {
-        return buf.toString();
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Ends the formal type parameters section of the signature.
-     */
-    private void endFormals() {
-        if (hasFormals) {
-            hasFormals = false;
-            buf.append('>');
-        }
-    }
-
-    /**
-     * Ends the type arguments of a class or inner class type.
-     */
-    private void endArguments() {
-        if (argumentStack % 2 != 0) {
-            buf.append('>');
-        }
-        argumentStack /= 2;
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/signature/package.html b/asm4/src/org/objectweb/asm/signature/package.html
deleted file mode 100644
index 0c07d12..0000000
--- a/asm4/src/org/objectweb/asm/signature/package.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-Provides support for type signatures.
-
-@since ASM 2.0
-</body>
-</html>
diff --git a/asm4/src/org/objectweb/asm/tree/AbstractInsnNode.java b/asm4/src/org/objectweb/asm/tree/AbstractInsnNode.java
deleted file mode 100644
index 1637210..0000000
--- a/asm4/src/org/objectweb/asm/tree/AbstractInsnNode.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a bytecode instruction. <i>An instruction can appear
- * at most once in at most one {@link InsnList} at a time</i>.
- * 
- * @author Eric Bruneton
- */
-public abstract class AbstractInsnNode {
-
-    /**
-     * The type of {@link InsnNode} instructions.
-     */
-    public static final int INSN = 0;
-
-    /**
-     * The type of {@link IntInsnNode} instructions.
-     */
-    public static final int INT_INSN = 1;
-
-    /**
-     * The type of {@link VarInsnNode} instructions.
-     */
-    public static final int VAR_INSN = 2;
-
-    /**
-     * The type of {@link TypeInsnNode} instructions.
-     */
-    public static final int TYPE_INSN = 3;
-
-    /**
-     * The type of {@link FieldInsnNode} instructions.
-     */
-    public static final int FIELD_INSN = 4;
-
-    /**
-     * The type of {@link MethodInsnNode} instructions.
-     */
-    public static final int METHOD_INSN = 5;
-
-    /**
-     * The type of {@link InvokeDynamicInsnNode} instructions.
-     */
-    public static final int INVOKE_DYNAMIC_INSN = 6;
-
-    /**
-     * The type of {@link JumpInsnNode} instructions.
-     */
-    public static final int JUMP_INSN = 7;
-
-    /**
-     * The type of {@link LabelNode} "instructions".
-     */
-    public static final int LABEL = 8;
-
-    /**
-     * The type of {@link LdcInsnNode} instructions.
-     */
-    public static final int LDC_INSN = 9;
-
-    /**
-     * The type of {@link IincInsnNode} instructions.
-     */
-    public static final int IINC_INSN = 10;
-
-    /**
-     * The type of {@link TableSwitchInsnNode} instructions.
-     */
-    public static final int TABLESWITCH_INSN = 11;
-
-    /**
-     * The type of {@link LookupSwitchInsnNode} instructions.
-     */
-    public static final int LOOKUPSWITCH_INSN = 12;
-
-    /**
-     * The type of {@link MultiANewArrayInsnNode} instructions.
-     */
-    public static final int MULTIANEWARRAY_INSN = 13;
-
-    /**
-     * The type of {@link FrameNode} "instructions".
-     */
-    public static final int FRAME = 14;
-
-    /**
-     * The type of {@link LineNumberNode} "instructions".
-     */
-    public static final int LINE = 15;
-
-    /**
-     * The opcode of this instruction.
-     */
-    protected int opcode;
-
-    /**
-     * Previous instruction in the list to which this instruction belongs.
-     */
-    AbstractInsnNode prev;
-
-    /**
-     * Next instruction in the list to which this instruction belongs.
-     */
-    AbstractInsnNode next;
-
-    /**
-     * Index of this instruction in the list to which it belongs. The value of
-     * this field is correct only when {@link InsnList#cache} is not null. A
-     * value of -1 indicates that this instruction does not belong to any
-     * {@link InsnList}.
-     */
-    int index;
-
-    /**
-     * Constructs a new {@link AbstractInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the instruction to be constructed.
-     */
-    protected AbstractInsnNode(final int opcode) {
-        this.opcode = opcode;
-        this.index = -1;
-    }
-
-    /**
-     * Returns the opcode of this instruction.
-     * 
-     * @return the opcode of this instruction.
-     */
-    public int getOpcode() {
-        return opcode;
-    }
-
-    /**
-     * Returns the type of this instruction.
-     * 
-     * @return the type of this instruction, i.e. one the constants defined in
-     *         this class.
-     */
-    public abstract int getType();
-
-    /**
-     * Returns the previous instruction in the list to which this instruction
-     * belongs, if any.
-     * 
-     * @return the previous instruction in the list to which this instruction
-     *         belongs, if any. May be <tt>null</tt>.
-     */
-    public AbstractInsnNode getPrevious() {
-        return prev;
-    }
-
-    /**
-     * Returns the next instruction in the list to which this instruction
-     * belongs, if any.
-     * 
-     * @return the next instruction in the list to which this instruction
-     *         belongs, if any. May be <tt>null</tt>.
-     */
-    public AbstractInsnNode getNext() {
-        return next;
-    }
-
-    /**
-     * Makes the given code visitor visit this instruction.
-     * 
-     * @param cv
-     *            a code visitor.
-     */
-    public abstract void accept(final MethodVisitor cv);
-
-    /**
-     * Returns a copy of this instruction.
-     * 
-     * @param labels
-     *            a map from LabelNodes to cloned LabelNodes.
-     * @return a copy of this instruction. The returned instruction does not
-     *         belong to any {@link InsnList}.
-     */
-    public abstract AbstractInsnNode clone(
-            final Map<LabelNode, LabelNode> labels);
-
-    /**
-     * Returns the clone of the given label.
-     * 
-     * @param label
-     *            a label.
-     * @param map
-     *            a map from LabelNodes to cloned LabelNodes.
-     * @return the clone of the given label.
-     */
-    static LabelNode clone(final LabelNode label,
-            final Map<LabelNode, LabelNode> map) {
-        return map.get(label);
-    }
-
-    /**
-     * Returns the clones of the given labels.
-     * 
-     * @param labels
-     *            a list of labels.
-     * @param map
-     *            a map from LabelNodes to cloned LabelNodes.
-     * @return the clones of the given labels.
-     */
-    static LabelNode[] clone(final List<LabelNode> labels,
-            final Map<LabelNode, LabelNode> map) {
-        LabelNode[] clones = new LabelNode[labels.size()];
-        for (int i = 0; i < clones.length; ++i) {
-            clones[i] = map.get(labels.get(i));
-        }
-        return clones;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/AnnotationNode.java b/asm4/src/org/objectweb/asm/tree/AnnotationNode.java
deleted file mode 100644
index 719884c..0000000
--- a/asm4/src/org/objectweb/asm/tree/AnnotationNode.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents an annotationn.
- * 
- * @author Eric Bruneton
- */
-public class AnnotationNode extends AnnotationVisitor {
-
-    /**
-     * The class descriptor of the annotation class.
-     */
-    public String desc;
-
-    /**
-     * The name value pairs of this annotation. Each name value pair is stored
-     * as two consecutive elements in the list. The name is a {@link String},
-     * and the value may be a {@link Byte}, {@link Boolean}, {@link Character},
-     * {@link Short}, {@link Integer}, {@link Long}, {@link Float},
-     * {@link Double}, {@link String} or {@link org.objectweb.asm.Type}, or an
-     * two elements String array (for enumeration values), a
-     * {@link AnnotationNode}, or a {@link List} of values of one of the
-     * preceding types. The list may be <tt>null</tt> if there is no name value
-     * pair.
-     */
-    public List<Object> values;
-
-    /**
-     * Constructs a new {@link AnnotationNode}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #AnnotationNode(int, String)} version.
-     * 
-     * @param desc
-     *            the class descriptor of the annotation class.
-     */
-    public AnnotationNode(final String desc) {
-        this(Opcodes.ASM4, desc);
-    }
-
-    /**
-     * Constructs a new {@link AnnotationNode}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param desc
-     *            the class descriptor of the annotation class.
-     */
-    public AnnotationNode(final int api, final String desc) {
-        super(api);
-        this.desc = desc;
-    }
-
-    /**
-     * Constructs a new {@link AnnotationNode} to visit an array value.
-     * 
-     * @param values
-     *            where the visited values must be stored.
-     */
-    AnnotationNode(final List<Object> values) {
-        super(Opcodes.ASM4);
-        this.values = values;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the AnnotationVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final String name, final Object value) {
-        if (values == null) {
-            values = new ArrayList<Object>(this.desc != null ? 2 : 1);
-        }
-        if (this.desc != null) {
-            values.add(name);
-        }
-        values.add(value);
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        if (values == null) {
-            values = new ArrayList<Object>(this.desc != null ? 2 : 1);
-        }
-        if (this.desc != null) {
-            values.add(name);
-        }
-        values.add(new String[] { desc, value });
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        if (values == null) {
-            values = new ArrayList<Object>(this.desc != null ? 2 : 1);
-        }
-        if (this.desc != null) {
-            values.add(name);
-        }
-        AnnotationNode annotation = new AnnotationNode(desc);
-        values.add(annotation);
-        return annotation;
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        if (values == null) {
-            values = new ArrayList<Object>(this.desc != null ? 2 : 1);
-        }
-        if (this.desc != null) {
-            values.add(name);
-        }
-        List<Object> array = new ArrayList<Object>();
-        values.add(array);
-        return new AnnotationNode(array);
-    }
-
-    @Override
-    public void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Accept methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Checks that this annotation node is compatible with the given ASM API
-     * version. This methods checks that this node, and all its nodes
-     * recursively, do not contain elements that were introduced in more recent
-     * versions of the ASM API than the given version.
-     * 
-     * @param api
-     *            an ASM API version. Must be one of {@link Opcodes#ASM4}.
-     */
-    public void check(final int api) {
-        // nothing to do
-    }
-
-    /**
-     * Makes the given visitor visit this annotation.
-     * 
-     * @param av
-     *            an annotation visitor. Maybe <tt>null</tt>.
-     */
-    public void accept(final AnnotationVisitor av) {
-        if (av != null) {
-            if (values != null) {
-                for (int i = 0; i < values.size(); i += 2) {
-                    String name = (String) values.get(i);
-                    Object value = values.get(i + 1);
-                    accept(av, name, value);
-                }
-            }
-            av.visitEnd();
-        }
-    }
-
-    /**
-     * Makes the given visitor visit a given annotation value.
-     * 
-     * @param av
-     *            an annotation visitor. Maybe <tt>null</tt>.
-     * @param name
-     *            the value name.
-     * @param value
-     *            the actual value.
-     */
-    static void accept(final AnnotationVisitor av, final String name,
-            final Object value) {
-        if (av != null) {
-            if (value instanceof String[]) {
-                String[] typeconst = (String[]) value;
-                av.visitEnum(name, typeconst[0], typeconst[1]);
-            } else if (value instanceof AnnotationNode) {
-                AnnotationNode an = (AnnotationNode) value;
-                an.accept(av.visitAnnotation(name, an.desc));
-            } else if (value instanceof List) {
-                AnnotationVisitor v = av.visitArray(name);
-                List<?> array = (List<?>) value;
-                for (int j = 0; j < array.size(); ++j) {
-                    accept(v, null, array.get(j));
-                }
-                v.visitEnd();
-            } else {
-                av.visit(name, value);
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/ClassNode.java b/asm4/src/org/objectweb/asm/tree/ClassNode.java
deleted file mode 100644
index 11fd3bf..0000000
--- a/asm4/src/org/objectweb/asm/tree/ClassNode.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents a class.
- * 
- * @author Eric Bruneton
- */
-public class ClassNode extends ClassVisitor {
-
-    /**
-     * The class version.
-     */
-    public int version;
-
-    /**
-     * The class's access flags (see {@link org.objectweb.asm.Opcodes}). This
-     * field also indicates if the class is deprecated.
-     */
-    public int access;
-
-    /**
-     * The internal name of the class (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
-     */
-    public String name;
-
-    /**
-     * The signature of the class. May be <tt>null</tt>.
-     */
-    public String signature;
-
-    /**
-     * The internal of name of the super class (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}). For
-     * interfaces, the super class is {@link Object}. May be <tt>null</tt>, but
-     * only for the {@link Object} class.
-     */
-    public String superName;
-
-    /**
-     * The internal names of the class's interfaces (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}). This
-     * list is a list of {@link String} objects.
-     */
-    public List<String> interfaces;
-
-    /**
-     * The name of the source file from which this class was compiled. May be
-     * <tt>null</tt>.
-     */
-    public String sourceFile;
-
-    /**
-     * Debug information to compute the correspondence between source and
-     * compiled elements of the class. May be <tt>null</tt>.
-     */
-    public String sourceDebug;
-
-    /**
-     * The internal name of the enclosing class of the class. May be
-     * <tt>null</tt>.
-     */
-    public String outerClass;
-
-    /**
-     * The name of the method that contains the class, or <tt>null</tt> if the
-     * class is not enclosed in a method.
-     */
-    public String outerMethod;
-
-    /**
-     * The descriptor of the method that contains the class, or <tt>null</tt> if
-     * the class is not enclosed in a method.
-     */
-    public String outerMethodDesc;
-
-    /**
-     * The runtime visible annotations of this class. This list is a list of
-     * {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label visible
-     */
-    public List<AnnotationNode> visibleAnnotations;
-
-    /**
-     * The runtime invisible annotations of this class. This list is a list of
-     * {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label invisible
-     */
-    public List<AnnotationNode> invisibleAnnotations;
-
-    /**
-     * The non standard attributes of this class. This list is a list of
-     * {@link Attribute} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.Attribute
-     */
-    public List<Attribute> attrs;
-
-    /**
-     * Informations about the inner classes of this class. This list is a list
-     * of {@link InnerClassNode} objects.
-     * 
-     * @associates org.objectweb.asm.tree.InnerClassNode
-     */
-    public List<InnerClassNode> innerClasses;
-
-    /**
-     * The fields of this class. This list is a list of {@link FieldNode}
-     * objects.
-     * 
-     * @associates org.objectweb.asm.tree.FieldNode
-     */
-    public List<FieldNode> fields;
-
-    /**
-     * The methods of this class. This list is a list of {@link MethodNode}
-     * objects.
-     * 
-     * @associates org.objectweb.asm.tree.MethodNode
-     */
-    public List<MethodNode> methods;
-
-    /**
-     * Constructs a new {@link ClassNode}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the {@link #ClassNode(int)}
-     * version.
-     */
-    public ClassNode() {
-        this(Opcodes.ASM4);
-    }
-
-    /**
-     * Constructs a new {@link ClassNode}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public ClassNode(final int api) {
-        super(api);
-        this.interfaces = new ArrayList<String>();
-        this.innerClasses = new ArrayList<InnerClassNode>();
-        this.fields = new ArrayList<FieldNode>();
-        this.methods = new ArrayList<MethodNode>();
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the ClassVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        this.version = version;
-        this.access = access;
-        this.name = name;
-        this.signature = signature;
-        this.superName = superName;
-        if (interfaces != null) {
-            this.interfaces.addAll(Arrays.asList(interfaces));
-        }
-    }
-
-    @Override
-    public void visitSource(final String file, final String debug) {
-        sourceFile = file;
-        sourceDebug = debug;
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        outerClass = owner;
-        outerMethod = name;
-        outerMethodDesc = desc;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        AnnotationNode an = new AnnotationNode(desc);
-        if (visible) {
-            if (visibleAnnotations == null) {
-                visibleAnnotations = new ArrayList<AnnotationNode>(1);
-            }
-            visibleAnnotations.add(an);
-        } else {
-            if (invisibleAnnotations == null) {
-                invisibleAnnotations = new ArrayList<AnnotationNode>(1);
-            }
-            invisibleAnnotations.add(an);
-        }
-        return an;
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        if (attrs == null) {
-            attrs = new ArrayList<Attribute>(1);
-        }
-        attrs.add(attr);
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        InnerClassNode icn = new InnerClassNode(name, outerName, innerName,
-                access);
-        innerClasses.add(icn);
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        FieldNode fn = new FieldNode(access, name, desc, signature, value);
-        fields.add(fn);
-        return fn;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        MethodNode mn = new MethodNode(access, name, desc, signature,
-                exceptions);
-        methods.add(mn);
-        return mn;
-    }
-
-    @Override
-    public void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Accept method
-    // ------------------------------------------------------------------------
-
-    /**
-     * Checks that this class node is compatible with the given ASM API version.
-     * This methods checks that this node, and all its nodes recursively, do not
-     * contain elements that were introduced in more recent versions of the ASM
-     * API than the given version.
-     * 
-     * @param api
-     *            an ASM API version. Must be one of {@link Opcodes#ASM4}.
-     */
-    public void check(final int api) {
-        // nothing to do
-    }
-
-    /**
-     * Makes the given class visitor visit this class.
-     * 
-     * @param cv
-     *            a class visitor.
-     */
-    public void accept(final ClassVisitor cv) {
-        // visits header
-        String[] interfaces = new String[this.interfaces.size()];
-        this.interfaces.toArray(interfaces);
-        cv.visit(version, access, name, signature, superName, interfaces);
-        // visits source
-        if (sourceFile != null || sourceDebug != null) {
-            cv.visitSource(sourceFile, sourceDebug);
-        }
-        // visits outer class
-        if (outerClass != null) {
-            cv.visitOuterClass(outerClass, outerMethod, outerMethodDesc);
-        }
-        // visits attributes
-        int i, n;
-        n = visibleAnnotations == null ? 0 : visibleAnnotations.size();
-        for (i = 0; i < n; ++i) {
-            AnnotationNode an = visibleAnnotations.get(i);
-            an.accept(cv.visitAnnotation(an.desc, true));
-        }
-        n = invisibleAnnotations == null ? 0 : invisibleAnnotations.size();
-        for (i = 0; i < n; ++i) {
-            AnnotationNode an = invisibleAnnotations.get(i);
-            an.accept(cv.visitAnnotation(an.desc, false));
-        }
-        n = attrs == null ? 0 : attrs.size();
-        for (i = 0; i < n; ++i) {
-            cv.visitAttribute(attrs.get(i));
-        }
-        // visits inner classes
-        for (i = 0; i < innerClasses.size(); ++i) {
-            innerClasses.get(i).accept(cv);
-        }
-        // visits fields
-        for (i = 0; i < fields.size(); ++i) {
-            fields.get(i).accept(cv);
-        }
-        // visits methods
-        for (i = 0; i < methods.size(); ++i) {
-            methods.get(i).accept(cv);
-        }
-        // visits end
-        cv.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/FieldInsnNode.java b/asm4/src/org/objectweb/asm/tree/FieldInsnNode.java
deleted file mode 100644
index a827e17..0000000
--- a/asm4/src/org/objectweb/asm/tree/FieldInsnNode.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a field instruction. A field instruction is an
- * instruction that loads or stores the value of a field of an object.
- * 
- * @author Eric Bruneton
- */
-public class FieldInsnNode extends AbstractInsnNode {
-
-    /**
-     * The internal name of the field's owner class (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
-     */
-    public String owner;
-
-    /**
-     * The field's name.
-     */
-    public String name;
-
-    /**
-     * The field's descriptor (see {@link org.objectweb.asm.Type}).
-     */
-    public String desc;
-
-    /**
-     * Constructs a new {@link FieldInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be constructed. This
-     *            opcode must be GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.
-     * @param owner
-     *            the internal name of the field's owner class (see
-     *            {@link org.objectweb.asm.Type#getInternalName()
-     *            getInternalName}).
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link org.objectweb.asm.Type}).
-     */
-    public FieldInsnNode(final int opcode, final String owner,
-            final String name, final String desc) {
-        super(opcode);
-        this.owner = owner;
-        this.name = name;
-        this.desc = desc;
-    }
-
-    /**
-     * Sets the opcode of this instruction.
-     * 
-     * @param opcode
-     *            the new instruction opcode. This opcode must be GETSTATIC,
-     *            PUTSTATIC, GETFIELD or PUTFIELD.
-     */
-    public void setOpcode(final int opcode) {
-        this.opcode = opcode;
-    }
-
-    @Override
-    public int getType() {
-        return FIELD_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor cv) {
-        cv.visitFieldInsn(opcode, owner, name, desc);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new FieldInsnNode(opcode, owner, name, desc);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/FieldNode.java b/asm4/src/org/objectweb/asm/tree/FieldNode.java
deleted file mode 100644
index 8f9a2cd..0000000
--- a/asm4/src/org/objectweb/asm/tree/FieldNode.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents a field.
- * 
- * @author Eric Bruneton
- */
-public class FieldNode extends FieldVisitor {
-
-    /**
-     * The field's access flags (see {@link org.objectweb.asm.Opcodes}). This
-     * field also indicates if the field is synthetic and/or deprecated.
-     */
-    public int access;
-
-    /**
-     * The field's name.
-     */
-    public String name;
-
-    /**
-     * The field's descriptor (see {@link org.objectweb.asm.Type}).
-     */
-    public String desc;
-
-    /**
-     * The field's signature. May be <tt>null</tt>.
-     */
-    public String signature;
-
-    /**
-     * The field's initial value. This field, which may be <tt>null</tt> if the
-     * field does not have an initial value, must be an {@link Integer}, a
-     * {@link Float}, a {@link Long}, a {@link Double} or a {@link String}.
-     */
-    public Object value;
-
-    /**
-     * The runtime visible annotations of this field. This list is a list of
-     * {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label visible
-     */
-    public List<AnnotationNode> visibleAnnotations;
-
-    /**
-     * The runtime invisible annotations of this field. This list is a list of
-     * {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label invisible
-     */
-    public List<AnnotationNode> invisibleAnnotations;
-
-    /**
-     * The non standard attributes of this field. This list is a list of
-     * {@link Attribute} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.Attribute
-     */
-    public List<Attribute> attrs;
-
-    /**
-     * Constructs a new {@link FieldNode}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #FieldNode(int, int, String, String, String, Object)} version.
-     * 
-     * @param access
-     *            the field's access flags (see
-     *            {@link org.objectweb.asm.Opcodes}). This parameter also
-     *            indicates if the field is synthetic and/or deprecated.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link org.objectweb.asm.Type
-     *            Type}).
-     * @param signature
-     *            the field's signature.
-     * @param value
-     *            the field's initial value. This parameter, which may be
-     *            <tt>null</tt> if the field does not have an initial value,
-     *            must be an {@link Integer}, a {@link Float}, a {@link Long}, a
-     *            {@link Double} or a {@link String}.
-     */
-    public FieldNode(final int access, final String name, final String desc,
-            final String signature, final Object value) {
-        this(Opcodes.ASM4, access, name, desc, signature, value);
-    }
-
-    /**
-     * Constructs a new {@link FieldNode}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #FieldNode(int, int, String, String, String, Object)} version.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param access
-     *            the field's access flags (see
-     *            {@link org.objectweb.asm.Opcodes}). This parameter also
-     *            indicates if the field is synthetic and/or deprecated.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link org.objectweb.asm.Type
-     *            Type}).
-     * @param signature
-     *            the field's signature.
-     * @param value
-     *            the field's initial value. This parameter, which may be
-     *            <tt>null</tt> if the field does not have an initial value,
-     *            must be an {@link Integer}, a {@link Float}, a {@link Long}, a
-     *            {@link Double} or a {@link String}.
-     */
-    public FieldNode(final int api, final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        super(api);
-        this.access = access;
-        this.name = name;
-        this.desc = desc;
-        this.signature = signature;
-        this.value = value;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the FieldVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        AnnotationNode an = new AnnotationNode(desc);
-        if (visible) {
-            if (visibleAnnotations == null) {
-                visibleAnnotations = new ArrayList<AnnotationNode>(1);
-            }
-            visibleAnnotations.add(an);
-        } else {
-            if (invisibleAnnotations == null) {
-                invisibleAnnotations = new ArrayList<AnnotationNode>(1);
-            }
-            invisibleAnnotations.add(an);
-        }
-        return an;
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        if (attrs == null) {
-            attrs = new ArrayList<Attribute>(1);
-        }
-        attrs.add(attr);
-    }
-
-    @Override
-    public void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Accept methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Checks that this field node is compatible with the given ASM API version.
-     * This methods checks that this node, and all its nodes recursively, do not
-     * contain elements that were introduced in more recent versions of the ASM
-     * API than the given version.
-     * 
-     * @param api
-     *            an ASM API version. Must be one of {@link Opcodes#ASM4}.
-     */
-    public void check(final int api) {
-        // nothing to do
-    }
-
-    /**
-     * Makes the given class visitor visit this field.
-     * 
-     * @param cv
-     *            a class visitor.
-     */
-    public void accept(final ClassVisitor cv) {
-        FieldVisitor fv = cv.visitField(access, name, desc, signature, value);
-        if (fv == null) {
-            return;
-        }
-        int i, n;
-        n = visibleAnnotations == null ? 0 : visibleAnnotations.size();
-        for (i = 0; i < n; ++i) {
-            AnnotationNode an = visibleAnnotations.get(i);
-            an.accept(fv.visitAnnotation(an.desc, true));
-        }
-        n = invisibleAnnotations == null ? 0 : invisibleAnnotations.size();
-        for (i = 0; i < n; ++i) {
-            AnnotationNode an = invisibleAnnotations.get(i);
-            an.accept(fv.visitAnnotation(an.desc, false));
-        }
-        n = attrs == null ? 0 : attrs.size();
-        for (i = 0; i < n; ++i) {
-            fv.visitAttribute(attrs.get(i));
-        }
-        fv.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/FrameNode.java b/asm4/src/org/objectweb/asm/tree/FrameNode.java
deleted file mode 100644
index bd1ea70..0000000
--- a/asm4/src/org/objectweb/asm/tree/FrameNode.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents a stack map frame. These nodes are pseudo instruction
- * nodes in order to be inserted in an instruction list. In fact these nodes
- * must(*) be inserted <i>just before</i> any instruction node <b>i</b> that
- * follows an unconditionnal branch instruction such as GOTO or THROW, that is
- * the target of a jump instruction, or that starts an exception handler block.
- * The stack map frame types must describe the values of the local variables and
- * of the operand stack elements <i>just before</i> <b>i</b> is executed. <br>
- * <br>
- * (*) this is mandatory only for classes whose version is greater than or equal
- * to {@link Opcodes#V1_6 V1_6}.
- * 
- * @author Eric Bruneton
- */
-public class FrameNode extends AbstractInsnNode {
-
-    /**
-     * The type of this frame. Must be {@link Opcodes#F_NEW} for expanded
-     * frames, or {@link Opcodes#F_FULL}, {@link Opcodes#F_APPEND},
-     * {@link Opcodes#F_CHOP}, {@link Opcodes#F_SAME} or
-     * {@link Opcodes#F_APPEND}, {@link Opcodes#F_SAME1} for compressed frames.
-     */
-    public int type;
-
-    /**
-     * The types of the local variables of this stack map frame. Elements of
-     * this list can be Integer, String or LabelNode objects (for primitive,
-     * reference and uninitialized types respectively - see
-     * {@link MethodVisitor}).
-     */
-    public List<Object> local;
-
-    /**
-     * The types of the operand stack elements of this stack map frame. Elements
-     * of this list can be Integer, String or LabelNode objects (for primitive,
-     * reference and uninitialized types respectively - see
-     * {@link MethodVisitor}).
-     */
-    public List<Object> stack;
-
-    private FrameNode() {
-        super(-1);
-    }
-
-    /**
-     * Constructs a new {@link FrameNode}.
-     * 
-     * @param type
-     *            the type of this frame. Must be {@link Opcodes#F_NEW} for
-     *            expanded frames, or {@link Opcodes#F_FULL},
-     *            {@link Opcodes#F_APPEND}, {@link Opcodes#F_CHOP},
-     *            {@link Opcodes#F_SAME} or {@link Opcodes#F_APPEND},
-     *            {@link Opcodes#F_SAME1} for compressed frames.
-     * @param nLocal
-     *            number of local variables of this stack map frame.
-     * @param local
-     *            the types of the local variables of this stack map frame.
-     *            Elements of this list can be Integer, String or LabelNode
-     *            objects (for primitive, reference and uninitialized types
-     *            respectively - see {@link MethodVisitor}).
-     * @param nStack
-     *            number of operand stack elements of this stack map frame.
-     * @param stack
-     *            the types of the operand stack elements of this stack map
-     *            frame. Elements of this list can be Integer, String or
-     *            LabelNode objects (for primitive, reference and uninitialized
-     *            types respectively - see {@link MethodVisitor}).
-     */
-    public FrameNode(final int type, final int nLocal, final Object[] local,
-            final int nStack, final Object[] stack) {
-        super(-1);
-        this.type = type;
-        switch (type) {
-        case Opcodes.F_NEW:
-        case Opcodes.F_FULL:
-            this.local = asList(nLocal, local);
-            this.stack = asList(nStack, stack);
-            break;
-        case Opcodes.F_APPEND:
-            this.local = asList(nLocal, local);
-            break;
-        case Opcodes.F_CHOP:
-            this.local = Arrays.asList(new Object[nLocal]);
-            break;
-        case Opcodes.F_SAME:
-            break;
-        case Opcodes.F_SAME1:
-            this.stack = asList(1, stack);
-            break;
-        }
-    }
-
-    @Override
-    public int getType() {
-        return FRAME;
-    }
-
-    /**
-     * Makes the given visitor visit this stack map frame.
-     * 
-     * @param mv
-     *            a method visitor.
-     */
-    @Override
-    public void accept(final MethodVisitor mv) {
-        switch (type) {
-        case Opcodes.F_NEW:
-        case Opcodes.F_FULL:
-            mv.visitFrame(type, local.size(), asArray(local), stack.size(),
-                    asArray(stack));
-            break;
-        case Opcodes.F_APPEND:
-            mv.visitFrame(type, local.size(), asArray(local), 0, null);
-            break;
-        case Opcodes.F_CHOP:
-            mv.visitFrame(type, local.size(), null, 0, null);
-            break;
-        case Opcodes.F_SAME:
-            mv.visitFrame(type, 0, null, 0, null);
-            break;
-        case Opcodes.F_SAME1:
-            mv.visitFrame(type, 0, null, 1, asArray(stack));
-            break;
-        }
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        FrameNode clone = new FrameNode();
-        clone.type = type;
-        if (local != null) {
-            clone.local = new ArrayList<Object>();
-            for (int i = 0; i < local.size(); ++i) {
-                Object l = local.get(i);
-                if (l instanceof LabelNode) {
-                    l = labels.get(l);
-                }
-                clone.local.add(l);
-            }
-        }
-        if (stack != null) {
-            clone.stack = new ArrayList<Object>();
-            for (int i = 0; i < stack.size(); ++i) {
-                Object s = stack.get(i);
-                if (s instanceof LabelNode) {
-                    s = labels.get(s);
-                }
-                clone.stack.add(s);
-            }
-        }
-        return clone;
-    }
-
-    // ------------------------------------------------------------------------
-
-    private static List<Object> asList(final int n, final Object[] o) {
-        return Arrays.asList(o).subList(0, n);
-    }
-
-    private static Object[] asArray(final List<Object> l) {
-        Object[] objs = new Object[l.size()];
-        for (int i = 0; i < objs.length; ++i) {
-            Object o = l.get(i);
-            if (o instanceof LabelNode) {
-                o = ((LabelNode) o).getLabel();
-            }
-            objs[i] = o;
-        }
-        return objs;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/IincInsnNode.java b/asm4/src/org/objectweb/asm/tree/IincInsnNode.java
deleted file mode 100644
index 179ec6e..0000000
--- a/asm4/src/org/objectweb/asm/tree/IincInsnNode.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents an IINC instruction.
- * 
- * @author Eric Bruneton
- */
-public class IincInsnNode extends AbstractInsnNode {
-
-    /**
-     * Index of the local variable to be incremented.
-     */
-    public int var;
-
-    /**
-     * Amount to increment the local variable by.
-     */
-    public int incr;
-
-    /**
-     * Constructs a new {@link IincInsnNode}.
-     * 
-     * @param var
-     *            index of the local variable to be incremented.
-     * @param incr
-     *            increment amount to increment the local variable by.
-     */
-    public IincInsnNode(final int var, final int incr) {
-        super(Opcodes.IINC);
-        this.var = var;
-        this.incr = incr;
-    }
-
-    @Override
-    public int getType() {
-        return IINC_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitIincInsn(var, incr);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new IincInsnNode(var, incr);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/InnerClassNode.java b/asm4/src/org/objectweb/asm/tree/InnerClassNode.java
deleted file mode 100644
index 5198cfb..0000000
--- a/asm4/src/org/objectweb/asm/tree/InnerClassNode.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.ClassVisitor;
-
-/**
- * A node that represents an inner class.
- * 
- * @author Eric Bruneton
- */
-public class InnerClassNode {
-
-    /**
-     * The internal name of an inner class (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
-     */
-    public String name;
-
-    /**
-     * The internal name of the class to which the inner class belongs (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}). May be
-     * <tt>null</tt>.
-     */
-    public String outerName;
-
-    /**
-     * The (simple) name of the inner class inside its enclosing class. May be
-     * <tt>null</tt> for anonymous inner classes.
-     */
-    public String innerName;
-
-    /**
-     * The access flags of the inner class as originally declared in the
-     * enclosing class.
-     */
-    public int access;
-
-    /**
-     * Constructs a new {@link InnerClassNode}.
-     * 
-     * @param name
-     *            the internal name of an inner class (see
-     *            {@link org.objectweb.asm.Type#getInternalName()
-     *            getInternalName}).
-     * @param outerName
-     *            the internal name of the class to which the inner class
-     *            belongs (see {@link org.objectweb.asm.Type#getInternalName()
-     *            getInternalName}). May be <tt>null</tt>.
-     * @param innerName
-     *            the (simple) name of the inner class inside its enclosing
-     *            class. May be <tt>null</tt> for anonymous inner classes.
-     * @param access
-     *            the access flags of the inner class as originally declared in
-     *            the enclosing class.
-     */
-    public InnerClassNode(final String name, final String outerName,
-            final String innerName, final int access) {
-        this.name = name;
-        this.outerName = outerName;
-        this.innerName = innerName;
-        this.access = access;
-    }
-
-    /**
-     * Makes the given class visitor visit this inner class.
-     * 
-     * @param cv
-     *            a class visitor.
-     */
-    public void accept(final ClassVisitor cv) {
-        cv.visitInnerClass(name, outerName, innerName, access);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/InsnList.java b/asm4/src/org/objectweb/asm/tree/InsnList.java
deleted file mode 100644
index e3630c5..0000000
--- a/asm4/src/org/objectweb/asm/tree/InsnList.java
+++ /dev/null
@@ -1,600 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A doubly linked list of {@link AbstractInsnNode} objects. <i>This
- * implementation is not thread safe</i>.
- */
-public class InsnList {
-
-    /**
-     * The number of instructions in this list.
-     */
-    private int size;
-
-    /**
-     * The first instruction in this list. May be <tt>null</tt>.
-     */
-    private AbstractInsnNode first;
-
-    /**
-     * The last instruction in this list. May be <tt>null</tt>.
-     */
-    private AbstractInsnNode last;
-
-    /**
-     * A cache of the instructions of this list. This cache is used to improve
-     * the performance of the {@link #get} method.
-     */
-    AbstractInsnNode[] cache;
-
-    /**
-     * Returns the number of instructions in this list.
-     * 
-     * @return the number of instructions in this list.
-     */
-    public int size() {
-        return size;
-    }
-
-    /**
-     * Returns the first instruction in this list.
-     * 
-     * @return the first instruction in this list, or <tt>null</tt> if the list
-     *         is empty.
-     */
-    public AbstractInsnNode getFirst() {
-        return first;
-    }
-
-    /**
-     * Returns the last instruction in this list.
-     * 
-     * @return the last instruction in this list, or <tt>null</tt> if the list
-     *         is empty.
-     */
-    public AbstractInsnNode getLast() {
-        return last;
-    }
-
-    /**
-     * Returns the instruction whose index is given. This method builds a cache
-     * of the instructions in this list to avoid scanning the whole list each
-     * time it is called. Once the cache is built, this method run in constant
-     * time. This cache is invalidated by all the methods that modify the list.
-     * 
-     * @param index
-     *            the index of the instruction that must be returned.
-     * @return the instruction whose index is given.
-     * @throws IndexOutOfBoundsException
-     *             if (index < 0 || index >= size()).
-     */
-    public AbstractInsnNode get(final int index) {
-        if (index < 0 || index >= size) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (cache == null) {
-            cache = toArray();
-        }
-        return cache[index];
-    }
-
-    /**
-     * Returns <tt>true</tt> if the given instruction belongs to this list. This
-     * method always scans the instructions of this list until it finds the
-     * given instruction or reaches the end of the list.
-     * 
-     * @param insn
-     *            an instruction.
-     * @return <tt>true</tt> if the given instruction belongs to this list.
-     */
-    public boolean contains(final AbstractInsnNode insn) {
-        AbstractInsnNode i = first;
-        while (i != null && i != insn) {
-            i = i.next;
-        }
-        return i != null;
-    }
-
-    /**
-     * Returns the index of the given instruction in this list. This method
-     * builds a cache of the instruction indexes to avoid scanning the whole
-     * list each time it is called. Once the cache is built, this method run in
-     * constant time. The cache is invalidated by all the methods that modify
-     * the list.
-     * 
-     * @param insn
-     *            an instruction <i>of this list</i>.
-     * @return the index of the given instruction in this list. <i>The result of
-     *         this method is undefined if the given instruction does not belong
-     *         to this list</i>. Use {@link #contains contains} to test if an
-     *         instruction belongs to an instruction list or not.
-     */
-    public int indexOf(final AbstractInsnNode insn) {
-        if (cache == null) {
-            cache = toArray();
-        }
-        return insn.index;
-    }
-
-    /**
-     * Makes the given visitor visit all of the instructions in this list.
-     * 
-     * @param mv
-     *            the method visitor that must visit the instructions.
-     */
-    public void accept(final MethodVisitor mv) {
-        AbstractInsnNode insn = first;
-        while (insn != null) {
-            insn.accept(mv);
-            insn = insn.next;
-        }
-    }
-
-    /**
-     * Returns an iterator over the instructions in this list.
-     * 
-     * @return an iterator over the instructions in this list.
-     */
-    public ListIterator<AbstractInsnNode> iterator() {
-        return iterator(0);
-    }
-
-    /**
-     * Returns an iterator over the instructions in this list.
-     * 
-     * @return an iterator over the instructions in this list.
-     */
-    @SuppressWarnings("unchecked")
-    public ListIterator<AbstractInsnNode> iterator(int index) {
-        return new InsnListIterator(index);
-    }
-
-    /**
-     * Returns an array containing all of the instructions in this list.
-     * 
-     * @return an array containing all of the instructions in this list.
-     */
-    public AbstractInsnNode[] toArray() {
-        int i = 0;
-        AbstractInsnNode elem = first;
-        AbstractInsnNode[] insns = new AbstractInsnNode[size];
-        while (elem != null) {
-            insns[i] = elem;
-            elem.index = i++;
-            elem = elem.next;
-        }
-        return insns;
-    }
-
-    /**
-     * Replaces an instruction of this list with another instruction.
-     * 
-     * @param location
-     *            an instruction <i>of this list</i>.
-     * @param insn
-     *            another instruction, <i>which must not belong to any
-     *            {@link InsnList}</i>.
-     */
-    public void set(final AbstractInsnNode location, final AbstractInsnNode insn) {
-        AbstractInsnNode next = location.next;
-        insn.next = next;
-        if (next != null) {
-            next.prev = insn;
-        } else {
-            last = insn;
-        }
-        AbstractInsnNode prev = location.prev;
-        insn.prev = prev;
-        if (prev != null) {
-            prev.next = insn;
-        } else {
-            first = insn;
-        }
-        if (cache != null) {
-            int index = location.index;
-            cache[index] = insn;
-            insn.index = index;
-        } else {
-            insn.index = 0; // insn now belongs to an InsnList
-        }
-        location.index = -1; // i no longer belongs to an InsnList
-        location.prev = null;
-        location.next = null;
-    }
-
-    /**
-     * Adds the given instruction to the end of this list.
-     * 
-     * @param insn
-     *            an instruction, <i>which must not belong to any
-     *            {@link InsnList}</i>.
-     */
-    public void add(final AbstractInsnNode insn) {
-        ++size;
-        if (last == null) {
-            first = insn;
-            last = insn;
-        } else {
-            last.next = insn;
-            insn.prev = last;
-        }
-        last = insn;
-        cache = null;
-        insn.index = 0; // insn now belongs to an InsnList
-    }
-
-    /**
-     * Adds the given instructions to the end of this list.
-     * 
-     * @param insns
-     *            an instruction list, which is cleared during the process. This
-     *            list must be different from 'this'.
-     */
-    public void add(final InsnList insns) {
-        if (insns.size == 0) {
-            return;
-        }
-        size += insns.size;
-        if (last == null) {
-            first = insns.first;
-            last = insns.last;
-        } else {
-            AbstractInsnNode elem = insns.first;
-            last.next = elem;
-            elem.prev = last;
-            last = insns.last;
-        }
-        cache = null;
-        insns.removeAll(false);
-    }
-
-    /**
-     * Inserts the given instruction at the begining of this list.
-     * 
-     * @param insn
-     *            an instruction, <i>which must not belong to any
-     *            {@link InsnList}</i>.
-     */
-    public void insert(final AbstractInsnNode insn) {
-        ++size;
-        if (first == null) {
-            first = insn;
-            last = insn;
-        } else {
-            first.prev = insn;
-            insn.next = first;
-        }
-        first = insn;
-        cache = null;
-        insn.index = 0; // insn now belongs to an InsnList
-    }
-
-    /**
-     * Inserts the given instructions at the begining of this list.
-     * 
-     * @param insns
-     *            an instruction list, which is cleared during the process. This
-     *            list must be different from 'this'.
-     */
-    public void insert(final InsnList insns) {
-        if (insns.size == 0) {
-            return;
-        }
-        size += insns.size;
-        if (first == null) {
-            first = insns.first;
-            last = insns.last;
-        } else {
-            AbstractInsnNode elem = insns.last;
-            first.prev = elem;
-            elem.next = first;
-            first = insns.first;
-        }
-        cache = null;
-        insns.removeAll(false);
-    }
-
-    /**
-     * Inserts the given instruction after the specified instruction.
-     * 
-     * @param location
-     *            an instruction <i>of this list</i> after which insn must be
-     *            inserted.
-     * @param insn
-     *            the instruction to be inserted, <i>which must not belong to
-     *            any {@link InsnList}</i>.
-     */
-    public void insert(final AbstractInsnNode location,
-            final AbstractInsnNode insn) {
-        ++size;
-        AbstractInsnNode next = location.next;
-        if (next == null) {
-            last = insn;
-        } else {
-            next.prev = insn;
-        }
-        location.next = insn;
-        insn.next = next;
-        insn.prev = location;
-        cache = null;
-        insn.index = 0; // insn now belongs to an InsnList
-    }
-
-    /**
-     * Inserts the given instructions after the specified instruction.
-     * 
-     * @param location
-     *            an instruction <i>of this list</i> after which the
-     *            instructions must be inserted.
-     * @param insns
-     *            the instruction list to be inserted, which is cleared during
-     *            the process. This list must be different from 'this'.
-     */
-    public void insert(final AbstractInsnNode location, final InsnList insns) {
-        if (insns.size == 0) {
-            return;
-        }
-        size += insns.size;
-        AbstractInsnNode ifirst = insns.first;
-        AbstractInsnNode ilast = insns.last;
-        AbstractInsnNode next = location.next;
-        if (next == null) {
-            last = ilast;
-        } else {
-            next.prev = ilast;
-        }
-        location.next = ifirst;
-        ilast.next = next;
-        ifirst.prev = location;
-        cache = null;
-        insns.removeAll(false);
-    }
-
-    /**
-     * Inserts the given instruction before the specified instruction.
-     * 
-     * @param location
-     *            an instruction <i>of this list</i> before which insn must be
-     *            inserted.
-     * @param insn
-     *            the instruction to be inserted, <i>which must not belong to
-     *            any {@link InsnList}</i>.
-     */
-    public void insertBefore(final AbstractInsnNode location,
-            final AbstractInsnNode insn) {
-        ++size;
-        AbstractInsnNode prev = location.prev;
-        if (prev == null) {
-            first = insn;
-        } else {
-            prev.next = insn;
-        }
-        location.prev = insn;
-        insn.next = location;
-        insn.prev = prev;
-        cache = null;
-        insn.index = 0; // insn now belongs to an InsnList
-    }
-
-    /**
-     * Inserts the given instructions before the specified instruction.
-     * 
-     * @param location
-     *            an instruction <i>of this list</i> before which the
-     *            instructions must be inserted.
-     * @param insns
-     *            the instruction list to be inserted, which is cleared during
-     *            the process. This list must be different from 'this'.
-     */
-    public void insertBefore(final AbstractInsnNode location,
-            final InsnList insns) {
-        if (insns.size == 0) {
-            return;
-        }
-        size += insns.size;
-        AbstractInsnNode ifirst = insns.first;
-        AbstractInsnNode ilast = insns.last;
-        AbstractInsnNode prev = location.prev;
-        if (prev == null) {
-            first = ifirst;
-        } else {
-            prev.next = ifirst;
-        }
-        location.prev = ilast;
-        ilast.next = location;
-        ifirst.prev = prev;
-        cache = null;
-        insns.removeAll(false);
-    }
-
-    /**
-     * Removes the given instruction from this list.
-     * 
-     * @param insn
-     *            the instruction <i>of this list</i> that must be removed.
-     */
-    public void remove(final AbstractInsnNode insn) {
-        --size;
-        AbstractInsnNode next = insn.next;
-        AbstractInsnNode prev = insn.prev;
-        if (next == null) {
-            if (prev == null) {
-                first = null;
-                last = null;
-            } else {
-                prev.next = null;
-                last = prev;
-            }
-        } else {
-            if (prev == null) {
-                first = next;
-                next.prev = null;
-            } else {
-                prev.next = next;
-                next.prev = prev;
-            }
-        }
-        cache = null;
-        insn.index = -1; // insn no longer belongs to an InsnList
-        insn.prev = null;
-        insn.next = null;
-    }
-
-    /**
-     * Removes all of the instructions of this list.
-     * 
-     * @param mark
-     *            if the instructions must be marked as no longer belonging to
-     *            any {@link InsnList}.
-     */
-    void removeAll(final boolean mark) {
-        if (mark) {
-            AbstractInsnNode insn = first;
-            while (insn != null) {
-                AbstractInsnNode next = insn.next;
-                insn.index = -1; // insn no longer belongs to an InsnList
-                insn.prev = null;
-                insn.next = null;
-                insn = next;
-            }
-        }
-        size = 0;
-        first = null;
-        last = null;
-        cache = null;
-    }
-
-    /**
-     * Removes all of the instructions of this list.
-     */
-    public void clear() {
-        removeAll(false);
-    }
-
-    /**
-     * Reset all labels in the instruction list. This method should be called
-     * before reusing same instructions list between several
-     * <code>ClassWriter</code>s.
-     */
-    public void resetLabels() {
-        AbstractInsnNode insn = first;
-        while (insn != null) {
-            if (insn instanceof LabelNode) {
-                ((LabelNode) insn).resetLabel();
-            }
-            insn = insn.next;
-        }
-    }
-
-    // this class is not generified because it will create bridges
-    private final class InsnListIterator implements ListIterator {
-
-        AbstractInsnNode next;
-
-        AbstractInsnNode prev;
-
-        InsnListIterator(int index) {
-            if (index == size()) {
-                next = null;
-                prev = getLast();
-            } else {
-                next = get(index);
-                prev = next.prev;
-            }
-        }
-
-        public boolean hasNext() {
-            return next != null;
-        }
-
-        public Object next() {
-            if (next == null) {
-                throw new NoSuchElementException();
-            }
-            AbstractInsnNode result = next;
-            prev = result;
-            next = result.next;
-            return result;
-        }
-
-        public void remove() {
-            InsnList.this.remove(prev);
-            prev = prev.prev;
-        }
-
-        public boolean hasPrevious() {
-            return prev != null;
-        }
-
-        public Object previous() {
-            AbstractInsnNode result = prev;
-            next = result;
-            prev = result.prev;
-            return result;
-        }
-
-        public int nextIndex() {
-            if (next == null) {
-                return size();
-            }
-            if (cache == null) {
-                cache = toArray();
-            }
-            return next.index;
-        }
-
-        public int previousIndex() {
-            if (prev == null) {
-                return -1;
-            }
-            if (cache == null) {
-                cache = toArray();
-            }
-            return prev.index;
-        }
-
-        public void add(Object o) {
-            InsnList.this.insertBefore(next, (AbstractInsnNode) o);
-            prev = (AbstractInsnNode) o;
-        }
-
-        public void set(Object o) {
-            InsnList.this.set(next.prev, (AbstractInsnNode) o);
-            prev = (AbstractInsnNode) o;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/InsnNode.java b/asm4/src/org/objectweb/asm/tree/InsnNode.java
deleted file mode 100644
index 7221098..0000000
--- a/asm4/src/org/objectweb/asm/tree/InsnNode.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a zero operand instruction.
- * 
- * @author Eric Bruneton
- */
-public class InsnNode extends AbstractInsnNode {
-
-    /**
-     * Constructs a new {@link InsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the instruction to be constructed. This opcode
-     *            must be NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1,
-     *            ICONST_2, ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1,
-     *            FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD,
-     *            LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD,
-     *            IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE,
-     *            SASTORE, POP, POP2, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1,
-     *            DUP2_X2, SWAP, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB,
-     *            IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM,
-     *            FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL, LSHL, ISHR, LSHR,
-     *            IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, I2L, I2F, I2D,
-     *            L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S,
-     *            LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN, FRETURN,
-     *            DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW, MONITORENTER,
-     *            or MONITOREXIT.
-     */
-    public InsnNode(final int opcode) {
-        super(opcode);
-    }
-
-    @Override
-    public int getType() {
-        return INSN;
-    }
-
-    /**
-     * Makes the given visitor visit this instruction.
-     * 
-     * @param mv
-     *            a method visitor.
-     */
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitInsn(opcode);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new InsnNode(opcode);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/IntInsnNode.java b/asm4/src/org/objectweb/asm/tree/IntInsnNode.java
deleted file mode 100644
index 9fa80df..0000000
--- a/asm4/src/org/objectweb/asm/tree/IntInsnNode.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents an instruction with a single int operand.
- * 
- * @author Eric Bruneton
- */
-public class IntInsnNode extends AbstractInsnNode {
-
-    /**
-     * The operand of this instruction.
-     */
-    public int operand;
-
-    /**
-     * Constructs a new {@link IntInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the instruction to be constructed. This opcode
-     *            must be BIPUSH, SIPUSH or NEWARRAY.
-     * @param operand
-     *            the operand of the instruction to be constructed.
-     */
-    public IntInsnNode(final int opcode, final int operand) {
-        super(opcode);
-        this.operand = operand;
-    }
-
-    /**
-     * Sets the opcode of this instruction.
-     * 
-     * @param opcode
-     *            the new instruction opcode. This opcode must be BIPUSH, SIPUSH
-     *            or NEWARRAY.
-     */
-    public void setOpcode(final int opcode) {
-        this.opcode = opcode;
-    }
-
-    @Override
-    public int getType() {
-        return INT_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitIntInsn(opcode, operand);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new IntInsnNode(opcode, operand);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/InvokeDynamicInsnNode.java b/asm4/src/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
deleted file mode 100644
index 2ae1d97..0000000
--- a/asm4/src/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents an invokedynamic instruction.
- * 
- * @author Remi Forax
- */
-public class InvokeDynamicInsnNode extends AbstractInsnNode {
-
-    /**
-     * Invokedynamic name.
-     */
-    public String name;
-
-    /**
-     * Invokedynamic descriptor.
-     */
-    public String desc;
-
-    /**
-     * Bootstrap method
-     */
-    public Handle bsm;
-
-    /**
-     * Bootstrap constant arguments
-     */
-    public Object[] bsmArgs;
-
-    /**
-     * Constructs a new {@link InvokeDynamicInsnNode}.
-     * 
-     * @param name
-     *            invokedynamic name.
-     * @param desc
-     *            invokedynamic descriptor (see {@link org.objectweb.asm.Type}).
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the boostrap constant arguments.
-     */
-    public InvokeDynamicInsnNode(final String name, final String desc,
-            final Handle bsm, final Object... bsmArgs) {
-        super(Opcodes.INVOKEDYNAMIC);
-        this.name = name;
-        this.desc = desc;
-        this.bsm = bsm;
-        this.bsmArgs = bsmArgs;
-    }
-
-    @Override
-    public int getType() {
-        return INVOKE_DYNAMIC_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new InvokeDynamicInsnNode(name, desc, bsm, bsmArgs);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/JumpInsnNode.java b/asm4/src/org/objectweb/asm/tree/JumpInsnNode.java
deleted file mode 100644
index 9cb1dcb..0000000
--- a/asm4/src/org/objectweb/asm/tree/JumpInsnNode.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a jump instruction. A jump instruction is an
- * instruction that may jump to another instruction.
- * 
- * @author Eric Bruneton
- */
-public class JumpInsnNode extends AbstractInsnNode {
-
-    /**
-     * The operand of this instruction. This operand is a label that designates
-     * the instruction to which this instruction may jump.
-     */
-    public LabelNode label;
-
-    /**
-     * Constructs a new {@link JumpInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be constructed. This
-     *            opcode must be IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ,
-     *            IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE,
-     *            IF_ACMPEQ, IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL.
-     * @param label
-     *            the operand of the instruction to be constructed. This operand
-     *            is a label that designates the instruction to which the jump
-     *            instruction may jump.
-     */
-    public JumpInsnNode(final int opcode, final LabelNode label) {
-        super(opcode);
-        this.label = label;
-    }
-
-    /**
-     * Sets the opcode of this instruction.
-     * 
-     * @param opcode
-     *            the new instruction opcode. This opcode must be IFEQ, IFNE,
-     *            IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT,
-     *            IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, GOTO,
-     *            JSR, IFNULL or IFNONNULL.
-     */
-    public void setOpcode(final int opcode) {
-        this.opcode = opcode;
-    }
-
-    @Override
-    public int getType() {
-        return JUMP_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitJumpInsn(opcode, label.getLabel());
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new JumpInsnNode(opcode, clone(label, labels));
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/LabelNode.java b/asm4/src/org/objectweb/asm/tree/LabelNode.java
deleted file mode 100644
index b6381bd..0000000
--- a/asm4/src/org/objectweb/asm/tree/LabelNode.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * An {@link AbstractInsnNode} that encapsulates a {@link Label}.
- */
-public class LabelNode extends AbstractInsnNode {
-
-    private Label label;
-
-    public LabelNode() {
-        super(-1);
-    }
-
-    public LabelNode(final Label label) {
-        super(-1);
-        this.label = label;
-    }
-
-    @Override
-    public int getType() {
-        return LABEL;
-    }
-
-    public Label getLabel() {
-        if (label == null) {
-            label = new Label();
-        }
-        return label;
-    }
-
-    @Override
-    public void accept(final MethodVisitor cv) {
-        cv.visitLabel(getLabel());
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return labels.get(this);
-    }
-
-    public void resetLabel() {
-        label = null;
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/LdcInsnNode.java b/asm4/src/org/objectweb/asm/tree/LdcInsnNode.java
deleted file mode 100644
index 9209f46..0000000
--- a/asm4/src/org/objectweb/asm/tree/LdcInsnNode.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents an LDC instruction.
- * 
- * @author Eric Bruneton
- */
-public class LdcInsnNode extends AbstractInsnNode {
-
-    /**
-     * The constant to be loaded on the stack. This parameter must be a non null
-     * {@link Integer}, a {@link Float}, a {@link Long}, a {@link Double}, a
-     * {@link String} or a {@link org.objectweb.asm.Type}.
-     */
-    public Object cst;
-
-    /**
-     * Constructs a new {@link LdcInsnNode}.
-     * 
-     * @param cst
-     *            the constant to be loaded on the stack. This parameter must be
-     *            a non null {@link Integer}, a {@link Float}, a {@link Long}, a
-     *            {@link Double} or a {@link String}.
-     */
-    public LdcInsnNode(final Object cst) {
-        super(Opcodes.LDC);
-        this.cst = cst;
-    }
-
-    @Override
-    public int getType() {
-        return LDC_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitLdcInsn(cst);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new LdcInsnNode(cst);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/LineNumberNode.java b/asm4/src/org/objectweb/asm/tree/LineNumberNode.java
deleted file mode 100644
index cda1694..0000000
--- a/asm4/src/org/objectweb/asm/tree/LineNumberNode.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a line number declaration. These nodes are pseudo
- * instruction nodes in order to be inserted in an instruction list.
- * 
- * @author Eric Bruneton
- */
-public class LineNumberNode extends AbstractInsnNode {
-
-    /**
-     * A line number. This number refers to the source file from which the class
-     * was compiled.
-     */
-    public int line;
-
-    /**
-     * The first instruction corresponding to this line number.
-     */
-    public LabelNode start;
-
-    /**
-     * Constructs a new {@link LineNumberNode}.
-     * 
-     * @param line
-     *            a line number. This number refers to the source file from
-     *            which the class was compiled.
-     * @param start
-     *            the first instruction corresponding to this line number.
-     */
-    public LineNumberNode(final int line, final LabelNode start) {
-        super(-1);
-        this.line = line;
-        this.start = start;
-    }
-
-    @Override
-    public int getType() {
-        return LINE;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitLineNumber(line, start.getLabel());
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new LineNumberNode(line, clone(start, labels));
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/LocalVariableNode.java b/asm4/src/org/objectweb/asm/tree/LocalVariableNode.java
deleted file mode 100644
index 033f83e..0000000
--- a/asm4/src/org/objectweb/asm/tree/LocalVariableNode.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a local variable declaration.
- * 
- * @author Eric Bruneton
- */
-public class LocalVariableNode {
-
-    /**
-     * The name of a local variable.
-     */
-    public String name;
-
-    /**
-     * The type descriptor of this local variable.
-     */
-    public String desc;
-
-    /**
-     * The signature of this local variable. May be <tt>null</tt>.
-     */
-    public String signature;
-
-    /**
-     * The first instruction corresponding to the scope of this local variable
-     * (inclusive).
-     */
-    public LabelNode start;
-
-    /**
-     * The last instruction corresponding to the scope of this local variable
-     * (exclusive).
-     */
-    public LabelNode end;
-
-    /**
-     * The local variable's index.
-     */
-    public int index;
-
-    /**
-     * Constructs a new {@link LocalVariableNode}.
-     * 
-     * @param name
-     *            the name of a local variable.
-     * @param desc
-     *            the type descriptor of this local variable.
-     * @param signature
-     *            the signature of this local variable. May be <tt>null</tt>.
-     * @param start
-     *            the first instruction corresponding to the scope of this local
-     *            variable (inclusive).
-     * @param end
-     *            the last instruction corresponding to the scope of this local
-     *            variable (exclusive).
-     * @param index
-     *            the local variable's index.
-     */
-    public LocalVariableNode(final String name, final String desc,
-            final String signature, final LabelNode start, final LabelNode end,
-            final int index) {
-        this.name = name;
-        this.desc = desc;
-        this.signature = signature;
-        this.start = start;
-        this.end = end;
-        this.index = index;
-    }
-
-    /**
-     * Makes the given visitor visit this local variable declaration.
-     * 
-     * @param mv
-     *            a method visitor.
-     */
-    public void accept(final MethodVisitor mv) {
-        mv.visitLocalVariable(name, desc, signature, start.getLabel(),
-                end.getLabel(), index);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/LookupSwitchInsnNode.java b/asm4/src/org/objectweb/asm/tree/LookupSwitchInsnNode.java
deleted file mode 100644
index c44c5ef..0000000
--- a/asm4/src/org/objectweb/asm/tree/LookupSwitchInsnNode.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents a LOOKUPSWITCH instruction.
- * 
- * @author Eric Bruneton
- */
-public class LookupSwitchInsnNode extends AbstractInsnNode {
-
-    /**
-     * Beginning of the default handler block.
-     */
-    public LabelNode dflt;
-
-    /**
-     * The values of the keys. This list is a list of {@link Integer} objects.
-     */
-    public List<Integer> keys;
-
-    /**
-     * Beginnings of the handler blocks. This list is a list of
-     * {@link LabelNode} objects.
-     */
-    public List<LabelNode> labels;
-
-    /**
-     * Constructs a new {@link LookupSwitchInsnNode}.
-     * 
-     * @param dflt
-     *            beginning of the default handler block.
-     * @param keys
-     *            the values of the keys.
-     * @param labels
-     *            beginnings of the handler blocks. <tt>labels[i]</tt> is the
-     *            beginning of the handler block for the <tt>keys[i]</tt> key.
-     */
-    public LookupSwitchInsnNode(final LabelNode dflt, final int[] keys,
-            final LabelNode[] labels) {
-        super(Opcodes.LOOKUPSWITCH);
-        this.dflt = dflt;
-        this.keys = new ArrayList<Integer>(keys == null ? 0 : keys.length);
-        this.labels = new ArrayList<LabelNode>(labels == null ? 0
-                : labels.length);
-        if (keys != null) {
-            for (int i = 0; i < keys.length; ++i) {
-                this.keys.add(new Integer(keys[i]));
-            }
-        }
-        if (labels != null) {
-            this.labels.addAll(Arrays.asList(labels));
-        }
-    }
-
-    @Override
-    public int getType() {
-        return LOOKUPSWITCH_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        int[] keys = new int[this.keys.size()];
-        for (int i = 0; i < keys.length; ++i) {
-            keys[i] = this.keys.get(i).intValue();
-        }
-        Label[] labels = new Label[this.labels.size()];
-        for (int i = 0; i < labels.length; ++i) {
-            labels[i] = this.labels.get(i).getLabel();
-        }
-        mv.visitLookupSwitchInsn(dflt.getLabel(), keys, labels);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        LookupSwitchInsnNode clone = new LookupSwitchInsnNode(clone(dflt,
-                labels), null, clone(this.labels, labels));
-        clone.keys.addAll(keys);
-        return clone;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/MethodInsnNode.java b/asm4/src/org/objectweb/asm/tree/MethodInsnNode.java
deleted file mode 100644
index bd3d4a6..0000000
--- a/asm4/src/org/objectweb/asm/tree/MethodInsnNode.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a method instruction. A method instruction is an
- * instruction that invokes a method.
- * 
- * @author Eric Bruneton
- */
-public class MethodInsnNode extends AbstractInsnNode {
-
-    /**
-     * The internal name of the method's owner class (see
-     * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
-     */
-    public String owner;
-
-    /**
-     * The method's name.
-     */
-    public String name;
-
-    /**
-     * The method's descriptor (see {@link org.objectweb.asm.Type}).
-     */
-    public String desc;
-
-    /**
-     * Constructs a new {@link MethodInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be constructed. This
-     *            opcode must be INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or
-     *            INVOKEINTERFACE.
-     * @param owner
-     *            the internal name of the method's owner class (see
-     *            {@link org.objectweb.asm.Type#getInternalName()
-     *            getInternalName}).
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link org.objectweb.asm.Type}).
-     */
-    public MethodInsnNode(final int opcode, final String owner,
-            final String name, final String desc) {
-        super(opcode);
-        this.owner = owner;
-        this.name = name;
-        this.desc = desc;
-    }
-
-    /**
-     * Sets the opcode of this instruction.
-     * 
-     * @param opcode
-     *            the new instruction opcode. This opcode must be INVOKEVIRTUAL,
-     *            INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE.
-     */
-    public void setOpcode(final int opcode) {
-        this.opcode = opcode;
-    }
-
-    @Override
-    public int getType() {
-        return METHOD_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitMethodInsn(opcode, owner, name, desc);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new MethodInsnNode(opcode, owner, name, desc);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/MethodNode.java b/asm4/src/org/objectweb/asm/tree/MethodNode.java
deleted file mode 100644
index bf380cf..0000000
--- a/asm4/src/org/objectweb/asm/tree/MethodNode.java
+++ /dev/null
@@ -1,597 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A node that represents a method.
- * 
- * @author Eric Bruneton
- */
-public class MethodNode extends MethodVisitor {
-
-    /**
-     * The method's access flags (see {@link Opcodes}). This field also
-     * indicates if the method is synthetic and/or deprecated.
-     */
-    public int access;
-
-    /**
-     * The method's name.
-     */
-    public String name;
-
-    /**
-     * The method's descriptor (see {@link Type}).
-     */
-    public String desc;
-
-    /**
-     * The method's signature. May be <tt>null</tt>.
-     */
-    public String signature;
-
-    /**
-     * The internal names of the method's exception classes (see
-     * {@link Type#getInternalName() getInternalName}). This list is a list of
-     * {@link String} objects.
-     */
-    public List<String> exceptions;
-
-    /**
-     * The runtime visible annotations of this method. This list is a list of
-     * {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label visible
-     */
-    public List<AnnotationNode> visibleAnnotations;
-
-    /**
-     * The runtime invisible annotations of this method. This list is a list of
-     * {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label invisible
-     */
-    public List<AnnotationNode> invisibleAnnotations;
-
-    /**
-     * The non standard attributes of this method. This list is a list of
-     * {@link Attribute} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.Attribute
-     */
-    public List<Attribute> attrs;
-
-    /**
-     * The default value of this annotation interface method. This field must be
-     * a {@link Byte}, {@link Boolean}, {@link Character}, {@link Short},
-     * {@link Integer}, {@link Long}, {@link Float}, {@link Double},
-     * {@link String} or {@link Type}, or an two elements String array (for
-     * enumeration values), a {@link AnnotationNode}, or a {@link List} of
-     * values of one of the preceding types. May be <tt>null</tt>.
-     */
-    public Object annotationDefault;
-
-    /**
-     * The runtime visible parameter annotations of this method. These lists are
-     * lists of {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label invisible parameters
-     */
-    public List<AnnotationNode>[] visibleParameterAnnotations;
-
-    /**
-     * The runtime invisible parameter annotations of this method. These lists
-     * are lists of {@link AnnotationNode} objects. May be <tt>null</tt>.
-     * 
-     * @associates org.objectweb.asm.tree.AnnotationNode
-     * @label visible parameters
-     */
-    public List<AnnotationNode>[] invisibleParameterAnnotations;
-
-    /**
-     * The instructions of this method. This list is a list of
-     * {@link AbstractInsnNode} objects.
-     * 
-     * @associates org.objectweb.asm.tree.AbstractInsnNode
-     * @label instructions
-     */
-    public InsnList instructions;
-
-    /**
-     * The try catch blocks of this method. This list is a list of
-     * {@link TryCatchBlockNode} objects.
-     * 
-     * @associates org.objectweb.asm.tree.TryCatchBlockNode
-     */
-    public List<TryCatchBlockNode> tryCatchBlocks;
-
-    /**
-     * The maximum stack size of this method.
-     */
-    public int maxStack;
-
-    /**
-     * The maximum number of local variables of this method.
-     */
-    public int maxLocals;
-
-    /**
-     * The local variables of this method. This list is a list of
-     * {@link LocalVariableNode} objects. May be <tt>null</tt>
-     * 
-     * @associates org.objectweb.asm.tree.LocalVariableNode
-     */
-    public List<LocalVariableNode> localVariables;
-
-    /**
-     * If the accept method has been called on this object.
-     */
-    private boolean visited;
-
-    /**
-     * Constructs an uninitialized {@link MethodNode}. <i>Subclasses must not
-     * use this constructor</i>. Instead, they must use the
-     * {@link #MethodNode(int)} version.
-     */
-    public MethodNode() {
-        this(Opcodes.ASM4);
-    }
-
-    /**
-     * Constructs an uninitialized {@link MethodNode}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public MethodNode(final int api) {
-        super(api);
-        this.instructions = new InsnList();
-    }
-
-    /**
-     * Constructs a new {@link MethodNode}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #MethodNode(int, int, String, String, String, String[])} version.
-     * 
-     * @param access
-     *            the method's access flags (see {@link Opcodes}). This
-     *            parameter also indicates if the method is synthetic and/or
-     *            deprecated.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt>.
-     * @param exceptions
-     *            the internal names of the method's exception classes (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     */
-    public MethodNode(final int access, final String name, final String desc,
-            final String signature, final String[] exceptions) {
-        this(Opcodes.ASM4, access, name, desc, signature, exceptions);
-    }
-
-    /**
-     * Constructs a new {@link MethodNode}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param access
-     *            the method's access flags (see {@link Opcodes}). This
-     *            parameter also indicates if the method is synthetic and/or
-     *            deprecated.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt>.
-     * @param exceptions
-     *            the internal names of the method's exception classes (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     */
-    public MethodNode(final int api, final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        super(api);
-        this.access = access;
-        this.name = name;
-        this.desc = desc;
-        this.signature = signature;
-        this.exceptions = new ArrayList<String>(exceptions == null ? 0
-                : exceptions.length);
-        boolean isAbstract = (access & Opcodes.ACC_ABSTRACT) != 0;
-        if (!isAbstract) {
-            this.localVariables = new ArrayList<LocalVariableNode>(5);
-        }
-        this.tryCatchBlocks = new ArrayList<TryCatchBlockNode>();
-        if (exceptions != null) {
-            this.exceptions.addAll(Arrays.asList(exceptions));
-        }
-        this.instructions = new InsnList();
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the MethodVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        return new AnnotationNode(new ArrayList<Object>(0) {
-            @Override
-            public boolean add(final Object o) {
-                annotationDefault = o;
-                return super.add(o);
-            }
-        });
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        AnnotationNode an = new AnnotationNode(desc);
-        if (visible) {
-            if (visibleAnnotations == null) {
-                visibleAnnotations = new ArrayList<AnnotationNode>(1);
-            }
-            visibleAnnotations.add(an);
-        } else {
-            if (invisibleAnnotations == null) {
-                invisibleAnnotations = new ArrayList<AnnotationNode>(1);
-            }
-            invisibleAnnotations.add(an);
-        }
-        return an;
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        AnnotationNode an = new AnnotationNode(desc);
-        if (visible) {
-            if (visibleParameterAnnotations == null) {
-                int params = Type.getArgumentTypes(this.desc).length;
-                visibleParameterAnnotations = (List<AnnotationNode>[]) new List<?>[params];
-            }
-            if (visibleParameterAnnotations[parameter] == null) {
-                visibleParameterAnnotations[parameter] = new ArrayList<AnnotationNode>(
-                        1);
-            }
-            visibleParameterAnnotations[parameter].add(an);
-        } else {
-            if (invisibleParameterAnnotations == null) {
-                int params = Type.getArgumentTypes(this.desc).length;
-                invisibleParameterAnnotations = (List<AnnotationNode>[]) new List<?>[params];
-            }
-            if (invisibleParameterAnnotations[parameter] == null) {
-                invisibleParameterAnnotations[parameter] = new ArrayList<AnnotationNode>(
-                        1);
-            }
-            invisibleParameterAnnotations[parameter].add(an);
-        }
-        return an;
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        if (attrs == null) {
-            attrs = new ArrayList<Attribute>(1);
-        }
-        attrs.add(attr);
-    }
-
-    @Override
-    public void visitCode() {
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        instructions.add(new FrameNode(type, nLocal, local == null ? null
-                : getLabelNodes(local), nStack, stack == null ? null
-                : getLabelNodes(stack)));
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        instructions.add(new InsnNode(opcode));
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        instructions.add(new IntInsnNode(opcode, operand));
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        instructions.add(new VarInsnNode(opcode, var));
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        instructions.add(new TypeInsnNode(opcode, type));
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        instructions.add(new FieldInsnNode(opcode, owner, name, desc));
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        instructions.add(new MethodInsnNode(opcode, owner, name, desc));
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        instructions.add(new InvokeDynamicInsnNode(name, desc, bsm, bsmArgs));
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        instructions.add(new JumpInsnNode(opcode, getLabelNode(label)));
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        instructions.add(getLabelNode(label));
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        instructions.add(new LdcInsnNode(cst));
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        instructions.add(new IincInsnNode(var, increment));
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        instructions.add(new TableSwitchInsnNode(min, max, getLabelNode(dflt),
-                getLabelNodes(labels)));
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        instructions.add(new LookupSwitchInsnNode(getLabelNode(dflt), keys,
-                getLabelNodes(labels)));
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        instructions.add(new MultiANewArrayInsnNode(desc, dims));
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        tryCatchBlocks.add(new TryCatchBlockNode(getLabelNode(start),
-                getLabelNode(end), getLabelNode(handler), type));
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        localVariables.add(new LocalVariableNode(name, desc, signature,
-                getLabelNode(start), getLabelNode(end), index));
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        instructions.add(new LineNumberNode(line, getLabelNode(start)));
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        this.maxStack = maxStack;
-        this.maxLocals = maxLocals;
-    }
-
-    @Override
-    public void visitEnd() {
-    }
-
-    /**
-     * Returns the LabelNode corresponding to the given Label. Creates a new
-     * LabelNode if necessary. The default implementation of this method uses
-     * the {@link Label#info} field to store associations between labels and
-     * label nodes.
-     * 
-     * @param l
-     *            a Label.
-     * @return the LabelNode corresponding to l.
-     */
-    protected LabelNode getLabelNode(final Label l) {
-        if (!(l.info instanceof LabelNode)) {
-            l.info = new LabelNode();
-        }
-        return (LabelNode) l.info;
-    }
-
-    private LabelNode[] getLabelNodes(final Label[] l) {
-        LabelNode[] nodes = new LabelNode[l.length];
-        for (int i = 0; i < l.length; ++i) {
-            nodes[i] = getLabelNode(l[i]);
-        }
-        return nodes;
-    }
-
-    private Object[] getLabelNodes(final Object[] objs) {
-        Object[] nodes = new Object[objs.length];
-        for (int i = 0; i < objs.length; ++i) {
-            Object o = objs[i];
-            if (o instanceof Label) {
-                o = getLabelNode((Label) o);
-            }
-            nodes[i] = o;
-        }
-        return nodes;
-    }
-
-    // ------------------------------------------------------------------------
-    // Accept method
-    // ------------------------------------------------------------------------
-
-    /**
-     * Checks that this method node is compatible with the given ASM API
-     * version. This methods checks that this node, and all its nodes
-     * recursively, do not contain elements that were introduced in more recent
-     * versions of the ASM API than the given version.
-     * 
-     * @param api
-     *            an ASM API version. Must be one of {@link Opcodes#ASM4}.
-     */
-    public void check(final int api) {
-        // nothing to do
-    }
-
-    /**
-     * Makes the given class visitor visit this method.
-     * 
-     * @param cv
-     *            a class visitor.
-     */
-    public void accept(final ClassVisitor cv) {
-        String[] exceptions = new String[this.exceptions.size()];
-        this.exceptions.toArray(exceptions);
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                exceptions);
-        if (mv != null) {
-            accept(mv);
-        }
-    }
-
-    /**
-     * Makes the given method visitor visit this method.
-     * 
-     * @param mv
-     *            a method visitor.
-     */
-    public void accept(final MethodVisitor mv) {
-        // visits the method attributes
-        int i, j, n;
-        if (annotationDefault != null) {
-            AnnotationVisitor av = mv.visitAnnotationDefault();
-            AnnotationNode.accept(av, null, annotationDefault);
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-        n = visibleAnnotations == null ? 0 : visibleAnnotations.size();
-        for (i = 0; i < n; ++i) {
-            AnnotationNode an = visibleAnnotations.get(i);
-            an.accept(mv.visitAnnotation(an.desc, true));
-        }
-        n = invisibleAnnotations == null ? 0 : invisibleAnnotations.size();
-        for (i = 0; i < n; ++i) {
-            AnnotationNode an = invisibleAnnotations.get(i);
-            an.accept(mv.visitAnnotation(an.desc, false));
-        }
-        n = visibleParameterAnnotations == null ? 0
-                : visibleParameterAnnotations.length;
-        for (i = 0; i < n; ++i) {
-            List<?> l = visibleParameterAnnotations[i];
-            if (l == null) {
-                continue;
-            }
-            for (j = 0; j < l.size(); ++j) {
-                AnnotationNode an = (AnnotationNode) l.get(j);
-                an.accept(mv.visitParameterAnnotation(i, an.desc, true));
-            }
-        }
-        n = invisibleParameterAnnotations == null ? 0
-                : invisibleParameterAnnotations.length;
-        for (i = 0; i < n; ++i) {
-            List<?> l = invisibleParameterAnnotations[i];
-            if (l == null) {
-                continue;
-            }
-            for (j = 0; j < l.size(); ++j) {
-                AnnotationNode an = (AnnotationNode) l.get(j);
-                an.accept(mv.visitParameterAnnotation(i, an.desc, false));
-            }
-        }
-        if (visited) {
-            instructions.resetLabels();
-        }
-        n = attrs == null ? 0 : attrs.size();
-        for (i = 0; i < n; ++i) {
-            mv.visitAttribute(attrs.get(i));
-        }
-        // visits the method's code
-        if (instructions.size() > 0) {
-            mv.visitCode();
-            // visits try catch blocks
-            n = tryCatchBlocks == null ? 0 : tryCatchBlocks.size();
-            for (i = 0; i < n; ++i) {
-                tryCatchBlocks.get(i).accept(mv);
-            }
-            // visits instructions
-            instructions.accept(mv);
-            // visits local variables
-            n = localVariables == null ? 0 : localVariables.size();
-            for (i = 0; i < n; ++i) {
-                localVariables.get(i).accept(mv);
-            }
-            // visits maxs
-            mv.visitMaxs(maxStack, maxLocals);
-            visited = true;
-        }
-        mv.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/MultiANewArrayInsnNode.java b/asm4/src/org/objectweb/asm/tree/MultiANewArrayInsnNode.java
deleted file mode 100644
index 4954890..0000000
--- a/asm4/src/org/objectweb/asm/tree/MultiANewArrayInsnNode.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents a MULTIANEWARRAY instruction.
- * 
- * @author Eric Bruneton
- */
-public class MultiANewArrayInsnNode extends AbstractInsnNode {
-
-    /**
-     * An array type descriptor (see {@link org.objectweb.asm.Type}).
-     */
-    public String desc;
-
-    /**
-     * Number of dimensions of the array to allocate.
-     */
-    public int dims;
-
-    /**
-     * Constructs a new {@link MultiANewArrayInsnNode}.
-     * 
-     * @param desc
-     *            an array type descriptor (see {@link org.objectweb.asm.Type}).
-     * @param dims
-     *            number of dimensions of the array to allocate.
-     */
-    public MultiANewArrayInsnNode(final String desc, final int dims) {
-        super(Opcodes.MULTIANEWARRAY);
-        this.desc = desc;
-        this.dims = dims;
-    }
-
-    @Override
-    public int getType() {
-        return MULTIANEWARRAY_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitMultiANewArrayInsn(desc, dims);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new MultiANewArrayInsnNode(desc, dims);
-    }
-
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/TableSwitchInsnNode.java b/asm4/src/org/objectweb/asm/tree/TableSwitchInsnNode.java
deleted file mode 100644
index 3b47340..0000000
--- a/asm4/src/org/objectweb/asm/tree/TableSwitchInsnNode.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents a TABLESWITCH instruction.
- * 
- * @author Eric Bruneton
- */
-public class TableSwitchInsnNode extends AbstractInsnNode {
-
-    /**
-     * The minimum key value.
-     */
-    public int min;
-
-    /**
-     * The maximum key value.
-     */
-    public int max;
-
-    /**
-     * Beginning of the default handler block.
-     */
-    public LabelNode dflt;
-
-    /**
-     * Beginnings of the handler blocks. This list is a list of
-     * {@link LabelNode} objects.
-     */
-    public List<LabelNode> labels;
-
-    /**
-     * Constructs a new {@link TableSwitchInsnNode}.
-     * 
-     * @param min
-     *            the minimum key value.
-     * @param max
-     *            the maximum key value.
-     * @param dflt
-     *            beginning of the default handler block.
-     * @param labels
-     *            beginnings of the handler blocks. <tt>labels[i]</tt> is the
-     *            beginning of the handler block for the <tt>min + i</tt> key.
-     */
-    public TableSwitchInsnNode(final int min, final int max,
-            final LabelNode dflt, final LabelNode... labels) {
-        super(Opcodes.TABLESWITCH);
-        this.min = min;
-        this.max = max;
-        this.dflt = dflt;
-        this.labels = new ArrayList<LabelNode>();
-        if (labels != null) {
-            this.labels.addAll(Arrays.asList(labels));
-        }
-    }
-
-    @Override
-    public int getType() {
-        return TABLESWITCH_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        Label[] labels = new Label[this.labels.size()];
-        for (int i = 0; i < labels.length; ++i) {
-            labels[i] = this.labels.get(i).getLabel();
-        }
-        mv.visitTableSwitchInsn(min, max, dflt.getLabel(), labels);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new TableSwitchInsnNode(min, max, clone(dflt, labels), clone(
-                this.labels, labels));
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/TryCatchBlockNode.java b/asm4/src/org/objectweb/asm/tree/TryCatchBlockNode.java
deleted file mode 100644
index e859d2b..0000000
--- a/asm4/src/org/objectweb/asm/tree/TryCatchBlockNode.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a try catch block.
- * 
- * @author Eric Bruneton
- */
-public class TryCatchBlockNode {
-
-    /**
-     * Beginning of the exception handler's scope (inclusive).
-     */
-    public LabelNode start;
-
-    /**
-     * End of the exception handler's scope (exclusive).
-     */
-    public LabelNode end;
-
-    /**
-     * Beginning of the exception handler's code.
-     */
-    public LabelNode handler;
-
-    /**
-     * Internal name of the type of exceptions handled by the handler. May be
-     * <tt>null</tt> to catch any exceptions (for "finally" blocks).
-     */
-    public String type;
-
-    /**
-     * Constructs a new {@link TryCatchBlockNode}.
-     * 
-     * @param start
-     *            beginning of the exception handler's scope (inclusive).
-     * @param end
-     *            end of the exception handler's scope (exclusive).
-     * @param handler
-     *            beginning of the exception handler's code.
-     * @param type
-     *            internal name of the type of exceptions handled by the
-     *            handler, or <tt>null</tt> to catch any exceptions (for
-     *            "finally" blocks).
-     */
-    public TryCatchBlockNode(final LabelNode start, final LabelNode end,
-            final LabelNode handler, final String type) {
-        this.start = start;
-        this.end = end;
-        this.handler = handler;
-        this.type = type;
-    }
-
-    /**
-     * Makes the given visitor visit this try catch block.
-     * 
-     * @param mv
-     *            a method visitor.
-     */
-    public void accept(final MethodVisitor mv) {
-        mv.visitTryCatchBlock(start.getLabel(), end.getLabel(),
-                handler == null ? null : handler.getLabel(), type);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/TypeInsnNode.java b/asm4/src/org/objectweb/asm/tree/TypeInsnNode.java
deleted file mode 100644
index 85e0dc1..0000000
--- a/asm4/src/org/objectweb/asm/tree/TypeInsnNode.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a type instruction. A type instruction is an
- * instruction that takes a type descriptor as parameter.
- * 
- * @author Eric Bruneton
- */
-public class TypeInsnNode extends AbstractInsnNode {
-
-    /**
-     * The operand of this instruction. This operand is an internal name (see
-     * {@link org.objectweb.asm.Type}).
-     */
-    public String desc;
-
-    /**
-     * Constructs a new {@link TypeInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the type instruction to be constructed. This
-     *            opcode must be NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.
-     * @param desc
-     *            the operand of the instruction to be constructed. This operand
-     *            is an internal name (see {@link org.objectweb.asm.Type}).
-     */
-    public TypeInsnNode(final int opcode, final String desc) {
-        super(opcode);
-        this.desc = desc;
-    }
-
-    /**
-     * Sets the opcode of this instruction.
-     * 
-     * @param opcode
-     *            the new instruction opcode. This opcode must be NEW,
-     *            ANEWARRAY, CHECKCAST or INSTANCEOF.
-     */
-    public void setOpcode(final int opcode) {
-        this.opcode = opcode;
-    }
-
-    @Override
-    public int getType() {
-        return TYPE_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitTypeInsn(opcode, desc);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new TypeInsnNode(opcode, desc);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/VarInsnNode.java b/asm4/src/org/objectweb/asm/tree/VarInsnNode.java
deleted file mode 100644
index a82266d..0000000
--- a/asm4/src/org/objectweb/asm/tree/VarInsnNode.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.Map;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a local variable instruction. A local variable
- * instruction is an instruction that loads or stores the value of a local
- * variable.
- * 
- * @author Eric Bruneton
- */
-public class VarInsnNode extends AbstractInsnNode {
-
-    /**
-     * The operand of this instruction. This operand is the index of a local
-     * variable.
-     */
-    public int var;
-
-    /**
-     * Constructs a new {@link VarInsnNode}.
-     * 
-     * @param opcode
-     *            the opcode of the local variable instruction to be
-     *            constructed. This opcode must be ILOAD, LLOAD, FLOAD, DLOAD,
-     *            ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RET.
-     * @param var
-     *            the operand of the instruction to be constructed. This operand
-     *            is the index of a local variable.
-     */
-    public VarInsnNode(final int opcode, final int var) {
-        super(opcode);
-        this.var = var;
-    }
-
-    /**
-     * Sets the opcode of this instruction.
-     * 
-     * @param opcode
-     *            the new instruction opcode. This opcode must be ILOAD, LLOAD,
-     *            FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or
-     *            RET.
-     */
-    public void setOpcode(final int opcode) {
-        this.opcode = opcode;
-    }
-
-    @Override
-    public int getType() {
-        return VAR_INSN;
-    }
-
-    @Override
-    public void accept(final MethodVisitor mv) {
-        mv.visitVarInsn(opcode, var);
-    }
-
-    @Override
-    public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
-        return new VarInsnNode(opcode, var);
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/Analyzer.java b/asm4/src/org/objectweb/asm/tree/analysis/Analyzer.java
deleted file mode 100644
index 90aed9b..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/Analyzer.java
+++ /dev/null
@@ -1,549 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.InsnList;
-import org.objectweb.asm.tree.JumpInsnNode;
-import org.objectweb.asm.tree.LabelNode;
-import org.objectweb.asm.tree.LookupSwitchInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.TableSwitchInsnNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-import org.objectweb.asm.tree.VarInsnNode;
-
-/**
- * A semantic bytecode analyzer. <i>This class does not fully check that JSR and
- * RET instructions are valid.</i>
- * 
- * @param <V>
- *            type of the Value used for the analysis.
- * 
- * @author Eric Bruneton
- */
-public class Analyzer<V extends Value> implements Opcodes {
-
-    private final Interpreter<V> interpreter;
-
-    private int n;
-
-    private InsnList insns;
-
-    private List<TryCatchBlockNode>[] handlers;
-
-    private Frame<V>[] frames;
-
-    private Subroutine[] subroutines;
-
-    private boolean[] queued;
-
-    private int[] queue;
-
-    private int top;
-
-    /**
-     * Constructs a new {@link Analyzer}.
-     * 
-     * @param interpreter
-     *            the interpreter to be used to symbolically interpret the
-     *            bytecode instructions.
-     */
-    public Analyzer(final Interpreter<V> interpreter) {
-        this.interpreter = interpreter;
-    }
-
-    /**
-     * Analyzes the given method.
-     * 
-     * @param owner
-     *            the internal name of the class to which the method belongs.
-     * @param m
-     *            the method to be analyzed.
-     * @return the symbolic state of the execution stack frame at each bytecode
-     *         instruction of the method. The size of the returned array is
-     *         equal to the number of instructions (and labels) of the method. A
-     *         given frame is <tt>null</tt> if and only if the corresponding
-     *         instruction cannot be reached (dead code).
-     * @throws AnalyzerException
-     *             if a problem occurs during the analysis.
-     */
-    public Frame<V>[] analyze(final String owner, final MethodNode m)
-            throws AnalyzerException {
-        if ((m.access & (ACC_ABSTRACT | ACC_NATIVE)) != 0) {
-            frames = (Frame<V>[]) new Frame<?>[0];
-            return frames;
-        }
-        n = m.instructions.size();
-        insns = m.instructions;
-        handlers = (List<TryCatchBlockNode>[]) new List<?>[n];
-        frames = (Frame<V>[]) new Frame<?>[n];
-        subroutines = new Subroutine[n];
-        queued = new boolean[n];
-        queue = new int[n];
-        top = 0;
-
-        // computes exception handlers for each instruction
-        for (int i = 0; i < m.tryCatchBlocks.size(); ++i) {
-            TryCatchBlockNode tcb = m.tryCatchBlocks.get(i);
-            int begin = insns.indexOf(tcb.start);
-            int end = insns.indexOf(tcb.end);
-            for (int j = begin; j < end; ++j) {
-                List<TryCatchBlockNode> insnHandlers = handlers[j];
-                if (insnHandlers == null) {
-                    insnHandlers = new ArrayList<TryCatchBlockNode>();
-                    handlers[j] = insnHandlers;
-                }
-                insnHandlers.add(tcb);
-            }
-        }
-
-        // computes the subroutine for each instruction:
-        Subroutine main = new Subroutine(null, m.maxLocals, null);
-        List<AbstractInsnNode> subroutineCalls = new ArrayList<AbstractInsnNode>();
-        Map<LabelNode, Subroutine> subroutineHeads = new HashMap<LabelNode, Subroutine>();
-        findSubroutine(0, main, subroutineCalls);
-        while (!subroutineCalls.isEmpty()) {
-            JumpInsnNode jsr = (JumpInsnNode) subroutineCalls.remove(0);
-            Subroutine sub = subroutineHeads.get(jsr.label);
-            if (sub == null) {
-                sub = new Subroutine(jsr.label, m.maxLocals, jsr);
-                subroutineHeads.put(jsr.label, sub);
-                findSubroutine(insns.indexOf(jsr.label), sub, subroutineCalls);
-            } else {
-                sub.callers.add(jsr);
-            }
-        }
-        for (int i = 0; i < n; ++i) {
-            if (subroutines[i] != null && subroutines[i].start == null) {
-                subroutines[i] = null;
-            }
-        }
-
-        // initializes the data structures for the control flow analysis
-        Frame<V> current = newFrame(m.maxLocals, m.maxStack);
-        Frame<V> handler = newFrame(m.maxLocals, m.maxStack);
-        current.setReturn(interpreter.newValue(Type.getReturnType(m.desc)));
-        Type[] args = Type.getArgumentTypes(m.desc);
-        int local = 0;
-        if ((m.access & ACC_STATIC) == 0) {
-            Type ctype = Type.getObjectType(owner);
-            current.setLocal(local++, interpreter.newValue(ctype));
-        }
-        for (int i = 0; i < args.length; ++i) {
-            current.setLocal(local++, interpreter.newValue(args[i]));
-            if (args[i].getSize() == 2) {
-                current.setLocal(local++, interpreter.newValue(null));
-            }
-        }
-        while (local < m.maxLocals) {
-            current.setLocal(local++, interpreter.newValue(null));
-        }
-        merge(0, current, null);
-
-        init(owner, m);
-
-        // control flow analysis
-        while (top > 0) {
-            int insn = queue[--top];
-            Frame<V> f = frames[insn];
-            Subroutine subroutine = subroutines[insn];
-            queued[insn] = false;
-
-            AbstractInsnNode insnNode = null;
-            try {
-                insnNode = m.instructions.get(insn);
-                int insnOpcode = insnNode.getOpcode();
-                int insnType = insnNode.getType();
-
-                if (insnType == AbstractInsnNode.LABEL
-                        || insnType == AbstractInsnNode.LINE
-                        || insnType == AbstractInsnNode.FRAME) {
-                    merge(insn + 1, f, subroutine);
-                    newControlFlowEdge(insn, insn + 1);
-                } else {
-                    current.init(f).execute(insnNode, interpreter);
-                    subroutine = subroutine == null ? null : subroutine.copy();
-
-                    if (insnNode instanceof JumpInsnNode) {
-                        JumpInsnNode j = (JumpInsnNode) insnNode;
-                        if (insnOpcode != GOTO && insnOpcode != JSR) {
-                            merge(insn + 1, current, subroutine);
-                            newControlFlowEdge(insn, insn + 1);
-                        }
-                        int jump = insns.indexOf(j.label);
-                        if (insnOpcode == JSR) {
-                            merge(jump, current, new Subroutine(j.label,
-                                    m.maxLocals, j));
-                        } else {
-                            merge(jump, current, subroutine);
-                        }
-                        newControlFlowEdge(insn, jump);
-                    } else if (insnNode instanceof LookupSwitchInsnNode) {
-                        LookupSwitchInsnNode lsi = (LookupSwitchInsnNode) insnNode;
-                        int jump = insns.indexOf(lsi.dflt);
-                        merge(jump, current, subroutine);
-                        newControlFlowEdge(insn, jump);
-                        for (int j = 0; j < lsi.labels.size(); ++j) {
-                            LabelNode label = lsi.labels.get(j);
-                            jump = insns.indexOf(label);
-                            merge(jump, current, subroutine);
-                            newControlFlowEdge(insn, jump);
-                        }
-                    } else if (insnNode instanceof TableSwitchInsnNode) {
-                        TableSwitchInsnNode tsi = (TableSwitchInsnNode) insnNode;
-                        int jump = insns.indexOf(tsi.dflt);
-                        merge(jump, current, subroutine);
-                        newControlFlowEdge(insn, jump);
-                        for (int j = 0; j < tsi.labels.size(); ++j) {
-                            LabelNode label = tsi.labels.get(j);
-                            jump = insns.indexOf(label);
-                            merge(jump, current, subroutine);
-                            newControlFlowEdge(insn, jump);
-                        }
-                    } else if (insnOpcode == RET) {
-                        if (subroutine == null) {
-                            throw new AnalyzerException(insnNode,
-                                    "RET instruction outside of a sub routine");
-                        }
-                        for (int i = 0; i < subroutine.callers.size(); ++i) {
-                            JumpInsnNode caller = subroutine.callers.get(i);
-                            int call = insns.indexOf(caller);
-                            if (frames[call] != null) {
-                                merge(call + 1, frames[call], current,
-                                        subroutines[call], subroutine.access);
-                                newControlFlowEdge(insn, call + 1);
-                            }
-                        }
-                    } else if (insnOpcode != ATHROW
-                            && (insnOpcode < IRETURN || insnOpcode > RETURN)) {
-                        if (subroutine != null) {
-                            if (insnNode instanceof VarInsnNode) {
-                                int var = ((VarInsnNode) insnNode).var;
-                                subroutine.access[var] = true;
-                                if (insnOpcode == LLOAD || insnOpcode == DLOAD
-                                        || insnOpcode == LSTORE
-                                        || insnOpcode == DSTORE) {
-                                    subroutine.access[var + 1] = true;
-                                }
-                            } else if (insnNode instanceof IincInsnNode) {
-                                int var = ((IincInsnNode) insnNode).var;
-                                subroutine.access[var] = true;
-                            }
-                        }
-                        merge(insn + 1, current, subroutine);
-                        newControlFlowEdge(insn, insn + 1);
-                    }
-                }
-
-                List<TryCatchBlockNode> insnHandlers = handlers[insn];
-                if (insnHandlers != null) {
-                    for (int i = 0; i < insnHandlers.size(); ++i) {
-                        TryCatchBlockNode tcb = insnHandlers.get(i);
-                        Type type;
-                        if (tcb.type == null) {
-                            type = Type.getObjectType("java/lang/Throwable");
-                        } else {
-                            type = Type.getObjectType(tcb.type);
-                        }
-                        int jump = insns.indexOf(tcb.handler);
-                        if (newControlFlowExceptionEdge(insn, tcb)) {
-                            handler.init(f);
-                            handler.clearStack();
-                            handler.push(interpreter.newValue(type));
-                            merge(jump, handler, subroutine);
-                        }
-                    }
-                }
-            } catch (AnalyzerException e) {
-                throw new AnalyzerException(e.node, "Error at instruction "
-                        + insn + ": " + e.getMessage(), e);
-            } catch (Exception e) {
-                throw new AnalyzerException(insnNode, "Error at instruction "
-                        + insn + ": " + e.getMessage(), e);
-            }
-        }
-
-        return frames;
-    }
-
-    private void findSubroutine(int insn, final Subroutine sub,
-            final List<AbstractInsnNode> calls) throws AnalyzerException {
-        while (true) {
-            if (insn < 0 || insn >= n) {
-                throw new AnalyzerException(null,
-                        "Execution can fall off end of the code");
-            }
-            if (subroutines[insn] != null) {
-                return;
-            }
-            subroutines[insn] = sub.copy();
-            AbstractInsnNode node = insns.get(insn);
-
-            // calls findSubroutine recursively on normal successors
-            if (node instanceof JumpInsnNode) {
-                if (node.getOpcode() == JSR) {
-                    // do not follow a JSR, it leads to another subroutine!
-                    calls.add(node);
-                } else {
-                    JumpInsnNode jnode = (JumpInsnNode) node;
-                    findSubroutine(insns.indexOf(jnode.label), sub, calls);
-                }
-            } else if (node instanceof TableSwitchInsnNode) {
-                TableSwitchInsnNode tsnode = (TableSwitchInsnNode) node;
-                findSubroutine(insns.indexOf(tsnode.dflt), sub, calls);
-                for (int i = tsnode.labels.size() - 1; i >= 0; --i) {
-                    LabelNode l = tsnode.labels.get(i);
-                    findSubroutine(insns.indexOf(l), sub, calls);
-                }
-            } else if (node instanceof LookupSwitchInsnNode) {
-                LookupSwitchInsnNode lsnode = (LookupSwitchInsnNode) node;
-                findSubroutine(insns.indexOf(lsnode.dflt), sub, calls);
-                for (int i = lsnode.labels.size() - 1; i >= 0; --i) {
-                    LabelNode l = lsnode.labels.get(i);
-                    findSubroutine(insns.indexOf(l), sub, calls);
-                }
-            }
-
-            // calls findSubroutine recursively on exception handler successors
-            List<TryCatchBlockNode> insnHandlers = handlers[insn];
-            if (insnHandlers != null) {
-                for (int i = 0; i < insnHandlers.size(); ++i) {
-                    TryCatchBlockNode tcb = insnHandlers.get(i);
-                    findSubroutine(insns.indexOf(tcb.handler), sub, calls);
-                }
-            }
-
-            // if insn does not falls through to the next instruction, return.
-            switch (node.getOpcode()) {
-            case GOTO:
-            case RET:
-            case TABLESWITCH:
-            case LOOKUPSWITCH:
-            case IRETURN:
-            case LRETURN:
-            case FRETURN:
-            case DRETURN:
-            case ARETURN:
-            case RETURN:
-            case ATHROW:
-                return;
-            }
-            insn++;
-        }
-    }
-
-    /**
-     * Returns the symbolic stack frame for each instruction of the last
-     * recently analyzed method.
-     * 
-     * @return the symbolic state of the execution stack frame at each bytecode
-     *         instruction of the method. The size of the returned array is
-     *         equal to the number of instructions (and labels) of the method. A
-     *         given frame is <tt>null</tt> if the corresponding instruction
-     *         cannot be reached, or if an error occured during the analysis of
-     *         the method.
-     */
-    public Frame<V>[] getFrames() {
-        return frames;
-    }
-
-    /**
-     * Returns the exception handlers for the given instruction.
-     * 
-     * @param insn
-     *            the index of an instruction of the last recently analyzed
-     *            method.
-     * @return a list of {@link TryCatchBlockNode} objects.
-     */
-    public List<TryCatchBlockNode> getHandlers(final int insn) {
-        return handlers[insn];
-    }
-
-    /**
-     * Initializes this analyzer. This method is called just before the
-     * execution of control flow analysis loop in #analyze. The default
-     * implementation of this method does nothing.
-     * 
-     * @param owner
-     *            the internal name of the class to which the method belongs.
-     * @param m
-     *            the method to be analyzed.
-     * @throws AnalyzerException
-     *             if a problem occurs.
-     */
-    protected void init(String owner, MethodNode m) throws AnalyzerException {
-    }
-
-    /**
-     * Constructs a new frame with the given size.
-     * 
-     * @param nLocals
-     *            the maximum number of local variables of the frame.
-     * @param nStack
-     *            the maximum stack size of the frame.
-     * @return the created frame.
-     */
-    protected Frame<V> newFrame(final int nLocals, final int nStack) {
-        return new Frame<V>(nLocals, nStack);
-    }
-
-    /**
-     * Constructs a new frame that is identical to the given frame.
-     * 
-     * @param src
-     *            a frame.
-     * @return the created frame.
-     */
-    protected Frame<V> newFrame(final Frame<? extends V> src) {
-        return new Frame<V>(src);
-    }
-
-    /**
-     * Creates a control flow graph edge. The default implementation of this
-     * method does nothing. It can be overriden in order to construct the
-     * control flow graph of a method (this method is called by the
-     * {@link #analyze analyze} method during its visit of the method's code).
-     * 
-     * @param insn
-     *            an instruction index.
-     * @param successor
-     *            index of a successor instruction.
-     */
-    protected void newControlFlowEdge(final int insn, final int successor) {
-    }
-
-    /**
-     * Creates a control flow graph edge corresponding to an exception handler.
-     * The default implementation of this method does nothing. It can be
-     * overridden in order to construct the control flow graph of a method (this
-     * method is called by the {@link #analyze analyze} method during its visit
-     * of the method's code).
-     * 
-     * @param insn
-     *            an instruction index.
-     * @param successor
-     *            index of a successor instruction.
-     * @return true if this edge must be considered in the data flow analysis
-     *         performed by this analyzer, or false otherwise. The default
-     *         implementation of this method always returns true.
-     */
-    protected boolean newControlFlowExceptionEdge(final int insn,
-            final int successor) {
-        return true;
-    }
-
-    /**
-     * Creates a control flow graph edge corresponding to an exception handler.
-     * The default implementation of this method delegates to
-     * {@link #newControlFlowExceptionEdge(int, int)
-     * newControlFlowExceptionEdge(int, int)}. It can be overridden in order to
-     * construct the control flow graph of a method (this method is called by
-     * the {@link #analyze analyze} method during its visit of the method's
-     * code).
-     * 
-     * @param insn
-     *            an instruction index.
-     * @param tcb
-     *            TryCatchBlockNode corresponding to this edge.
-     * @return true if this edge must be considered in the data flow analysis
-     *         performed by this analyzer, or false otherwise. The default
-     *         implementation of this method delegates to
-     *         {@link #newControlFlowExceptionEdge(int, int)
-     *         newControlFlowExceptionEdge(int, int)}.
-     */
-    protected boolean newControlFlowExceptionEdge(final int insn,
-            final TryCatchBlockNode tcb) {
-        return newControlFlowExceptionEdge(insn, insns.indexOf(tcb.handler));
-    }
-
-    // -------------------------------------------------------------------------
-
-    private void merge(final int insn, final Frame<V> frame,
-            final Subroutine subroutine) throws AnalyzerException {
-        Frame<V> oldFrame = frames[insn];
-        Subroutine oldSubroutine = subroutines[insn];
-        boolean changes;
-
-        if (oldFrame == null) {
-            frames[insn] = newFrame(frame);
-            changes = true;
-        } else {
-            changes = oldFrame.merge(frame, interpreter);
-        }
-
-        if (oldSubroutine == null) {
-            if (subroutine != null) {
-                subroutines[insn] = subroutine.copy();
-                changes = true;
-            }
-        } else {
-            if (subroutine != null) {
-                changes |= oldSubroutine.merge(subroutine);
-            }
-        }
-        if (changes && !queued[insn]) {
-            queued[insn] = true;
-            queue[top++] = insn;
-        }
-    }
-
-    private void merge(final int insn, final Frame<V> beforeJSR,
-            final Frame<V> afterRET, final Subroutine subroutineBeforeJSR,
-            final boolean[] access) throws AnalyzerException {
-        Frame<V> oldFrame = frames[insn];
-        Subroutine oldSubroutine = subroutines[insn];
-        boolean changes;
-
-        afterRET.merge(beforeJSR, access);
-
-        if (oldFrame == null) {
-            frames[insn] = newFrame(afterRET);
-            changes = true;
-        } else {
-            changes = oldFrame.merge(afterRET, interpreter);
-        }
-
-        if (oldSubroutine != null && subroutineBeforeJSR != null) {
-            changes |= oldSubroutine.merge(subroutineBeforeJSR);
-        }
-        if (changes && !queued[insn]) {
-            queued[insn] = true;
-            queue[top++] = insn;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/AnalyzerException.java b/asm4/src/org/objectweb/asm/tree/analysis/AnalyzerException.java
deleted file mode 100644
index 5be70da..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/AnalyzerException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import org.objectweb.asm.tree.AbstractInsnNode;
-
-/**
- * Thrown if a problem occurs during the analysis of a method.
- * 
- * @author Bing Ran
- * @author Eric Bruneton
- */
-public class AnalyzerException extends Exception {
-
-    public final AbstractInsnNode node;
-
-    public AnalyzerException(final AbstractInsnNode node, final String msg) {
-        super(msg);
-        this.node = node;
-    }
-
-    public AnalyzerException(final AbstractInsnNode node, final String msg,
-            final Throwable exception) {
-        super(msg, exception);
-        this.node = node;
-    }
-
-    public AnalyzerException(final AbstractInsnNode node, final String msg,
-            final Object expected, final Value encountered) {
-        super((msg == null ? "Expected " : msg + ": expected ") + expected
-                + ", but found " + encountered);
-        this.node = node;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/BasicInterpreter.java b/asm4/src/org/objectweb/asm/tree/analysis/BasicInterpreter.java
deleted file mode 100644
index 119bec2..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/BasicInterpreter.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.IntInsnNode;
-import org.objectweb.asm.tree.InvokeDynamicInsnNode;
-import org.objectweb.asm.tree.LdcInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MultiANewArrayInsnNode;
-import org.objectweb.asm.tree.TypeInsnNode;
-
-/**
- * An {@link Interpreter} for {@link BasicValue} values.
- * 
- * @author Eric Bruneton
- * @author Bing Ran
- */
-public class BasicInterpreter extends Interpreter<BasicValue> implements
-        Opcodes {
-
-    public BasicInterpreter() {
-        super(ASM4);
-    }
-
-    protected BasicInterpreter(final int api) {
-        super(api);
-    }
-
-    @Override
-    public BasicValue newValue(final Type type) {
-        if (type == null) {
-            return BasicValue.UNINITIALIZED_VALUE;
-        }
-        switch (type.getSort()) {
-        case Type.VOID:
-            return null;
-        case Type.BOOLEAN:
-        case Type.CHAR:
-        case Type.BYTE:
-        case Type.SHORT:
-        case Type.INT:
-            return BasicValue.INT_VALUE;
-        case Type.FLOAT:
-            return BasicValue.FLOAT_VALUE;
-        case Type.LONG:
-            return BasicValue.LONG_VALUE;
-        case Type.DOUBLE:
-            return BasicValue.DOUBLE_VALUE;
-        case Type.ARRAY:
-        case Type.OBJECT:
-            return BasicValue.REFERENCE_VALUE;
-        default:
-            throw new Error("Internal error");
-        }
-    }
-
-    @Override
-    public BasicValue newOperation(final AbstractInsnNode insn)
-            throws AnalyzerException {
-        switch (insn.getOpcode()) {
-        case ACONST_NULL:
-            return newValue(Type.getObjectType("null"));
-        case ICONST_M1:
-        case ICONST_0:
-        case ICONST_1:
-        case ICONST_2:
-        case ICONST_3:
-        case ICONST_4:
-        case ICONST_5:
-            return BasicValue.INT_VALUE;
-        case LCONST_0:
-        case LCONST_1:
-            return BasicValue.LONG_VALUE;
-        case FCONST_0:
-        case FCONST_1:
-        case FCONST_2:
-            return BasicValue.FLOAT_VALUE;
-        case DCONST_0:
-        case DCONST_1:
-            return BasicValue.DOUBLE_VALUE;
-        case BIPUSH:
-        case SIPUSH:
-            return BasicValue.INT_VALUE;
-        case LDC:
-            Object cst = ((LdcInsnNode) insn).cst;
-            if (cst instanceof Integer) {
-                return BasicValue.INT_VALUE;
-            } else if (cst instanceof Float) {
-                return BasicValue.FLOAT_VALUE;
-            } else if (cst instanceof Long) {
-                return BasicValue.LONG_VALUE;
-            } else if (cst instanceof Double) {
-                return BasicValue.DOUBLE_VALUE;
-            } else if (cst instanceof String) {
-                return newValue(Type.getObjectType("java/lang/String"));
-            } else if (cst instanceof Type) {
-                int sort = ((Type) cst).getSort();
-                if (sort == Type.OBJECT || sort == Type.ARRAY) {
-                    return newValue(Type.getObjectType("java/lang/Class"));
-                } else if (sort == Type.METHOD) {
-                    return newValue(Type
-                            .getObjectType("java/lang/invoke/MethodType"));
-                } else {
-                    throw new IllegalArgumentException("Illegal LDC constant "
-                            + cst);
-                }
-            } else if (cst instanceof Handle) {
-                return newValue(Type
-                        .getObjectType("java/lang/invoke/MethodHandle"));
-            } else {
-                throw new IllegalArgumentException("Illegal LDC constant "
-                        + cst);
-            }
-        case JSR:
-            return BasicValue.RETURNADDRESS_VALUE;
-        case GETSTATIC:
-            return newValue(Type.getType(((FieldInsnNode) insn).desc));
-        case NEW:
-            return newValue(Type.getObjectType(((TypeInsnNode) insn).desc));
-        default:
-            throw new Error("Internal error.");
-        }
-    }
-
-    @Override
-    public BasicValue copyOperation(final AbstractInsnNode insn,
-            final BasicValue value) throws AnalyzerException {
-        return value;
-    }
-
-    @Override
-    public BasicValue unaryOperation(final AbstractInsnNode insn,
-            final BasicValue value) throws AnalyzerException {
-        switch (insn.getOpcode()) {
-        case INEG:
-        case IINC:
-        case L2I:
-        case F2I:
-        case D2I:
-        case I2B:
-        case I2C:
-        case I2S:
-            return BasicValue.INT_VALUE;
-        case FNEG:
-        case I2F:
-        case L2F:
-        case D2F:
-            return BasicValue.FLOAT_VALUE;
-        case LNEG:
-        case I2L:
-        case F2L:
-        case D2L:
-            return BasicValue.LONG_VALUE;
-        case DNEG:
-        case I2D:
-        case L2D:
-        case F2D:
-            return BasicValue.DOUBLE_VALUE;
-        case IFEQ:
-        case IFNE:
-        case IFLT:
-        case IFGE:
-        case IFGT:
-        case IFLE:
-        case TABLESWITCH:
-        case LOOKUPSWITCH:
-        case IRETURN:
-        case LRETURN:
-        case FRETURN:
-        case DRETURN:
-        case ARETURN:
-        case PUTSTATIC:
-            return null;
-        case GETFIELD:
-            return newValue(Type.getType(((FieldInsnNode) insn).desc));
-        case NEWARRAY:
-            switch (((IntInsnNode) insn).operand) {
-            case T_BOOLEAN:
-                return newValue(Type.getType("[Z"));
-            case T_CHAR:
-                return newValue(Type.getType("[C"));
-            case T_BYTE:
-                return newValue(Type.getType("[B"));
-            case T_SHORT:
-                return newValue(Type.getType("[S"));
-            case T_INT:
-                return newValue(Type.getType("[I"));
-            case T_FLOAT:
-                return newValue(Type.getType("[F"));
-            case T_DOUBLE:
-                return newValue(Type.getType("[D"));
-            case T_LONG:
-                return newValue(Type.getType("[J"));
-            default:
-                throw new AnalyzerException(insn, "Invalid array type");
-            }
-        case ANEWARRAY:
-            String desc = ((TypeInsnNode) insn).desc;
-            return newValue(Type.getType("[" + Type.getObjectType(desc)));
-        case ARRAYLENGTH:
-            return BasicValue.INT_VALUE;
-        case ATHROW:
-            return null;
-        case CHECKCAST:
-            desc = ((TypeInsnNode) insn).desc;
-            return newValue(Type.getObjectType(desc));
-        case INSTANCEOF:
-            return BasicValue.INT_VALUE;
-        case MONITORENTER:
-        case MONITOREXIT:
-        case IFNULL:
-        case IFNONNULL:
-            return null;
-        default:
-            throw new Error("Internal error.");
-        }
-    }
-
-    @Override
-    public BasicValue binaryOperation(final AbstractInsnNode insn,
-            final BasicValue value1, final BasicValue value2)
-            throws AnalyzerException {
-        switch (insn.getOpcode()) {
-        case IALOAD:
-        case BALOAD:
-        case CALOAD:
-        case SALOAD:
-        case IADD:
-        case ISUB:
-        case IMUL:
-        case IDIV:
-        case IREM:
-        case ISHL:
-        case ISHR:
-        case IUSHR:
-        case IAND:
-        case IOR:
-        case IXOR:
-            return BasicValue.INT_VALUE;
-        case FALOAD:
-        case FADD:
-        case FSUB:
-        case FMUL:
-        case FDIV:
-        case FREM:
-            return BasicValue.FLOAT_VALUE;
-        case LALOAD:
-        case LADD:
-        case LSUB:
-        case LMUL:
-        case LDIV:
-        case LREM:
-        case LSHL:
-        case LSHR:
-        case LUSHR:
-        case LAND:
-        case LOR:
-        case LXOR:
-            return BasicValue.LONG_VALUE;
-        case DALOAD:
-        case DADD:
-        case DSUB:
-        case DMUL:
-        case DDIV:
-        case DREM:
-            return BasicValue.DOUBLE_VALUE;
-        case AALOAD:
-            return BasicValue.REFERENCE_VALUE;
-        case LCMP:
-        case FCMPL:
-        case FCMPG:
-        case DCMPL:
-        case DCMPG:
-            return BasicValue.INT_VALUE;
-        case IF_ICMPEQ:
-        case IF_ICMPNE:
-        case IF_ICMPLT:
-        case IF_ICMPGE:
-        case IF_ICMPGT:
-        case IF_ICMPLE:
-        case IF_ACMPEQ:
-        case IF_ACMPNE:
-        case PUTFIELD:
-            return null;
-        default:
-            throw new Error("Internal error.");
-        }
-    }
-
-    @Override
-    public BasicValue ternaryOperation(final AbstractInsnNode insn,
-            final BasicValue value1, final BasicValue value2,
-            final BasicValue value3) throws AnalyzerException {
-        return null;
-    }
-
-    @Override
-    public BasicValue naryOperation(final AbstractInsnNode insn,
-            final List<? extends BasicValue> values) throws AnalyzerException {
-        int opcode = insn.getOpcode();
-        if (opcode == MULTIANEWARRAY) {
-            return newValue(Type.getType(((MultiANewArrayInsnNode) insn).desc));
-        } else if (opcode == INVOKEDYNAMIC) {
-            return newValue(Type
-                    .getReturnType(((InvokeDynamicInsnNode) insn).desc));
-        } else {
-            return newValue(Type.getReturnType(((MethodInsnNode) insn).desc));
-        }
-    }
-
-    @Override
-    public void returnOperation(final AbstractInsnNode insn,
-            final BasicValue value, final BasicValue expected)
-            throws AnalyzerException {
-    }
-
-    @Override
-    public BasicValue merge(final BasicValue v, final BasicValue w) {
-        if (!v.equals(w)) {
-            return BasicValue.UNINITIALIZED_VALUE;
-        }
-        return v;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/BasicValue.java b/asm4/src/org/objectweb/asm/tree/analysis/BasicValue.java
deleted file mode 100644
index 78316ae..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/BasicValue.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import org.objectweb.asm.Type;
-
-/**
- * A {@link Value} that is represented by its type in a seven types type system.
- * This type system distinguishes the UNINITIALZED, INT, FLOAT, LONG, DOUBLE,
- * REFERENCE and RETURNADDRESS types.
- * 
- * @author Eric Bruneton
- */
-public class BasicValue implements Value {
-
-    public static final BasicValue UNINITIALIZED_VALUE = new BasicValue(null);
-
-    public static final BasicValue INT_VALUE = new BasicValue(Type.INT_TYPE);
-
-    public static final BasicValue FLOAT_VALUE = new BasicValue(Type.FLOAT_TYPE);
-
-    public static final BasicValue LONG_VALUE = new BasicValue(Type.LONG_TYPE);
-
-    public static final BasicValue DOUBLE_VALUE = new BasicValue(
-            Type.DOUBLE_TYPE);
-
-    public static final BasicValue REFERENCE_VALUE = new BasicValue(
-            Type.getObjectType("java/lang/Object"));
-
-    public static final BasicValue RETURNADDRESS_VALUE = new BasicValue(
-            Type.VOID_TYPE);
-
-    private final Type type;
-
-    public BasicValue(final Type type) {
-        this.type = type;
-    }
-
-    public Type getType() {
-        return type;
-    }
-
-    public int getSize() {
-        return type == Type.LONG_TYPE || type == Type.DOUBLE_TYPE ? 2 : 1;
-    }
-
-    public boolean isReference() {
-        return type != null
-                && (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY);
-    }
-
-    @Override
-    public boolean equals(final Object value) {
-        if (value == this) {
-            return true;
-        } else if (value instanceof BasicValue) {
-            if (type == null) {
-                return ((BasicValue) value).type == null;
-            } else {
-                return type.equals(((BasicValue) value).type);
-            }
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return type == null ? 0 : type.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        if (this == UNINITIALIZED_VALUE) {
-            return ".";
-        } else if (this == RETURNADDRESS_VALUE) {
-            return "A";
-        } else if (this == REFERENCE_VALUE) {
-            return "R";
-        } else {
-            return type.getDescriptor();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/BasicVerifier.java b/asm4/src/org/objectweb/asm/tree/analysis/BasicVerifier.java
deleted file mode 100644
index 68ab2f5..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/BasicVerifier.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.InvokeDynamicInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-
-/**
- * An extended {@link BasicInterpreter} that checks that bytecode instructions
- * are correctly used.
- * 
- * @author Eric Bruneton
- * @author Bing Ran
- */
-public class BasicVerifier extends BasicInterpreter {
-
-    public BasicVerifier() {
-        super(ASM4);
-    }
-
-    protected BasicVerifier(final int api) {
-        super(api);
-    }
-
-    @Override
-    public BasicValue copyOperation(final AbstractInsnNode insn,
-            final BasicValue value) throws AnalyzerException {
-        Value expected;
-        switch (insn.getOpcode()) {
-        case ILOAD:
-        case ISTORE:
-            expected = BasicValue.INT_VALUE;
-            break;
-        case FLOAD:
-        case FSTORE:
-            expected = BasicValue.FLOAT_VALUE;
-            break;
-        case LLOAD:
-        case LSTORE:
-            expected = BasicValue.LONG_VALUE;
-            break;
-        case DLOAD:
-        case DSTORE:
-            expected = BasicValue.DOUBLE_VALUE;
-            break;
-        case ALOAD:
-            if (!value.isReference()) {
-                throw new AnalyzerException(insn, null, "an object reference",
-                        value);
-            }
-            return value;
-        case ASTORE:
-            if (!value.isReference()
-                    && !BasicValue.RETURNADDRESS_VALUE.equals(value)) {
-                throw new AnalyzerException(insn, null,
-                        "an object reference or a return address", value);
-            }
-            return value;
-        default:
-            return value;
-        }
-        if (!expected.equals(value)) {
-            throw new AnalyzerException(insn, null, expected, value);
-        }
-        return value;
-    }
-
-    @Override
-    public BasicValue unaryOperation(final AbstractInsnNode insn,
-            final BasicValue value) throws AnalyzerException {
-        BasicValue expected;
-        switch (insn.getOpcode()) {
-        case INEG:
-        case IINC:
-        case I2F:
-        case I2L:
-        case I2D:
-        case I2B:
-        case I2C:
-        case I2S:
-        case IFEQ:
-        case IFNE:
-        case IFLT:
-        case IFGE:
-        case IFGT:
-        case IFLE:
-        case TABLESWITCH:
-        case LOOKUPSWITCH:
-        case IRETURN:
-        case NEWARRAY:
-        case ANEWARRAY:
-            expected = BasicValue.INT_VALUE;
-            break;
-        case FNEG:
-        case F2I:
-        case F2L:
-        case F2D:
-        case FRETURN:
-            expected = BasicValue.FLOAT_VALUE;
-            break;
-        case LNEG:
-        case L2I:
-        case L2F:
-        case L2D:
-        case LRETURN:
-            expected = BasicValue.LONG_VALUE;
-            break;
-        case DNEG:
-        case D2I:
-        case D2F:
-        case D2L:
-        case DRETURN:
-            expected = BasicValue.DOUBLE_VALUE;
-            break;
-        case GETFIELD:
-            expected = newValue(Type
-                    .getObjectType(((FieldInsnNode) insn).owner));
-            break;
-        case CHECKCAST:
-            if (!value.isReference()) {
-                throw new AnalyzerException(insn, null, "an object reference",
-                        value);
-            }
-            return super.unaryOperation(insn, value);
-        case ARRAYLENGTH:
-            if (!isArrayValue(value)) {
-                throw new AnalyzerException(insn, null, "an array reference",
-                        value);
-            }
-            return super.unaryOperation(insn, value);
-        case ARETURN:
-        case ATHROW:
-        case INSTANCEOF:
-        case MONITORENTER:
-        case MONITOREXIT:
-        case IFNULL:
-        case IFNONNULL:
-            if (!value.isReference()) {
-                throw new AnalyzerException(insn, null, "an object reference",
-                        value);
-            }
-            return super.unaryOperation(insn, value);
-        case PUTSTATIC:
-            expected = newValue(Type.getType(((FieldInsnNode) insn).desc));
-            break;
-        default:
-            throw new Error("Internal error.");
-        }
-        if (!isSubTypeOf(value, expected)) {
-            throw new AnalyzerException(insn, null, expected, value);
-        }
-        return super.unaryOperation(insn, value);
-    }
-
-    @Override
-    public BasicValue binaryOperation(final AbstractInsnNode insn,
-            final BasicValue value1, final BasicValue value2)
-            throws AnalyzerException {
-        BasicValue expected1;
-        BasicValue expected2;
-        switch (insn.getOpcode()) {
-        case IALOAD:
-            expected1 = newValue(Type.getType("[I"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case BALOAD:
-            if (isSubTypeOf(value1, newValue(Type.getType("[Z")))) {
-                expected1 = newValue(Type.getType("[Z"));
-            } else {
-                expected1 = newValue(Type.getType("[B"));
-            }
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case CALOAD:
-            expected1 = newValue(Type.getType("[C"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case SALOAD:
-            expected1 = newValue(Type.getType("[S"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case LALOAD:
-            expected1 = newValue(Type.getType("[J"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case FALOAD:
-            expected1 = newValue(Type.getType("[F"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case DALOAD:
-            expected1 = newValue(Type.getType("[D"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case AALOAD:
-            expected1 = newValue(Type.getType("[Ljava/lang/Object;"));
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case IADD:
-        case ISUB:
-        case IMUL:
-        case IDIV:
-        case IREM:
-        case ISHL:
-        case ISHR:
-        case IUSHR:
-        case IAND:
-        case IOR:
-        case IXOR:
-        case IF_ICMPEQ:
-        case IF_ICMPNE:
-        case IF_ICMPLT:
-        case IF_ICMPGE:
-        case IF_ICMPGT:
-        case IF_ICMPLE:
-            expected1 = BasicValue.INT_VALUE;
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case FADD:
-        case FSUB:
-        case FMUL:
-        case FDIV:
-        case FREM:
-        case FCMPL:
-        case FCMPG:
-            expected1 = BasicValue.FLOAT_VALUE;
-            expected2 = BasicValue.FLOAT_VALUE;
-            break;
-        case LADD:
-        case LSUB:
-        case LMUL:
-        case LDIV:
-        case LREM:
-        case LAND:
-        case LOR:
-        case LXOR:
-        case LCMP:
-            expected1 = BasicValue.LONG_VALUE;
-            expected2 = BasicValue.LONG_VALUE;
-            break;
-        case LSHL:
-        case LSHR:
-        case LUSHR:
-            expected1 = BasicValue.LONG_VALUE;
-            expected2 = BasicValue.INT_VALUE;
-            break;
-        case DADD:
-        case DSUB:
-        case DMUL:
-        case DDIV:
-        case DREM:
-        case DCMPL:
-        case DCMPG:
-            expected1 = BasicValue.DOUBLE_VALUE;
-            expected2 = BasicValue.DOUBLE_VALUE;
-            break;
-        case IF_ACMPEQ:
-        case IF_ACMPNE:
-            expected1 = BasicValue.REFERENCE_VALUE;
-            expected2 = BasicValue.REFERENCE_VALUE;
-            break;
-        case PUTFIELD:
-            FieldInsnNode fin = (FieldInsnNode) insn;
-            expected1 = newValue(Type.getObjectType(fin.owner));
-            expected2 = newValue(Type.getType(fin.desc));
-            break;
-        default:
-            throw new Error("Internal error.");
-        }
-        if (!isSubTypeOf(value1, expected1)) {
-            throw new AnalyzerException(insn, "First argument", expected1,
-                    value1);
-        } else if (!isSubTypeOf(value2, expected2)) {
-            throw new AnalyzerException(insn, "Second argument", expected2,
-                    value2);
-        }
-        if (insn.getOpcode() == AALOAD) {
-            return getElementValue(value1);
-        } else {
-            return super.binaryOperation(insn, value1, value2);
-        }
-    }
-
-    @Override
-    public BasicValue ternaryOperation(final AbstractInsnNode insn,
-            final BasicValue value1, final BasicValue value2,
-            final BasicValue value3) throws AnalyzerException {
-        BasicValue expected1;
-        BasicValue expected3;
-        switch (insn.getOpcode()) {
-        case IASTORE:
-            expected1 = newValue(Type.getType("[I"));
-            expected3 = BasicValue.INT_VALUE;
-            break;
-        case BASTORE:
-            if (isSubTypeOf(value1, newValue(Type.getType("[Z")))) {
-                expected1 = newValue(Type.getType("[Z"));
-            } else {
-                expected1 = newValue(Type.getType("[B"));
-            }
-            expected3 = BasicValue.INT_VALUE;
-            break;
-        case CASTORE:
-            expected1 = newValue(Type.getType("[C"));
-            expected3 = BasicValue.INT_VALUE;
-            break;
-        case SASTORE:
-            expected1 = newValue(Type.getType("[S"));
-            expected3 = BasicValue.INT_VALUE;
-            break;
-        case LASTORE:
-            expected1 = newValue(Type.getType("[J"));
-            expected3 = BasicValue.LONG_VALUE;
-            break;
-        case FASTORE:
-            expected1 = newValue(Type.getType("[F"));
-            expected3 = BasicValue.FLOAT_VALUE;
-            break;
-        case DASTORE:
-            expected1 = newValue(Type.getType("[D"));
-            expected3 = BasicValue.DOUBLE_VALUE;
-            break;
-        case AASTORE:
-            expected1 = value1;
-            expected3 = BasicValue.REFERENCE_VALUE;
-            break;
-        default:
-            throw new Error("Internal error.");
-        }
-        if (!isSubTypeOf(value1, expected1)) {
-            throw new AnalyzerException(insn, "First argument", "a "
-                    + expected1 + " array reference", value1);
-        } else if (!BasicValue.INT_VALUE.equals(value2)) {
-            throw new AnalyzerException(insn, "Second argument",
-                    BasicValue.INT_VALUE, value2);
-        } else if (!isSubTypeOf(value3, expected3)) {
-            throw new AnalyzerException(insn, "Third argument", expected3,
-                    value3);
-        }
-        return null;
-    }
-
-    @Override
-    public BasicValue naryOperation(final AbstractInsnNode insn,
-            final List<? extends BasicValue> values) throws AnalyzerException {
-        int opcode = insn.getOpcode();
-        if (opcode == MULTIANEWARRAY) {
-            for (int i = 0; i < values.size(); ++i) {
-                if (!BasicValue.INT_VALUE.equals(values.get(i))) {
-                    throw new AnalyzerException(insn, null,
-                            BasicValue.INT_VALUE, values.get(i));
-                }
-            }
-        } else {
-            int i = 0;
-            int j = 0;
-            if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
-                Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
-                if (!isSubTypeOf(values.get(i++), newValue(owner))) {
-                    throw new AnalyzerException(insn, "Method owner",
-                            newValue(owner), values.get(0));
-                }
-            }
-            String desc = (opcode == INVOKEDYNAMIC) ? ((InvokeDynamicInsnNode) insn).desc
-                    : ((MethodInsnNode) insn).desc;
-            Type[] args = Type.getArgumentTypes(desc);
-            while (i < values.size()) {
-                BasicValue expected = newValue(args[j++]);
-                BasicValue encountered = values.get(i++);
-                if (!isSubTypeOf(encountered, expected)) {
-                    throw new AnalyzerException(insn, "Argument " + j,
-                            expected, encountered);
-                }
-            }
-        }
-        return super.naryOperation(insn, values);
-    }
-
-    @Override
-    public void returnOperation(final AbstractInsnNode insn,
-            final BasicValue value, final BasicValue expected)
-            throws AnalyzerException {
-        if (!isSubTypeOf(value, expected)) {
-            throw new AnalyzerException(insn, "Incompatible return type",
-                    expected, value);
-        }
-    }
-
-    protected boolean isArrayValue(final BasicValue value) {
-        return value.isReference();
-    }
-
-    protected BasicValue getElementValue(final BasicValue objectArrayValue)
-            throws AnalyzerException {
-        return BasicValue.REFERENCE_VALUE;
-    }
-
-    protected boolean isSubTypeOf(final BasicValue value,
-            final BasicValue expected) {
-        return value.equals(expected);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/Frame.java b/asm4/src/org/objectweb/asm/tree/analysis/Frame.java
deleted file mode 100644
index 36cbfb5..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/Frame.java
+++ /dev/null
@@ -1,729 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.InvokeDynamicInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MultiANewArrayInsnNode;
-import org.objectweb.asm.tree.VarInsnNode;
-
-/**
- * A symbolic execution stack frame. A stack frame contains a set of local
- * variable slots, and an operand stack. Warning: long and double values are
- * represented by <i>two</i> slots in local variables, and by <i>one</i> slot in
- * the operand stack.
- * 
- * @param <V>
- *            type of the Value used for the analysis.
- * 
- * @author Eric Bruneton
- */
-public class Frame<V extends Value> {
-
-    /**
-     * The expected return type of the analyzed method, or <tt>null</tt> if the
-     * method returns void.
-     */
-    private V returnValue;
-
-    /**
-     * The local variables and operand stack of this frame.
-     */
-    private V[] values;
-
-    /**
-     * The number of local variables of this frame.
-     */
-    private int locals;
-
-    /**
-     * The number of elements in the operand stack.
-     */
-    private int top;
-
-    /**
-     * Constructs a new frame with the given size.
-     * 
-     * @param nLocals
-     *            the maximum number of local variables of the frame.
-     * @param nStack
-     *            the maximum stack size of the frame.
-     */
-    public Frame(final int nLocals, final int nStack) {
-        this.values = (V[]) new Value[nLocals + nStack];
-        this.locals = nLocals;
-    }
-
-    /**
-     * Constructs a new frame that is identical to the given frame.
-     * 
-     * @param src
-     *            a frame.
-     */
-    public Frame(final Frame<? extends V> src) {
-        this(src.locals, src.values.length - src.locals);
-        init(src);
-    }
-
-    /**
-     * Copies the state of the given frame into this frame.
-     * 
-     * @param src
-     *            a frame.
-     * @return this frame.
-     */
-    public Frame<V> init(final Frame<? extends V> src) {
-        returnValue = src.returnValue;
-        System.arraycopy(src.values, 0, values, 0, values.length);
-        top = src.top;
-        return this;
-    }
-
-    /**
-     * Sets the expected return type of the analyzed method.
-     * 
-     * @param v
-     *            the expected return type of the analyzed method, or
-     *            <tt>null</tt> if the method returns void.
-     */
-    public void setReturn(final V v) {
-        returnValue = v;
-    }
-
-    /**
-     * Returns the maximum number of local variables of this frame.
-     * 
-     * @return the maximum number of local variables of this frame.
-     */
-    public int getLocals() {
-        return locals;
-    }
-
-    /**
-     * Returns the value of the given local variable.
-     * 
-     * @param i
-     *            a local variable index.
-     * @return the value of the given local variable.
-     * @throws IndexOutOfBoundsException
-     *             if the variable does not exist.
-     */
-    public V getLocal(final int i) throws IndexOutOfBoundsException {
-        if (i >= locals) {
-            throw new IndexOutOfBoundsException(
-                    "Trying to access an inexistant local variable");
-        }
-        return values[i];
-    }
-
-    /**
-     * Sets the value of the given local variable.
-     * 
-     * @param i
-     *            a local variable index.
-     * @param value
-     *            the new value of this local variable.
-     * @throws IndexOutOfBoundsException
-     *             if the variable does not exist.
-     */
-    public void setLocal(final int i, final V value)
-            throws IndexOutOfBoundsException {
-        if (i >= locals) {
-            throw new IndexOutOfBoundsException(
-                    "Trying to access an inexistant local variable " + i);
-        }
-        values[i] = value;
-    }
-
-    /**
-     * Returns the number of values in the operand stack of this frame. Long and
-     * double values are treated as single values.
-     * 
-     * @return the number of values in the operand stack of this frame.
-     */
-    public int getStackSize() {
-        return top;
-    }
-
-    /**
-     * Returns the value of the given operand stack slot.
-     * 
-     * @param i
-     *            the index of an operand stack slot.
-     * @return the value of the given operand stack slot.
-     * @throws IndexOutOfBoundsException
-     *             if the operand stack slot does not exist.
-     */
-    public V getStack(final int i) throws IndexOutOfBoundsException {
-        return values[i + locals];
-    }
-
-    /**
-     * Clears the operand stack of this frame.
-     */
-    public void clearStack() {
-        top = 0;
-    }
-
-    /**
-     * Pops a value from the operand stack of this frame.
-     * 
-     * @return the value that has been popped from the stack.
-     * @throws IndexOutOfBoundsException
-     *             if the operand stack is empty.
-     */
-    public V pop() throws IndexOutOfBoundsException {
-        if (top == 0) {
-            throw new IndexOutOfBoundsException(
-                    "Cannot pop operand off an empty stack.");
-        }
-        return values[--top + locals];
-    }
-
-    /**
-     * Pushes a value into the operand stack of this frame.
-     * 
-     * @param value
-     *            the value that must be pushed into the stack.
-     * @throws IndexOutOfBoundsException
-     *             if the operand stack is full.
-     */
-    public void push(final V value) throws IndexOutOfBoundsException {
-        if (top + locals >= values.length) {
-            throw new IndexOutOfBoundsException(
-                    "Insufficient maximum stack size.");
-        }
-        values[top++ + locals] = value;
-    }
-
-    public void execute(final AbstractInsnNode insn,
-            final Interpreter<V> interpreter) throws AnalyzerException {
-        V value1, value2, value3, value4;
-        List<V> values;
-        int var;
-
-        switch (insn.getOpcode()) {
-        case Opcodes.NOP:
-            break;
-        case Opcodes.ACONST_NULL:
-        case Opcodes.ICONST_M1:
-        case Opcodes.ICONST_0:
-        case Opcodes.ICONST_1:
-        case Opcodes.ICONST_2:
-        case Opcodes.ICONST_3:
-        case Opcodes.ICONST_4:
-        case Opcodes.ICONST_5:
-        case Opcodes.LCONST_0:
-        case Opcodes.LCONST_1:
-        case Opcodes.FCONST_0:
-        case Opcodes.FCONST_1:
-        case Opcodes.FCONST_2:
-        case Opcodes.DCONST_0:
-        case Opcodes.DCONST_1:
-        case Opcodes.BIPUSH:
-        case Opcodes.SIPUSH:
-        case Opcodes.LDC:
-            push(interpreter.newOperation(insn));
-            break;
-        case Opcodes.ILOAD:
-        case Opcodes.LLOAD:
-        case Opcodes.FLOAD:
-        case Opcodes.DLOAD:
-        case Opcodes.ALOAD:
-            push(interpreter.copyOperation(insn,
-                    getLocal(((VarInsnNode) insn).var)));
-            break;
-        case Opcodes.IALOAD:
-        case Opcodes.LALOAD:
-        case Opcodes.FALOAD:
-        case Opcodes.DALOAD:
-        case Opcodes.AALOAD:
-        case Opcodes.BALOAD:
-        case Opcodes.CALOAD:
-        case Opcodes.SALOAD:
-            value2 = pop();
-            value1 = pop();
-            push(interpreter.binaryOperation(insn, value1, value2));
-            break;
-        case Opcodes.ISTORE:
-        case Opcodes.LSTORE:
-        case Opcodes.FSTORE:
-        case Opcodes.DSTORE:
-        case Opcodes.ASTORE:
-            value1 = interpreter.copyOperation(insn, pop());
-            var = ((VarInsnNode) insn).var;
-            setLocal(var, value1);
-            if (value1.getSize() == 2) {
-                setLocal(var + 1, interpreter.newValue(null));
-            }
-            if (var > 0) {
-                Value local = getLocal(var - 1);
-                if (local != null && local.getSize() == 2) {
-                    setLocal(var - 1, interpreter.newValue(null));
-                }
-            }
-            break;
-        case Opcodes.IASTORE:
-        case Opcodes.LASTORE:
-        case Opcodes.FASTORE:
-        case Opcodes.DASTORE:
-        case Opcodes.AASTORE:
-        case Opcodes.BASTORE:
-        case Opcodes.CASTORE:
-        case Opcodes.SASTORE:
-            value3 = pop();
-            value2 = pop();
-            value1 = pop();
-            interpreter.ternaryOperation(insn, value1, value2, value3);
-            break;
-        case Opcodes.POP:
-            if (pop().getSize() == 2) {
-                throw new AnalyzerException(insn, "Illegal use of POP");
-            }
-            break;
-        case Opcodes.POP2:
-            if (pop().getSize() == 1) {
-                if (pop().getSize() != 1) {
-                    throw new AnalyzerException(insn, "Illegal use of POP2");
-                }
-            }
-            break;
-        case Opcodes.DUP:
-            value1 = pop();
-            if (value1.getSize() != 1) {
-                throw new AnalyzerException(insn, "Illegal use of DUP");
-            }
-            push(value1);
-            push(interpreter.copyOperation(insn, value1));
-            break;
-        case Opcodes.DUP_X1:
-            value1 = pop();
-            value2 = pop();
-            if (value1.getSize() != 1 || value2.getSize() != 1) {
-                throw new AnalyzerException(insn, "Illegal use of DUP_X1");
-            }
-            push(interpreter.copyOperation(insn, value1));
-            push(value2);
-            push(value1);
-            break;
-        case Opcodes.DUP_X2:
-            value1 = pop();
-            if (value1.getSize() == 1) {
-                value2 = pop();
-                if (value2.getSize() == 1) {
-                    value3 = pop();
-                    if (value3.getSize() == 1) {
-                        push(interpreter.copyOperation(insn, value1));
-                        push(value3);
-                        push(value2);
-                        push(value1);
-                        break;
-                    }
-                } else {
-                    push(interpreter.copyOperation(insn, value1));
-                    push(value2);
-                    push(value1);
-                    break;
-                }
-            }
-            throw new AnalyzerException(insn, "Illegal use of DUP_X2");
-        case Opcodes.DUP2:
-            value1 = pop();
-            if (value1.getSize() == 1) {
-                value2 = pop();
-                if (value2.getSize() == 1) {
-                    push(value2);
-                    push(value1);
-                    push(interpreter.copyOperation(insn, value2));
-                    push(interpreter.copyOperation(insn, value1));
-                    break;
-                }
-            } else {
-                push(value1);
-                push(interpreter.copyOperation(insn, value1));
-                break;
-            }
-            throw new AnalyzerException(insn, "Illegal use of DUP2");
-        case Opcodes.DUP2_X1:
-            value1 = pop();
-            if (value1.getSize() == 1) {
-                value2 = pop();
-                if (value2.getSize() == 1) {
-                    value3 = pop();
-                    if (value3.getSize() == 1) {
-                        push(interpreter.copyOperation(insn, value2));
-                        push(interpreter.copyOperation(insn, value1));
-                        push(value3);
-                        push(value2);
-                        push(value1);
-                        break;
-                    }
-                }
-            } else {
-                value2 = pop();
-                if (value2.getSize() == 1) {
-                    push(interpreter.copyOperation(insn, value1));
-                    push(value2);
-                    push(value1);
-                    break;
-                }
-            }
-            throw new AnalyzerException(insn, "Illegal use of DUP2_X1");
-        case Opcodes.DUP2_X2:
-            value1 = pop();
-            if (value1.getSize() == 1) {
-                value2 = pop();
-                if (value2.getSize() == 1) {
-                    value3 = pop();
-                    if (value3.getSize() == 1) {
-                        value4 = pop();
-                        if (value4.getSize() == 1) {
-                            push(interpreter.copyOperation(insn, value2));
-                            push(interpreter.copyOperation(insn, value1));
-                            push(value4);
-                            push(value3);
-                            push(value2);
-                            push(value1);
-                            break;
-                        }
-                    } else {
-                        push(interpreter.copyOperation(insn, value2));
-                        push(interpreter.copyOperation(insn, value1));
-                        push(value3);
-                        push(value2);
-                        push(value1);
-                        break;
-                    }
-                }
-            } else {
-                value2 = pop();
-                if (value2.getSize() == 1) {
-                    value3 = pop();
-                    if (value3.getSize() == 1) {
-                        push(interpreter.copyOperation(insn, value1));
-                        push(value3);
-                        push(value2);
-                        push(value1);
-                        break;
-                    }
-                } else {
-                    push(interpreter.copyOperation(insn, value1));
-                    push(value2);
-                    push(value1);
-                    break;
-                }
-            }
-            throw new AnalyzerException(insn, "Illegal use of DUP2_X2");
-        case Opcodes.SWAP:
-            value2 = pop();
-            value1 = pop();
-            if (value1.getSize() != 1 || value2.getSize() != 1) {
-                throw new AnalyzerException(insn, "Illegal use of SWAP");
-            }
-            push(interpreter.copyOperation(insn, value2));
-            push(interpreter.copyOperation(insn, value1));
-            break;
-        case Opcodes.IADD:
-        case Opcodes.LADD:
-        case Opcodes.FADD:
-        case Opcodes.DADD:
-        case Opcodes.ISUB:
-        case Opcodes.LSUB:
-        case Opcodes.FSUB:
-        case Opcodes.DSUB:
-        case Opcodes.IMUL:
-        case Opcodes.LMUL:
-        case Opcodes.FMUL:
-        case Opcodes.DMUL:
-        case Opcodes.IDIV:
-        case Opcodes.LDIV:
-        case Opcodes.FDIV:
-        case Opcodes.DDIV:
-        case Opcodes.IREM:
-        case Opcodes.LREM:
-        case Opcodes.FREM:
-        case Opcodes.DREM:
-            value2 = pop();
-            value1 = pop();
-            push(interpreter.binaryOperation(insn, value1, value2));
-            break;
-        case Opcodes.INEG:
-        case Opcodes.LNEG:
-        case Opcodes.FNEG:
-        case Opcodes.DNEG:
-            push(interpreter.unaryOperation(insn, pop()));
-            break;
-        case Opcodes.ISHL:
-        case Opcodes.LSHL:
-        case Opcodes.ISHR:
-        case Opcodes.LSHR:
-        case Opcodes.IUSHR:
-        case Opcodes.LUSHR:
-        case Opcodes.IAND:
-        case Opcodes.LAND:
-        case Opcodes.IOR:
-        case Opcodes.LOR:
-        case Opcodes.IXOR:
-        case Opcodes.LXOR:
-            value2 = pop();
-            value1 = pop();
-            push(interpreter.binaryOperation(insn, value1, value2));
-            break;
-        case Opcodes.IINC:
-            var = ((IincInsnNode) insn).var;
-            setLocal(var, interpreter.unaryOperation(insn, getLocal(var)));
-            break;
-        case Opcodes.I2L:
-        case Opcodes.I2F:
-        case Opcodes.I2D:
-        case Opcodes.L2I:
-        case Opcodes.L2F:
-        case Opcodes.L2D:
-        case Opcodes.F2I:
-        case Opcodes.F2L:
-        case Opcodes.F2D:
-        case Opcodes.D2I:
-        case Opcodes.D2L:
-        case Opcodes.D2F:
-        case Opcodes.I2B:
-        case Opcodes.I2C:
-        case Opcodes.I2S:
-            push(interpreter.unaryOperation(insn, pop()));
-            break;
-        case Opcodes.LCMP:
-        case Opcodes.FCMPL:
-        case Opcodes.FCMPG:
-        case Opcodes.DCMPL:
-        case Opcodes.DCMPG:
-            value2 = pop();
-            value1 = pop();
-            push(interpreter.binaryOperation(insn, value1, value2));
-            break;
-        case Opcodes.IFEQ:
-        case Opcodes.IFNE:
-        case Opcodes.IFLT:
-        case Opcodes.IFGE:
-        case Opcodes.IFGT:
-        case Opcodes.IFLE:
-            interpreter.unaryOperation(insn, pop());
-            break;
-        case Opcodes.IF_ICMPEQ:
-        case Opcodes.IF_ICMPNE:
-        case Opcodes.IF_ICMPLT:
-        case Opcodes.IF_ICMPGE:
-        case Opcodes.IF_ICMPGT:
-        case Opcodes.IF_ICMPLE:
-        case Opcodes.IF_ACMPEQ:
-        case Opcodes.IF_ACMPNE:
-            value2 = pop();
-            value1 = pop();
-            interpreter.binaryOperation(insn, value1, value2);
-            break;
-        case Opcodes.GOTO:
-            break;
-        case Opcodes.JSR:
-            push(interpreter.newOperation(insn));
-            break;
-        case Opcodes.RET:
-            break;
-        case Opcodes.TABLESWITCH:
-        case Opcodes.LOOKUPSWITCH:
-            interpreter.unaryOperation(insn, pop());
-            break;
-        case Opcodes.IRETURN:
-        case Opcodes.LRETURN:
-        case Opcodes.FRETURN:
-        case Opcodes.DRETURN:
-        case Opcodes.ARETURN:
-            value1 = pop();
-            interpreter.unaryOperation(insn, value1);
-            interpreter.returnOperation(insn, value1, returnValue);
-            break;
-        case Opcodes.RETURN:
-            if (returnValue != null) {
-                throw new AnalyzerException(insn, "Incompatible return type");
-            }
-            break;
-        case Opcodes.GETSTATIC:
-            push(interpreter.newOperation(insn));
-            break;
-        case Opcodes.PUTSTATIC:
-            interpreter.unaryOperation(insn, pop());
-            break;
-        case Opcodes.GETFIELD:
-            push(interpreter.unaryOperation(insn, pop()));
-            break;
-        case Opcodes.PUTFIELD:
-            value2 = pop();
-            value1 = pop();
-            interpreter.binaryOperation(insn, value1, value2);
-            break;
-        case Opcodes.INVOKEVIRTUAL:
-        case Opcodes.INVOKESPECIAL:
-        case Opcodes.INVOKESTATIC:
-        case Opcodes.INVOKEINTERFACE: {
-            values = new ArrayList<V>();
-            String desc = ((MethodInsnNode) insn).desc;
-            for (int i = Type.getArgumentTypes(desc).length; i > 0; --i) {
-                values.add(0, pop());
-            }
-            if (insn.getOpcode() != Opcodes.INVOKESTATIC) {
-                values.add(0, pop());
-            }
-            if (Type.getReturnType(desc) == Type.VOID_TYPE) {
-                interpreter.naryOperation(insn, values);
-            } else {
-                push(interpreter.naryOperation(insn, values));
-            }
-            break;
-        }
-        case Opcodes.INVOKEDYNAMIC: {
-            values = new ArrayList<V>();
-            String desc = ((InvokeDynamicInsnNode) insn).desc;
-            for (int i = Type.getArgumentTypes(desc).length; i > 0; --i) {
-                values.add(0, pop());
-            }
-            if (Type.getReturnType(desc) == Type.VOID_TYPE) {
-                interpreter.naryOperation(insn, values);
-            } else {
-                push(interpreter.naryOperation(insn, values));
-            }
-            break;
-        }
-        case Opcodes.NEW:
-            push(interpreter.newOperation(insn));
-            break;
-        case Opcodes.NEWARRAY:
-        case Opcodes.ANEWARRAY:
-        case Opcodes.ARRAYLENGTH:
-            push(interpreter.unaryOperation(insn, pop()));
-            break;
-        case Opcodes.ATHROW:
-            interpreter.unaryOperation(insn, pop());
-            break;
-        case Opcodes.CHECKCAST:
-        case Opcodes.INSTANCEOF:
-            push(interpreter.unaryOperation(insn, pop()));
-            break;
-        case Opcodes.MONITORENTER:
-        case Opcodes.MONITOREXIT:
-            interpreter.unaryOperation(insn, pop());
-            break;
-        case Opcodes.MULTIANEWARRAY:
-            values = new ArrayList<V>();
-            for (int i = ((MultiANewArrayInsnNode) insn).dims; i > 0; --i) {
-                values.add(0, pop());
-            }
-            push(interpreter.naryOperation(insn, values));
-            break;
-        case Opcodes.IFNULL:
-        case Opcodes.IFNONNULL:
-            interpreter.unaryOperation(insn, pop());
-            break;
-        default:
-            throw new RuntimeException("Illegal opcode " + insn.getOpcode());
-        }
-    }
-
-    /**
-     * Merges this frame with the given frame.
-     * 
-     * @param frame
-     *            a frame.
-     * @param interpreter
-     *            the interpreter used to merge values.
-     * @return <tt>true</tt> if this frame has been changed as a result of the
-     *         merge operation, or <tt>false</tt> otherwise.
-     * @throws AnalyzerException
-     *             if the frames have incompatible sizes.
-     */
-    public boolean merge(final Frame<? extends V> frame,
-            final Interpreter<V> interpreter) throws AnalyzerException {
-        if (top != frame.top) {
-            throw new AnalyzerException(null, "Incompatible stack heights");
-        }
-        boolean changes = false;
-        for (int i = 0; i < locals + top; ++i) {
-            V v = interpreter.merge(values[i], frame.values[i]);
-            if (!v.equals(values[i])) {
-                values[i] = v;
-                changes = true;
-            }
-        }
-        return changes;
-    }
-
-    /**
-     * Merges this frame with the given frame (case of a RET instruction).
-     * 
-     * @param frame
-     *            a frame
-     * @param access
-     *            the local variables that have been accessed by the subroutine
-     *            to which the RET instruction corresponds.
-     * @return <tt>true</tt> if this frame has been changed as a result of the
-     *         merge operation, or <tt>false</tt> otherwise.
-     */
-    public boolean merge(final Frame<? extends V> frame, final boolean[] access) {
-        boolean changes = false;
-        for (int i = 0; i < locals; ++i) {
-            if (!access[i] && !values[i].equals(frame.values[i])) {
-                values[i] = frame.values[i];
-                changes = true;
-            }
-        }
-        return changes;
-    }
-
-    /**
-     * Returns a string representation of this frame.
-     * 
-     * @return a string representation of this frame.
-     */
-    @Override
-    public String toString() {
-        StringBuffer b = new StringBuffer();
-        for (int i = 0; i < getLocals(); ++i) {
-            b.append(getLocal(i));
-        }
-        b.append(' ');
-        for (int i = 0; i < getStackSize(); ++i) {
-            b.append(getStack(i).toString());
-        }
-        return b.toString();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/Interpreter.java b/asm4/src/org/objectweb/asm/tree/analysis/Interpreter.java
deleted file mode 100644
index 94e08ea..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/Interpreter.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-
-/**
- * A semantic bytecode interpreter. More precisely, this interpreter only
- * manages the computation of values from other values: it does not manage the
- * transfer of values to or from the stack, and to or from the local variables.
- * This separation allows a generic bytecode {@link Analyzer} to work with
- * various semantic interpreters, without needing to duplicate the code to
- * simulate the transfer of values.
- * 
- * @param <V>
- *            type of the Value used for the analysis.
- * 
- * @author Eric Bruneton
- */
-public abstract class Interpreter<V extends Value> {
-
-    protected final int api;
-
-    protected Interpreter(final int api) {
-        this.api = api;
-    }
-
-    /**
-     * Creates a new value that represents the given type.
-     * 
-     * Called for method parameters (including <code>this</code>), exception
-     * handler variable and with <code>null</code> type for variables reserved
-     * by long and double types.
-     * 
-     * @param type
-     *            a primitive or reference type, or <tt>null</tt> to represent
-     *            an uninitialized value.
-     * @return a value that represents the given type. The size of the returned
-     *         value must be equal to the size of the given type.
-     */
-    public abstract V newValue(Type type);
-
-    /**
-     * Interprets a bytecode instruction without arguments. This method is
-     * called for the following opcodes:
-     * 
-     * ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4,
-     * ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0,
-     * DCONST_1, BIPUSH, SIPUSH, LDC, JSR, GETSTATIC, NEW
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @return the result of the interpretation of the given instruction.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract V newOperation(AbstractInsnNode insn)
-            throws AnalyzerException;
-
-    /**
-     * Interprets a bytecode instruction that moves a value on the stack or to
-     * or from local variables. This method is called for the following opcodes:
-     * 
-     * ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE,
-     * ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @param value
-     *            the value that must be moved by the instruction.
-     * @return the result of the interpretation of the given instruction. The
-     *         returned value must be <tt>equal</tt> to the given value.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract V copyOperation(AbstractInsnNode insn, V value)
-            throws AnalyzerException;
-
-    /**
-     * Interprets a bytecode instruction with a single argument. This method is
-     * called for the following opcodes:
-     * 
-     * INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L,
-     * F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE,
-     * TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN,
-     * PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST,
-     * INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @param value
-     *            the argument of the instruction to be interpreted.
-     * @return the result of the interpretation of the given instruction.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract V unaryOperation(AbstractInsnNode insn, V value)
-            throws AnalyzerException;
-
-    /**
-     * Interprets a bytecode instruction with two arguments. This method is
-     * called for the following opcodes:
-     * 
-     * IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD,
-     * LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV,
-     * LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR,
-     * LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL,
-     * DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE,
-     * IF_ACMPEQ, IF_ACMPNE, PUTFIELD
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @param value1
-     *            the first argument of the instruction to be interpreted.
-     * @param value2
-     *            the second argument of the instruction to be interpreted.
-     * @return the result of the interpretation of the given instruction.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract V binaryOperation(AbstractInsnNode insn, V value1, V value2)
-            throws AnalyzerException;
-
-    /**
-     * Interprets a bytecode instruction with three arguments. This method is
-     * called for the following opcodes:
-     * 
-     * IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @param value1
-     *            the first argument of the instruction to be interpreted.
-     * @param value2
-     *            the second argument of the instruction to be interpreted.
-     * @param value3
-     *            the third argument of the instruction to be interpreted.
-     * @return the result of the interpretation of the given instruction.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract V ternaryOperation(AbstractInsnNode insn, V value1,
-            V value2, V value3) throws AnalyzerException;
-
-    /**
-     * Interprets a bytecode instruction with a variable number of arguments.
-     * This method is called for the following opcodes:
-     * 
-     * INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE,
-     * MULTIANEWARRAY and INVOKEDYNAMIC
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @param values
-     *            the arguments of the instruction to be interpreted.
-     * @return the result of the interpretation of the given instruction.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract V naryOperation(AbstractInsnNode insn,
-            List<? extends V> values) throws AnalyzerException;
-
-    /**
-     * Interprets a bytecode return instruction. This method is called for the
-     * following opcodes:
-     * 
-     * IRETURN, LRETURN, FRETURN, DRETURN, ARETURN
-     * 
-     * @param insn
-     *            the bytecode instruction to be interpreted.
-     * @param value
-     *            the argument of the instruction to be interpreted.
-     * @param expected
-     *            the expected return type of the analyzed method.
-     * @throws AnalyzerException
-     *             if an error occured during the interpretation.
-     */
-    public abstract void returnOperation(AbstractInsnNode insn, V value,
-            V expected) throws AnalyzerException;
-
-    /**
-     * Merges two values. The merge operation must return a value that
-     * represents both values (for instance, if the two values are two types,
-     * the merged value must be a common super type of the two types. If the two
-     * values are integer intervals, the merged value must be an interval that
-     * contains the previous ones. Likewise for other types of values).
-     * 
-     * @param v
-     *            a value.
-     * @param w
-     *            another value.
-     * @return the merged value. If the merged value is equal to <tt>v</tt>,
-     *         this method <i>must</i> return <tt>v</tt>.
-     */
-    public abstract V merge(V v, V w);
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/SimpleVerifier.java b/asm4/src/org/objectweb/asm/tree/analysis/SimpleVerifier.java
deleted file mode 100644
index a127c17..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/SimpleVerifier.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Type;
-
-/**
- * An extended {@link BasicVerifier} that performs more precise verifications.
- * This verifier computes exact class types, instead of using a single "object
- * reference" type (as done in the {@link BasicVerifier}).
- * 
- * @author Eric Bruneton
- * @author Bing Ran
- */
-public class SimpleVerifier extends BasicVerifier {
-
-    /**
-     * The class that is verified.
-     */
-    private final Type currentClass;
-
-    /**
-     * The super class of the class that is verified.
-     */
-    private final Type currentSuperClass;
-
-    /**
-     * The interfaces implemented by the class that is verified.
-     */
-    private final List<Type> currentClassInterfaces;
-
-    /**
-     * If the class that is verified is an interface.
-     */
-    private final boolean isInterface;
-
-    /**
-     * The loader to use for referenced classes.
-     */
-    private ClassLoader loader = getClass().getClassLoader();
-
-    /**
-     * Constructs a new {@link SimpleVerifier}.
-     */
-    public SimpleVerifier() {
-        this(null, null, false);
-    }
-
-    /**
-     * Constructs a new {@link SimpleVerifier} to verify a specific class. This
-     * class will not be loaded into the JVM since it may be incorrect.
-     * 
-     * @param currentClass
-     *            the class that is verified.
-     * @param currentSuperClass
-     *            the super class of the class that is verified.
-     * @param isInterface
-     *            if the class that is verified is an interface.
-     */
-    public SimpleVerifier(final Type currentClass,
-            final Type currentSuperClass, final boolean isInterface) {
-        this(currentClass, currentSuperClass, null, isInterface);
-    }
-
-    /**
-     * Constructs a new {@link SimpleVerifier} to verify a specific class. This
-     * class will not be loaded into the JVM since it may be incorrect.
-     * 
-     * @param currentClass
-     *            the class that is verified.
-     * @param currentSuperClass
-     *            the super class of the class that is verified.
-     * @param currentClassInterfaces
-     *            the interfaces implemented by the class that is verified.
-     * @param isInterface
-     *            if the class that is verified is an interface.
-     */
-    public SimpleVerifier(final Type currentClass,
-            final Type currentSuperClass,
-            final List<Type> currentClassInterfaces, final boolean isInterface) {
-        this(ASM4, currentClass, currentSuperClass, currentClassInterfaces,
-                isInterface);
-    }
-
-    protected SimpleVerifier(final int api, final Type currentClass,
-            final Type currentSuperClass,
-            final List<Type> currentClassInterfaces, final boolean isInterface) {
-        super(api);
-        this.currentClass = currentClass;
-        this.currentSuperClass = currentSuperClass;
-        this.currentClassInterfaces = currentClassInterfaces;
-        this.isInterface = isInterface;
-    }
-
-    /**
-     * Set the <code>ClassLoader</code> which will be used to load referenced
-     * classes. This is useful if you are verifying multiple interdependent
-     * classes.
-     * 
-     * @param loader
-     *            a <code>ClassLoader</code> to use
-     */
-    public void setClassLoader(final ClassLoader loader) {
-        this.loader = loader;
-    }
-
-    @Override
-    public BasicValue newValue(final Type type) {
-        if (type == null) {
-            return BasicValue.UNINITIALIZED_VALUE;
-        }
-
-        boolean isArray = type.getSort() == Type.ARRAY;
-        if (isArray) {
-            switch (type.getElementType().getSort()) {
-            case Type.BOOLEAN:
-            case Type.CHAR:
-            case Type.BYTE:
-            case Type.SHORT:
-                return new BasicValue(type);
-            }
-        }
-
-        BasicValue v = super.newValue(type);
-        if (BasicValue.REFERENCE_VALUE.equals(v)) {
-            if (isArray) {
-                v = newValue(type.getElementType());
-                String desc = v.getType().getDescriptor();
-                for (int i = 0; i < type.getDimensions(); ++i) {
-                    desc = '[' + desc;
-                }
-                v = new BasicValue(Type.getType(desc));
-            } else {
-                v = new BasicValue(type);
-            }
-        }
-        return v;
-    }
-
-    @Override
-    protected boolean isArrayValue(final BasicValue value) {
-        Type t = value.getType();
-        return t != null
-                && ("Lnull;".equals(t.getDescriptor()) || t.getSort() == Type.ARRAY);
-    }
-
-    @Override
-    protected BasicValue getElementValue(final BasicValue objectArrayValue)
-            throws AnalyzerException {
-        Type arrayType = objectArrayValue.getType();
-        if (arrayType != null) {
-            if (arrayType.getSort() == Type.ARRAY) {
-                return newValue(Type.getType(arrayType.getDescriptor()
-                        .substring(1)));
-            } else if ("Lnull;".equals(arrayType.getDescriptor())) {
-                return objectArrayValue;
-            }
-        }
-        throw new Error("Internal error");
-    }
-
-    @Override
-    protected boolean isSubTypeOf(final BasicValue value,
-            final BasicValue expected) {
-        Type expectedType = expected.getType();
-        Type type = value.getType();
-        switch (expectedType.getSort()) {
-        case Type.INT:
-        case Type.FLOAT:
-        case Type.LONG:
-        case Type.DOUBLE:
-            return type.equals(expectedType);
-        case Type.ARRAY:
-        case Type.OBJECT:
-            if ("Lnull;".equals(type.getDescriptor())) {
-                return true;
-            } else if (type.getSort() == Type.OBJECT
-                    || type.getSort() == Type.ARRAY) {
-                return isAssignableFrom(expectedType, type);
-            } else {
-                return false;
-            }
-        default:
-            throw new Error("Internal error");
-        }
-    }
-
-    @Override
-    public BasicValue merge(final BasicValue v, final BasicValue w) {
-        if (!v.equals(w)) {
-            Type t = v.getType();
-            Type u = w.getType();
-            if (t != null
-                    && (t.getSort() == Type.OBJECT || t.getSort() == Type.ARRAY)) {
-                if (u != null
-                        && (u.getSort() == Type.OBJECT || u.getSort() == Type.ARRAY)) {
-                    if ("Lnull;".equals(t.getDescriptor())) {
-                        return w;
-                    }
-                    if ("Lnull;".equals(u.getDescriptor())) {
-                        return v;
-                    }
-                    if (isAssignableFrom(t, u)) {
-                        return v;
-                    }
-                    if (isAssignableFrom(u, t)) {
-                        return w;
-                    }
-                    // TODO case of array classes of the same dimension
-                    // TODO should we look also for a common super interface?
-                    // problem: there may be several possible common super
-                    // interfaces
-                    do {
-                        if (t == null || isInterface(t)) {
-                            return BasicValue.REFERENCE_VALUE;
-                        }
-                        t = getSuperClass(t);
-                        if (isAssignableFrom(t, u)) {
-                            return newValue(t);
-                        }
-                    } while (true);
-                }
-            }
-            return BasicValue.UNINITIALIZED_VALUE;
-        }
-        return v;
-    }
-
-    protected boolean isInterface(final Type t) {
-        if (currentClass != null && t.equals(currentClass)) {
-            return isInterface;
-        }
-        return getClass(t).isInterface();
-    }
-
-    protected Type getSuperClass(final Type t) {
-        if (currentClass != null && t.equals(currentClass)) {
-            return currentSuperClass;
-        }
-        Class<?> c = getClass(t).getSuperclass();
-        return c == null ? null : Type.getType(c);
-    }
-
-    protected boolean isAssignableFrom(final Type t, final Type u) {
-        if (t.equals(u)) {
-            return true;
-        }
-        if (currentClass != null && t.equals(currentClass)) {
-            if (getSuperClass(u) == null) {
-                return false;
-            } else {
-                if (isInterface) {
-                    return u.getSort() == Type.OBJECT
-                            || u.getSort() == Type.ARRAY;
-                }
-                return isAssignableFrom(t, getSuperClass(u));
-            }
-        }
-        if (currentClass != null && u.equals(currentClass)) {
-            if (isAssignableFrom(t, currentSuperClass)) {
-                return true;
-            }
-            if (currentClassInterfaces != null) {
-                for (int i = 0; i < currentClassInterfaces.size(); ++i) {
-                    Type v = currentClassInterfaces.get(i);
-                    if (isAssignableFrom(t, v)) {
-                        return true;
-                    }
-                }
-            }
-            return false;
-        }
-        Class<?> tc = getClass(t);
-        if (tc.isInterface()) {
-            tc = Object.class;
-        }
-        return tc.isAssignableFrom(getClass(u));
-    }
-
-    protected Class<?> getClass(final Type t) {
-        try {
-            if (t.getSort() == Type.ARRAY) {
-                return Class.forName(t.getDescriptor().replace('/', '.'),
-                        false, loader);
-            }
-            return Class.forName(t.getClassName(), false, loader);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException(e.toString());
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/SmallSet.java b/asm4/src/org/objectweb/asm/tree/analysis/SmallSet.java
deleted file mode 100644
index 0cf6ccf..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/SmallSet.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.AbstractSet;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-/**
- * A set of at most two elements.
- * 
- * @author Eric Bruneton
- */
-class SmallSet<E> extends AbstractSet<E> implements Iterator<E> {
-
-    // if e1 is null, e2 must be null; otherwise e2 must be different from e1
-
-    E e1, e2;
-
-    static final <T> Set<T> emptySet() {
-        return new SmallSet<T>(null, null);
-    }
-
-    SmallSet(final E e1, final E e2) {
-        this.e1 = e1;
-        this.e2 = e2;
-    }
-
-    // -------------------------------------------------------------------------
-    // Implementation of inherited abstract methods
-    // -------------------------------------------------------------------------
-
-    @Override
-    public Iterator<E> iterator() {
-        return new SmallSet<E>(e1, e2);
-    }
-
-    @Override
-    public int size() {
-        return e1 == null ? 0 : (e2 == null ? 1 : 2);
-    }
-
-    // -------------------------------------------------------------------------
-    // Implementation of the Iterator interface
-    // -------------------------------------------------------------------------
-
-    public boolean hasNext() {
-        return e1 != null;
-    }
-
-    public E next() {
-        if (e1 == null) {
-            throw new NoSuchElementException();
-        }
-        E e = e1;
-        e1 = e2;
-        e2 = null;
-        return e;
-    }
-
-    public void remove() {
-    }
-
-    // -------------------------------------------------------------------------
-    // Utility methods
-    // -------------------------------------------------------------------------
-
-    Set<E> union(final SmallSet<E> s) {
-        if ((s.e1 == e1 && s.e2 == e2) || (s.e1 == e2 && s.e2 == e1)) {
-            return this; // if the two sets are equal, return this
-        }
-        if (s.e1 == null) {
-            return this; // if s is empty, return this
-        }
-        if (e1 == null) {
-            return s; // if this is empty, return s
-        }
-        if (s.e2 == null) { // s contains exactly one element
-            if (e2 == null) {
-                return new SmallSet<E>(e1, s.e1); // necessarily e1 != s.e1
-            } else if (s.e1 == e1 || s.e1 == e2) { // s is included in this
-                return this;
-            }
-        }
-        if (e2 == null) { // this contains exactly one element
-            // if (s.e2 == null) { // cannot happen
-            // return new SmallSet(e1, s.e1); // necessarily e1 != s.e1
-            // } else
-            if (e1 == s.e1 || e1 == s.e2) { // this in included in s
-                return s;
-            }
-        }
-        // here we know that there are at least 3 distinct elements
-        HashSet<E> r = new HashSet<E>(4);
-        r.add(e1);
-        if (e2 != null) {
-            r.add(e2);
-        }
-        r.add(s.e1);
-        if (s.e2 != null) {
-            r.add(s.e2);
-        }
-        return r;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/SourceInterpreter.java b/asm4/src/org/objectweb/asm/tree/analysis/SourceInterpreter.java
deleted file mode 100644
index 60969b3..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/SourceInterpreter.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.InvokeDynamicInsnNode;
-import org.objectweb.asm.tree.LdcInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-
-/**
- * An {@link Interpreter} for {@link SourceValue} values.
- * 
- * @author Eric Bruneton
- */
-public class SourceInterpreter extends Interpreter<SourceValue> implements
-        Opcodes {
-
-    public SourceInterpreter() {
-        super(ASM4);
-    }
-
-    protected SourceInterpreter(final int api) {
-        super(api);
-    }
-
-    @Override
-    public SourceValue newValue(final Type type) {
-        if (type == Type.VOID_TYPE) {
-            return null;
-        }
-        return new SourceValue(type == null ? 1 : type.getSize());
-    }
-
-    @Override
-    public SourceValue newOperation(final AbstractInsnNode insn) {
-        int size;
-        switch (insn.getOpcode()) {
-        case LCONST_0:
-        case LCONST_1:
-        case DCONST_0:
-        case DCONST_1:
-            size = 2;
-            break;
-        case LDC:
-            Object cst = ((LdcInsnNode) insn).cst;
-            size = cst instanceof Long || cst instanceof Double ? 2 : 1;
-            break;
-        case GETSTATIC:
-            size = Type.getType(((FieldInsnNode) insn).desc).getSize();
-            break;
-        default:
-            size = 1;
-        }
-        return new SourceValue(size, insn);
-    }
-
-    @Override
-    public SourceValue copyOperation(final AbstractInsnNode insn,
-            final SourceValue value) {
-        return new SourceValue(value.getSize(), insn);
-    }
-
-    @Override
-    public SourceValue unaryOperation(final AbstractInsnNode insn,
-            final SourceValue value) {
-        int size;
-        switch (insn.getOpcode()) {
-        case LNEG:
-        case DNEG:
-        case I2L:
-        case I2D:
-        case L2D:
-        case F2L:
-        case F2D:
-        case D2L:
-            size = 2;
-            break;
-        case GETFIELD:
-            size = Type.getType(((FieldInsnNode) insn).desc).getSize();
-            break;
-        default:
-            size = 1;
-        }
-        return new SourceValue(size, insn);
-    }
-
-    @Override
-    public SourceValue binaryOperation(final AbstractInsnNode insn,
-            final SourceValue value1, final SourceValue value2) {
-        int size;
-        switch (insn.getOpcode()) {
-        case LALOAD:
-        case DALOAD:
-        case LADD:
-        case DADD:
-        case LSUB:
-        case DSUB:
-        case LMUL:
-        case DMUL:
-        case LDIV:
-        case DDIV:
-        case LREM:
-        case DREM:
-        case LSHL:
-        case LSHR:
-        case LUSHR:
-        case LAND:
-        case LOR:
-        case LXOR:
-            size = 2;
-            break;
-        default:
-            size = 1;
-        }
-        return new SourceValue(size, insn);
-    }
-
-    @Override
-    public SourceValue ternaryOperation(final AbstractInsnNode insn,
-            final SourceValue value1, final SourceValue value2,
-            final SourceValue value3) {
-        return new SourceValue(1, insn);
-    }
-
-    @Override
-    public SourceValue naryOperation(final AbstractInsnNode insn,
-            final List<? extends SourceValue> values) {
-        int size;
-        int opcode = insn.getOpcode();
-        if (opcode == MULTIANEWARRAY) {
-            size = 1;
-        } else {
-            String desc = (opcode == INVOKEDYNAMIC) ? ((InvokeDynamicInsnNode) insn).desc
-                    : ((MethodInsnNode) insn).desc;
-            size = Type.getReturnType(desc).getSize();
-        }
-        return new SourceValue(size, insn);
-    }
-
-    @Override
-    public void returnOperation(final AbstractInsnNode insn,
-            final SourceValue value, final SourceValue expected) {
-    }
-
-    @Override
-    public SourceValue merge(final SourceValue d, final SourceValue w) {
-        if (d.insns instanceof SmallSet && w.insns instanceof SmallSet) {
-            Set<AbstractInsnNode> s = ((SmallSet<AbstractInsnNode>) d.insns)
-                    .union((SmallSet<AbstractInsnNode>) w.insns);
-            if (s == d.insns && d.size == w.size) {
-                return d;
-            } else {
-                return new SourceValue(Math.min(d.size, w.size), s);
-            }
-        }
-        if (d.size != w.size || !d.insns.containsAll(w.insns)) {
-            HashSet<AbstractInsnNode> s = new HashSet<AbstractInsnNode>();
-            s.addAll(d.insns);
-            s.addAll(w.insns);
-            return new SourceValue(Math.min(d.size, w.size), s);
-        }
-        return d;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/SourceValue.java b/asm4/src/org/objectweb/asm/tree/analysis/SourceValue.java
deleted file mode 100644
index f87fc9e..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/SourceValue.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.Set;
-
-import org.objectweb.asm.tree.AbstractInsnNode;
-
-/**
- * A {@link Value} that is represented by its type in a two types type system.
- * This type system distinguishes the ONEWORD and TWOWORDS types.
- * 
- * @author Eric Bruneton
- */
-public class SourceValue implements Value {
-
-    /**
-     * The size of this value.
-     */
-    public final int size;
-
-    /**
-     * The instructions that can produce this value. For example, for the Java
-     * code below, the instructions that can produce the value of <tt>i</tt> at
-     * line 5 are the txo ISTORE instructions at line 1 and 3:
-     * 
-     * <pre>
-     * 1: i = 0;
-     * 2: if (...) {
-     * 3:   i = 1;
-     * 4: }
-     * 5: return i;
-     * </pre>
-     * 
-     * This field is a set of {@link AbstractInsnNode} objects.
-     */
-    public final Set<AbstractInsnNode> insns;
-
-    public SourceValue(final int size) {
-        this(size, SmallSet.<AbstractInsnNode> emptySet());
-    }
-
-    public SourceValue(final int size, final AbstractInsnNode insn) {
-        this.size = size;
-        this.insns = new SmallSet<AbstractInsnNode>(insn, null);
-    }
-
-    public SourceValue(final int size, final Set<AbstractInsnNode> insns) {
-        this.size = size;
-        this.insns = insns;
-    }
-
-    public int getSize() {
-        return size;
-    }
-
-    @Override
-    public boolean equals(final Object value) {
-        if (!(value instanceof SourceValue)) {
-            return false;
-        }
-        SourceValue v = (SourceValue) value;
-        return size == v.size && insns.equals(v.insns);
-    }
-
-    @Override
-    public int hashCode() {
-        return insns.hashCode();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/Subroutine.java b/asm4/src/org/objectweb/asm/tree/analysis/Subroutine.java
deleted file mode 100644
index 2739671..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/Subroutine.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.tree.JumpInsnNode;
-import org.objectweb.asm.tree.LabelNode;
-
-/**
- * A method subroutine (corresponds to a JSR instruction).
- * 
- * @author Eric Bruneton
- */
-class Subroutine {
-
-    LabelNode start;
-
-    boolean[] access;
-
-    List<JumpInsnNode> callers;
-
-    private Subroutine() {
-    }
-
-    Subroutine(final LabelNode start, final int maxLocals,
-            final JumpInsnNode caller) {
-        this.start = start;
-        this.access = new boolean[maxLocals];
-        this.callers = new ArrayList<JumpInsnNode>();
-        callers.add(caller);
-    }
-
-    public Subroutine copy() {
-        Subroutine result = new Subroutine();
-        result.start = start;
-        result.access = new boolean[access.length];
-        System.arraycopy(access, 0, result.access, 0, access.length);
-        result.callers = new ArrayList<JumpInsnNode>(callers);
-        return result;
-    }
-
-    public boolean merge(final Subroutine subroutine) throws AnalyzerException {
-        boolean changes = false;
-        for (int i = 0; i < access.length; ++i) {
-            if (subroutine.access[i] && !access[i]) {
-                access[i] = true;
-                changes = true;
-            }
-        }
-        if (subroutine.start == start) {
-            for (int i = 0; i < subroutine.callers.size(); ++i) {
-                JumpInsnNode caller = subroutine.callers.get(i);
-                if (!callers.contains(caller)) {
-                    callers.add(caller);
-                    changes = true;
-                }
-            }
-        }
-        return changes;
-    }
-}
\ No newline at end of file
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/Value.java b/asm4/src/org/objectweb/asm/tree/analysis/Value.java
deleted file mode 100644
index 7545dce..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/Value.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-/**
- * An immutable symbolic value for semantic interpretation of bytecode.
- * 
- * @author Eric Bruneton
- */
-public interface Value {
-
-    /**
-     * Returns the size of this value in words.
-     * 
-     * @return either 1 or 2.
-     */
-    int getSize();
-}
diff --git a/asm4/src/org/objectweb/asm/tree/analysis/package.html b/asm4/src/org/objectweb/asm/tree/analysis/package.html
deleted file mode 100644
index 228da02..0000000
--- a/asm4/src/org/objectweb/asm/tree/analysis/package.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-
-<p>
-Provides a framework for static code analysis based on the asm.tree package.
-</p>
-
-<p>
-Basic usage:
-</p>
-
-<pre>
-ClassReader cr = new ClassReader(bytecode);
-ClassNode cn = new ClassNode();
-cr.accept(cn, ClassReader.SKIP_DEBUG);
-
-List methods = cn.methods;
-for (int i = 0; i < methods.size(); ++i) {
-    MethodNode method = (MethodNode) methods.get(i);
-    if (method.instructions.size() > 0) {
-        Analyzer a = new Analyzer(new BasicInterpreter());
-        a.analyze(cn.name, method);
-        Frame[] frames = a.getFrames();
-        // Elements of the frames arrray now contains info for each instruction
-        // from the analyzed method. BasicInterpreter creates BasicValue, that
-        // is using simplified type system that distinguishes the UNINITIALZED,
-        // INT, FLOAT, LONG, DOUBLE, REFERENCE and RETURNADDRESS types.
-        ...
-    }
-}
-</pre>
-
-<p>
-@since ASM 1.4.3
-</p>
-
-</body>
-</html>
diff --git a/asm4/src/org/objectweb/asm/tree/package.html b/asm4/src/org/objectweb/asm/tree/package.html
deleted file mode 100644
index 940b876..0000000
--- a/asm4/src/org/objectweb/asm/tree/package.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-
-<p>
-Provides an ASM visitor that constructs a tree representation of the
-classes it visits. This class adapter can be useful to implement "complex"
-class manipulation operations, i.e., operations that would be very hard to
-implement without using a tree representation (such as optimizing the number
-of local variables used by a method).
-</p>
-
-<p>
-However, this class adapter has a cost: it makes ASM bigger and slower. Indeed
-it requires more than twenty new classes, and multiplies the time needed to
-transform a class by almost two (it is almost two times faster to read, "modify"
-and write a class with a ClassVisitor than with a ClassNode). This is why
-this package is bundled in an optional <tt>asm-tree.jar</tt> library that
-is separated from (but requires) the <tt>asm.jar</tt> library, which contains
-the core ASM framework. This is also why <i><font color="red">it is recommended
-not to use this class adapter when it is possible</font></i>.
-</p>
-
-<p>
-The root class is the ClassNode, that can be created from existing bytecode. For example:
-</p>
-
-<pre>
-  ClassReader cr = new ClassReader(source);
-  ClassNode cn = new ClassNode();
-  cr.accept(cn, true);
-</pre>
-
-<p>
-Now the content of ClassNode can be modified and then
-serialized back into bytecode:
-</p>
-
-<pre>
-  ClassWriter cw = new ClassWriter(true);
-  cn.accept(cw);
-</pre>
-
-<p>
-Using a simple ClassVisitor it is possible to create MethodNode instances per-method.
-In this example MethodNode is acting as a buffer that is flushed out at visitEnd() call:
-</p>
-
-<pre>
-  ClassReader cr = new ClassReader(source);
-  ClassWriter cw = new ClassWriter();
-  ClassVisitor cv = new ClassVisitor(cw) {
-    public MethodVisitor visitMethod(int access, String name,
-        String desc, String signature, String[] exceptions) {
-      final MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
-      MethodNode mn = new MethodNode(access, name, desc, signature, exceptions) {
-        public void visitEnd() {
-          // transform or analyze method code using tree API
-          accept(mv);
-        }
-      };
-    }
-  };
-  cr.accept(cv, true);
-</pre>
-
-<p>
-Several strategies can be used to construct method code from scratch. The first
-option is to create a MethodNode, and then create XxxInsnNode instances and
-add them to the instructions list:
-</p>
-
-<pre>
-MethodNode m = new MethodNode(...);
-m.instructions.add(new VarInsnNode(ALOAD, 0));
-...
-</pre>
-
-<p>
-Alternatively, you can use the fact that MethodNode is a MethodVisitor, and use
-that to create the XxxInsnNode and add them to the instructions list through
-the standard MethodVisitor methods:
-</p>
-
-<pre>
-MethodNode m = new MethodNode(...);
-m.visitVarInsn(ALOAD, 0);
-...
-</pre>
-
-<p>
-If you cannot generate all the instructions in sequential order, i.e. if you
-need to save some pointer in the instruction list and then insert instructions
-at that place after other instructions have been generated, you can use InsnList
-methods insert() and insertBefore() to insert instructions at a saved pointer.
-</p>
-
-<pre>
-MethodNode m = new MethodNode(...);
-m.visitVarInsn(ALOAD, 0);
-AbstractInsnNode ptr = m.instructions.getLast();
-m.visitVarInsn(ALOAD, 1);
-// inserts an instruction between ALOAD 0 and ALOAD 1
-m.instructions.insert(ptr, new VarInsnNode(ALOAD, 0));
-...
-</pre>
-
-<p>
-If you need to insert instructions while iterating over an existing instruction
-list, you can also use several strategies. The first one is to use a
-ListIterator over the instruction list:
-</p>
-
-<pre>
-ListIterator it = m.instructions.iterator();
-while (it.hasNext()) {
-    AbstractInsnNode n = (AbstractInsnNode) it.next();
-    if (...) {
-        it.add(new VarInsnNode(ALOAD, 0));
-    }
-}
-</pre>
-
-<p>
-It is also possible to convert an instruction list into an array and iterate trough
-array elements:
-</p>
-
-<pre>
-AbstractInsnNode[] insns = m.instructions.toArray();
-for(int i = 0; i&lt;insns.length; i++) {
-    AbstractInsnNode n = insns[i];
-    if (...) {
-        m.instructions.insert(n, new VarInsnNode(ALOAD, 0));
-    }
-}
-</pre>
-
-<p>
-If you want to insert these instructions through the MethodVisitor methods,
-you can use another instance of MethodNode as a MethodVisitor and then
-insert instructions collected by that instance into the instruction list.
-For example:
-</p>
-
-<pre>
-AbstractInsnNode[] insns = m.instructions.toArray();
-for(int i = 0; i&lt;insns.length; i++) {
-    AbstractInsnNode n = insns[i];
-    if (...) {
-        MethodNode mn = new MethodNode();
-        mn.visitVarInsn(ALOAD, 0);
-        mn.visitVarInsn(ALOAD, 1);
-        m.instructions.insert(n, mn.instructions);
-    }
-}
-</pre>
-
-<p>
-@since ASM 1.3.3
-</p>
-
-</body>
-</html>
diff --git a/asm4/src/org/objectweb/asm/util/ASMifiable.java b/asm4/src/org/objectweb/asm/util/ASMifiable.java
deleted file mode 100644
index dcefe67..0000000
--- a/asm4/src/org/objectweb/asm/util/ASMifiable.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.util.Map;
-
-import org.objectweb.asm.Label;
-
-/**
- * An {@link org.objectweb.asm.Attribute Attribute} that can print the ASM code
- * to create an equivalent attribute.
- * 
- * @author Eugene Kuleshov
- */
-public interface ASMifiable {
-
-    /**
-     * Prints the ASM code to create an attribute equal to this attribute.
-     * 
-     * @param buf
-     *            a buffer used for printing Java code.
-     * @param varName
-     *            name of the variable in a printed code used to store attribute
-     *            instance.
-     * @param labelNames
-     *            map of label instances to their names.
-     */
-    void asmify(StringBuffer buf, String varName, Map<Label, String> labelNames);
-}
diff --git a/asm4/src/org/objectweb/asm/util/ASMifier.java b/asm4/src/org/objectweb/asm/util/ASMifier.java
deleted file mode 100644
index eea6737..0000000
--- a/asm4/src/org/objectweb/asm/util/ASMifier.java
+++ /dev/null
@@ -1,1151 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link Printer} that prints the ASM code to generate the classes if visits.
- * 
- * @author Eric Bruneton
- */
-public class ASMifier extends Printer {
-
-    /**
-     * The name of the visitor variable in the produced code.
-     */
-    protected final String name;
-
-    /**
-     * Identifier of the annotation visitor variable in the produced code.
-     */
-    protected final int id;
-
-    /**
-     * The label names. This map associates String values to Label keys. It is
-     * used only in ASMifierMethodVisitor.
-     */
-    protected Map<Label, String> labelNames;
-
-    /**
-     * Pseudo access flag used to distinguish class access flags.
-     */
-    private static final int ACCESS_CLASS = 262144;
-
-    /**
-     * Pseudo access flag used to distinguish field access flags.
-     */
-    private static final int ACCESS_FIELD = 524288;
-
-    /**
-     * Pseudo access flag used to distinguish inner class flags.
-     */
-    private static final int ACCESS_INNER = 1048576;
-
-    /**
-     * Constructs a new {@link ASMifier}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the
-     * {@link #ASMifier(int, String, int)} version.
-     */
-    public ASMifier() {
-        this(Opcodes.ASM4, "cw", 0);
-    }
-
-    /**
-     * Constructs a new {@link ASMifier}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this class. Must be one of
-     *            {@link Opcodes#ASM4}.
-     * @param name
-     *            the name of the visitor variable in the produced code.
-     * @param id
-     *            identifier of the annotation visitor variable in the produced
-     *            code.
-     */
-    protected ASMifier(final int api, final String name, final int id) {
-        super(api);
-        this.name = name;
-        this.id = id;
-    }
-
-    /**
-     * Prints the ASM source code to generate the given class to the standard
-     * output.
-     * <p>
-     * Usage: ASMifier [-debug] &lt;binary class name or class file name&gt;
-     * 
-     * @param args
-     *            the command line arguments.
-     * 
-     * @throws Exception
-     *             if the class cannot be found, or if an IO exception occurs.
-     */
-    public static void main(final String[] args) throws Exception {
-        int i = 0;
-        int flags = ClassReader.SKIP_DEBUG;
-
-        boolean ok = true;
-        if (args.length < 1 || args.length > 2) {
-            ok = false;
-        }
-        if (ok && "-debug".equals(args[0])) {
-            i = 1;
-            flags = 0;
-            if (args.length != 2) {
-                ok = false;
-            }
-        }
-        if (!ok) {
-            System.err
-                    .println("Prints the ASM code to generate the given class.");
-            System.err.println("Usage: ASMifier [-debug] "
-                    + "<fully qualified class name or class file name>");
-            return;
-        }
-        ClassReader cr;
-        if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1
-                || args[i].indexOf('/') > -1) {
-            cr = new ClassReader(new FileInputStream(args[i]));
-        } else {
-            cr = new ClassReader(args[i]);
-        }
-        cr.accept(new TraceClassVisitor(null, new ASMifier(), new PrintWriter(
-                System.out)), flags);
-    }
-
-    // ------------------------------------------------------------------------
-    // Classes
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        String simpleName;
-        int n = name.lastIndexOf('/');
-        if (n == -1) {
-            simpleName = name;
-        } else {
-            text.add("package asm." + name.substring(0, n).replace('/', '.')
-                    + ";\n");
-            simpleName = name.substring(n + 1);
-        }
-        text.add("import java.util.*;\n");
-        text.add("import org.objectweb.asm.*;\n");
-        text.add("import org.objectweb.asm.attrs.*;\n");
-        text.add("public class " + simpleName + "Dump implements Opcodes {\n\n");
-        text.add("public static byte[] dump () throws Exception {\n\n");
-        text.add("ClassWriter cw = new ClassWriter(0);\n");
-        text.add("FieldVisitor fv;\n");
-        text.add("MethodVisitor mv;\n");
-        text.add("AnnotationVisitor av0;\n\n");
-
-        buf.setLength(0);
-        buf.append("cw.visit(");
-        switch (version) {
-        case Opcodes.V1_1:
-            buf.append("V1_1");
-            break;
-        case Opcodes.V1_2:
-            buf.append("V1_2");
-            break;
-        case Opcodes.V1_3:
-            buf.append("V1_3");
-            break;
-        case Opcodes.V1_4:
-            buf.append("V1_4");
-            break;
-        case Opcodes.V1_5:
-            buf.append("V1_5");
-            break;
-        case Opcodes.V1_6:
-            buf.append("V1_6");
-            break;
-        case Opcodes.V1_7:
-            buf.append("V1_7");
-            break;
-        default:
-            buf.append(version);
-            break;
-        }
-        buf.append(", ");
-        appendAccess(access | ACCESS_CLASS);
-        buf.append(", ");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(signature);
-        buf.append(", ");
-        appendConstant(superName);
-        buf.append(", ");
-        if (interfaces != null && interfaces.length > 0) {
-            buf.append("new String[] {");
-            for (int i = 0; i < interfaces.length; ++i) {
-                buf.append(i == 0 ? " " : ", ");
-                appendConstant(interfaces[i]);
-            }
-            buf.append(" }");
-        } else {
-            buf.append("null");
-        }
-        buf.append(");\n\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitSource(final String file, final String debug) {
-        buf.setLength(0);
-        buf.append("cw.visitSource(");
-        appendConstant(file);
-        buf.append(", ");
-        appendConstant(debug);
-        buf.append(");\n\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        buf.setLength(0);
-        buf.append("cw.visitOuterClass(");
-        appendConstant(owner);
-        buf.append(", ");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(");\n\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public ASMifier visitClassAnnotation(final String desc,
-            final boolean visible) {
-        return visitAnnotation(desc, visible);
-    }
-
-    @Override
-    public void visitClassAttribute(final Attribute attr) {
-        visitAttribute(attr);
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        buf.setLength(0);
-        buf.append("cw.visitInnerClass(");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(outerName);
-        buf.append(", ");
-        appendConstant(innerName);
-        buf.append(", ");
-        appendAccess(access | ACCESS_INNER);
-        buf.append(");\n\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public ASMifier visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        buf.setLength(0);
-        buf.append("{\n");
-        buf.append("fv = cw.visitField(");
-        appendAccess(access | ACCESS_FIELD);
-        buf.append(", ");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(", ");
-        appendConstant(signature);
-        buf.append(", ");
-        appendConstant(value);
-        buf.append(");\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("fv", 0);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    @Override
-    public ASMifier visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        buf.setLength(0);
-        buf.append("{\n");
-        buf.append("mv = cw.visitMethod(");
-        appendAccess(access);
-        buf.append(", ");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(", ");
-        appendConstant(signature);
-        buf.append(", ");
-        if (exceptions != null && exceptions.length > 0) {
-            buf.append("new String[] {");
-            for (int i = 0; i < exceptions.length; ++i) {
-                buf.append(i == 0 ? " " : ", ");
-                appendConstant(exceptions[i]);
-            }
-            buf.append(" }");
-        } else {
-            buf.append("null");
-        }
-        buf.append(");\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("mv", 0);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    @Override
-    public void visitClassEnd() {
-        text.add("cw.visitEnd();\n\n");
-        text.add("return cw.toByteArray();\n");
-        text.add("}\n");
-        text.add("}\n");
-    }
-
-    // ------------------------------------------------------------------------
-    // Annotations
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final String name, final Object value) {
-        buf.setLength(0);
-        buf.append("av").append(id).append(".visit(");
-        appendConstant(buf, name);
-        buf.append(", ");
-        appendConstant(buf, value);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        buf.setLength(0);
-        buf.append("av").append(id).append(".visitEnum(");
-        appendConstant(buf, name);
-        buf.append(", ");
-        appendConstant(buf, desc);
-        buf.append(", ");
-        appendConstant(buf, value);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public ASMifier visitAnnotation(final String name, final String desc) {
-        buf.setLength(0);
-        buf.append("{\n");
-        buf.append("AnnotationVisitor av").append(id + 1).append(" = av");
-        buf.append(id).append(".visitAnnotation(");
-        appendConstant(buf, name);
-        buf.append(", ");
-        appendConstant(buf, desc);
-        buf.append(");\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("av", id + 1);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    @Override
-    public ASMifier visitArray(final String name) {
-        buf.setLength(0);
-        buf.append("{\n");
-        buf.append("AnnotationVisitor av").append(id + 1).append(" = av");
-        buf.append(id).append(".visitArray(");
-        appendConstant(buf, name);
-        buf.append(");\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("av", id + 1);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    @Override
-    public void visitAnnotationEnd() {
-        buf.setLength(0);
-        buf.append("av").append(id).append(".visitEnd();\n");
-        text.add(buf.toString());
-    }
-
-    // ------------------------------------------------------------------------
-    // Fields
-    // ------------------------------------------------------------------------
-
-    @Override
-    public ASMifier visitFieldAnnotation(final String desc,
-            final boolean visible) {
-        return visitAnnotation(desc, visible);
-    }
-
-    @Override
-    public void visitFieldAttribute(final Attribute attr) {
-        visitAttribute(attr);
-    }
-
-    @Override
-    public void visitFieldEnd() {
-        buf.setLength(0);
-        buf.append(name).append(".visitEnd();\n");
-        text.add(buf.toString());
-    }
-
-    // ------------------------------------------------------------------------
-    // Methods
-    // ------------------------------------------------------------------------
-
-    @Override
-    public ASMifier visitAnnotationDefault() {
-        buf.setLength(0);
-        buf.append("{\n").append("av0 = ").append(name)
-                .append(".visitAnnotationDefault();\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("av", 0);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    @Override
-    public ASMifier visitMethodAnnotation(final String desc,
-            final boolean visible) {
-        return visitAnnotation(desc, visible);
-    }
-
-    @Override
-    public ASMifier visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        buf.setLength(0);
-        buf.append("{\n").append("av0 = ").append(name)
-                .append(".visitParameterAnnotation(").append(parameter)
-                .append(", ");
-        appendConstant(desc);
-        buf.append(", ").append(visible).append(");\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("av", 0);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    @Override
-    public void visitMethodAttribute(final Attribute attr) {
-        visitAttribute(attr);
-    }
-
-    @Override
-    public void visitCode() {
-        text.add(name + ".visitCode();\n");
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        buf.setLength(0);
-        switch (type) {
-        case Opcodes.F_NEW:
-        case Opcodes.F_FULL:
-            declareFrameTypes(nLocal, local);
-            declareFrameTypes(nStack, stack);
-            if (type == Opcodes.F_NEW) {
-                buf.append(name).append(".visitFrame(Opcodes.F_NEW, ");
-            } else {
-                buf.append(name).append(".visitFrame(Opcodes.F_FULL, ");
-            }
-            buf.append(nLocal).append(", new Object[] {");
-            appendFrameTypes(nLocal, local);
-            buf.append("}, ").append(nStack).append(", new Object[] {");
-            appendFrameTypes(nStack, stack);
-            buf.append('}');
-            break;
-        case Opcodes.F_APPEND:
-            declareFrameTypes(nLocal, local);
-            buf.append(name).append(".visitFrame(Opcodes.F_APPEND,")
-                    .append(nLocal).append(", new Object[] {");
-            appendFrameTypes(nLocal, local);
-            buf.append("}, 0, null");
-            break;
-        case Opcodes.F_CHOP:
-            buf.append(name).append(".visitFrame(Opcodes.F_CHOP,")
-                    .append(nLocal).append(", null, 0, null");
-            break;
-        case Opcodes.F_SAME:
-            buf.append(name).append(
-                    ".visitFrame(Opcodes.F_SAME, 0, null, 0, null");
-            break;
-        case Opcodes.F_SAME1:
-            declareFrameTypes(1, stack);
-            buf.append(name).append(
-                    ".visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {");
-            appendFrameTypes(1, stack);
-            buf.append('}');
-            break;
-        }
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        buf.setLength(0);
-        buf.append(name).append(".visitInsn(").append(OPCODES[opcode])
-                .append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        buf.setLength(0);
-        buf.append(name)
-                .append(".visitIntInsn(")
-                .append(OPCODES[opcode])
-                .append(", ")
-                .append(opcode == Opcodes.NEWARRAY ? TYPES[operand] : Integer
-                        .toString(operand)).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        buf.setLength(0);
-        buf.append(name).append(".visitVarInsn(").append(OPCODES[opcode])
-                .append(", ").append(var).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        buf.setLength(0);
-        buf.append(name).append(".visitTypeInsn(").append(OPCODES[opcode])
-                .append(", ");
-        appendConstant(type);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        buf.setLength(0);
-        buf.append(this.name).append(".visitFieldInsn(")
-                .append(OPCODES[opcode]).append(", ");
-        appendConstant(owner);
-        buf.append(", ");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        buf.setLength(0);
-        buf.append(this.name).append(".visitMethodInsn(")
-                .append(OPCODES[opcode]).append(", ");
-        appendConstant(owner);
-        buf.append(", ");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        buf.setLength(0);
-        buf.append(this.name).append(".visitInvokeDynamicInsn(");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(", ");
-        appendConstant(bsm);
-        buf.append(", new Object[]{");
-        for (int i = 0; i < bsmArgs.length; ++i) {
-            appendConstant(bsmArgs[i]);
-            if (i != bsmArgs.length - 1) {
-                buf.append(", ");
-            }
-        }
-        buf.append("});\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        buf.setLength(0);
-        declareLabel(label);
-        buf.append(name).append(".visitJumpInsn(").append(OPCODES[opcode])
-                .append(", ");
-        appendLabel(label);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        buf.setLength(0);
-        declareLabel(label);
-        buf.append(name).append(".visitLabel(");
-        appendLabel(label);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        buf.setLength(0);
-        buf.append(name).append(".visitLdcInsn(");
-        appendConstant(cst);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        buf.setLength(0);
-        buf.append(name).append(".visitIincInsn(").append(var).append(", ")
-                .append(increment).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        buf.setLength(0);
-        for (int i = 0; i < labels.length; ++i) {
-            declareLabel(labels[i]);
-        }
-        declareLabel(dflt);
-
-        buf.append(name).append(".visitTableSwitchInsn(").append(min)
-                .append(", ").append(max).append(", ");
-        appendLabel(dflt);
-        buf.append(", new Label[] {");
-        for (int i = 0; i < labels.length; ++i) {
-            buf.append(i == 0 ? " " : ", ");
-            appendLabel(labels[i]);
-        }
-        buf.append(" });\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        buf.setLength(0);
-        for (int i = 0; i < labels.length; ++i) {
-            declareLabel(labels[i]);
-        }
-        declareLabel(dflt);
-
-        buf.append(name).append(".visitLookupSwitchInsn(");
-        appendLabel(dflt);
-        buf.append(", new int[] {");
-        for (int i = 0; i < keys.length; ++i) {
-            buf.append(i == 0 ? " " : ", ").append(keys[i]);
-        }
-        buf.append(" }, new Label[] {");
-        for (int i = 0; i < labels.length; ++i) {
-            buf.append(i == 0 ? " " : ", ");
-            appendLabel(labels[i]);
-        }
-        buf.append(" });\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        buf.setLength(0);
-        buf.append(name).append(".visitMultiANewArrayInsn(");
-        appendConstant(desc);
-        buf.append(", ").append(dims).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        buf.setLength(0);
-        declareLabel(start);
-        declareLabel(end);
-        declareLabel(handler);
-        buf.append(name).append(".visitTryCatchBlock(");
-        appendLabel(start);
-        buf.append(", ");
-        appendLabel(end);
-        buf.append(", ");
-        appendLabel(handler);
-        buf.append(", ");
-        appendConstant(type);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        buf.setLength(0);
-        buf.append(this.name).append(".visitLocalVariable(");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(", ");
-        appendConstant(signature);
-        buf.append(", ");
-        appendLabel(start);
-        buf.append(", ");
-        appendLabel(end);
-        buf.append(", ").append(index).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        buf.setLength(0);
-        buf.append(name).append(".visitLineNumber(").append(line).append(", ");
-        appendLabel(start);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        buf.setLength(0);
-        buf.append(name).append(".visitMaxs(").append(maxStack).append(", ")
-                .append(maxLocals).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMethodEnd() {
-        buf.setLength(0);
-        buf.append(name).append(".visitEnd();\n");
-        text.add(buf.toString());
-    }
-
-    // ------------------------------------------------------------------------
-    // Common methods
-    // ------------------------------------------------------------------------
-
-    public ASMifier visitAnnotation(final String desc, final boolean visible) {
-        buf.setLength(0);
-        buf.append("{\n").append("av0 = ").append(name)
-                .append(".visitAnnotation(");
-        appendConstant(desc);
-        buf.append(", ").append(visible).append(");\n");
-        text.add(buf.toString());
-        ASMifier a = createASMifier("av", 0);
-        text.add(a.getText());
-        text.add("}\n");
-        return a;
-    }
-
-    public void visitAttribute(final Attribute attr) {
-        buf.setLength(0);
-        buf.append("// ATTRIBUTE ").append(attr.type).append('\n');
-        if (attr instanceof ASMifiable) {
-            if (labelNames == null) {
-                labelNames = new HashMap<Label, String>();
-            }
-            buf.append("{\n");
-            ((ASMifiable) attr).asmify(buf, "attr", labelNames);
-            buf.append(name).append(".visitAttribute(attr);\n");
-            buf.append("}\n");
-        }
-        text.add(buf.toString());
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    protected ASMifier createASMifier(final String name, final int id) {
-        return new ASMifier(Opcodes.ASM4, name, id);
-    }
-
-    /**
-     * Appends a string representation of the given access modifiers to
-     * {@link #buf buf}.
-     * 
-     * @param access
-     *            some access modifiers.
-     */
-    void appendAccess(final int access) {
-        boolean first = true;
-        if ((access & Opcodes.ACC_PUBLIC) != 0) {
-            buf.append("ACC_PUBLIC");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_PRIVATE) != 0) {
-            buf.append("ACC_PRIVATE");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_PROTECTED) != 0) {
-            buf.append("ACC_PROTECTED");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_FINAL) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_FINAL");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_STATIC) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_STATIC");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            if ((access & ACCESS_CLASS) == 0) {
-                buf.append("ACC_SYNCHRONIZED");
-            } else {
-                buf.append("ACC_SUPER");
-            }
-            first = false;
-        }
-        if ((access & Opcodes.ACC_VOLATILE) != 0
-                && (access & ACCESS_FIELD) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_VOLATILE");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_BRIDGE) != 0 && (access & ACCESS_CLASS) == 0
-                && (access & ACCESS_FIELD) == 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_BRIDGE");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_VARARGS) != 0 && (access & ACCESS_CLASS) == 0
-                && (access & ACCESS_FIELD) == 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_VARARGS");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_TRANSIENT) != 0
-                && (access & ACCESS_FIELD) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_TRANSIENT");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_NATIVE) != 0 && (access & ACCESS_CLASS) == 0
-                && (access & ACCESS_FIELD) == 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_NATIVE");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_ENUM) != 0
-                && ((access & ACCESS_CLASS) != 0
-                        || (access & ACCESS_FIELD) != 0 || (access & ACCESS_INNER) != 0)) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_ENUM");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_ANNOTATION) != 0
-                && ((access & ACCESS_CLASS) != 0 || (access & ACCESS_INNER) != 0)) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_ANNOTATION");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_ABSTRACT) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_ABSTRACT");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_INTERFACE) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_INTERFACE");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_STRICT) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_STRICT");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_SYNTHETIC");
-            first = false;
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            if (!first) {
-                buf.append(" + ");
-            }
-            buf.append("ACC_DEPRECATED");
-            first = false;
-        }
-        if (first) {
-            buf.append('0');
-        }
-    }
-
-    /**
-     * Appends a string representation of the given constant to the given
-     * buffer.
-     * 
-     * @param cst
-     *            an {@link Integer}, {@link Float}, {@link Long},
-     *            {@link Double} or {@link String} object. May be <tt>null</tt>.
-     */
-    protected void appendConstant(final Object cst) {
-        appendConstant(buf, cst);
-    }
-
-    /**
-     * Appends a string representation of the given constant to the given
-     * buffer.
-     * 
-     * @param buf
-     *            a string buffer.
-     * @param cst
-     *            an {@link Integer}, {@link Float}, {@link Long},
-     *            {@link Double} or {@link String} object. May be <tt>null</tt>.
-     */
-    static void appendConstant(final StringBuffer buf, final Object cst) {
-        if (cst == null) {
-            buf.append("null");
-        } else if (cst instanceof String) {
-            appendString(buf, (String) cst);
-        } else if (cst instanceof Type) {
-            buf.append("Type.getType(\"");
-            buf.append(((Type) cst).getDescriptor());
-            buf.append("\")");
-        } else if (cst instanceof Handle) {
-            buf.append("new Handle(");
-            Handle h = (Handle) cst;
-            buf.append("Opcodes.").append(HANDLE_TAG[h.getTag()])
-                    .append(", \"");
-            buf.append(h.getOwner()).append("\", \"");
-            buf.append(h.getName()).append("\", \"");
-            buf.append(h.getDesc()).append("\")");
-        } else if (cst instanceof Byte) {
-            buf.append("new Byte((byte)").append(cst).append(')');
-        } else if (cst instanceof Boolean) {
-            buf.append(((Boolean) cst).booleanValue() ? "Boolean.TRUE"
-                    : "Boolean.FALSE");
-        } else if (cst instanceof Short) {
-            buf.append("new Short((short)").append(cst).append(')');
-        } else if (cst instanceof Character) {
-            int c = ((Character) cst).charValue();
-            buf.append("new Character((char)").append(c).append(')');
-        } else if (cst instanceof Integer) {
-            buf.append("new Integer(").append(cst).append(')');
-        } else if (cst instanceof Float) {
-            buf.append("new Float(\"").append(cst).append("\")");
-        } else if (cst instanceof Long) {
-            buf.append("new Long(").append(cst).append("L)");
-        } else if (cst instanceof Double) {
-            buf.append("new Double(\"").append(cst).append("\")");
-        } else if (cst instanceof byte[]) {
-            byte[] v = (byte[]) cst;
-            buf.append("new byte[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append(v[i]);
-            }
-            buf.append('}');
-        } else if (cst instanceof boolean[]) {
-            boolean[] v = (boolean[]) cst;
-            buf.append("new boolean[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append(v[i]);
-            }
-            buf.append('}');
-        } else if (cst instanceof short[]) {
-            short[] v = (short[]) cst;
-            buf.append("new short[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append("(short)").append(v[i]);
-            }
-            buf.append('}');
-        } else if (cst instanceof char[]) {
-            char[] v = (char[]) cst;
-            buf.append("new char[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append("(char)")
-                        .append((int) v[i]);
-            }
-            buf.append('}');
-        } else if (cst instanceof int[]) {
-            int[] v = (int[]) cst;
-            buf.append("new int[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append(v[i]);
-            }
-            buf.append('}');
-        } else if (cst instanceof long[]) {
-            long[] v = (long[]) cst;
-            buf.append("new long[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append(v[i]).append('L');
-            }
-            buf.append('}');
-        } else if (cst instanceof float[]) {
-            float[] v = (float[]) cst;
-            buf.append("new float[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append(v[i]).append('f');
-            }
-            buf.append('}');
-        } else if (cst instanceof double[]) {
-            double[] v = (double[]) cst;
-            buf.append("new double[] {");
-            for (int i = 0; i < v.length; i++) {
-                buf.append(i == 0 ? "" : ",").append(v[i]).append('d');
-            }
-            buf.append('}');
-        }
-    }
-
-    private void declareFrameTypes(final int n, final Object[] o) {
-        for (int i = 0; i < n; ++i) {
-            if (o[i] instanceof Label) {
-                declareLabel((Label) o[i]);
-            }
-        }
-    }
-
-    private void appendFrameTypes(final int n, final Object[] o) {
-        for (int i = 0; i < n; ++i) {
-            if (i > 0) {
-                buf.append(", ");
-            }
-            if (o[i] instanceof String) {
-                appendConstant(o[i]);
-            } else if (o[i] instanceof Integer) {
-                switch (((Integer) o[i]).intValue()) {
-                case 0:
-                    buf.append("Opcodes.TOP");
-                    break;
-                case 1:
-                    buf.append("Opcodes.INTEGER");
-                    break;
-                case 2:
-                    buf.append("Opcodes.FLOAT");
-                    break;
-                case 3:
-                    buf.append("Opcodes.DOUBLE");
-                    break;
-                case 4:
-                    buf.append("Opcodes.LONG");
-                    break;
-                case 5:
-                    buf.append("Opcodes.NULL");
-                    break;
-                case 6:
-                    buf.append("Opcodes.UNINITIALIZED_THIS");
-                    break;
-                }
-            } else {
-                appendLabel((Label) o[i]);
-            }
-        }
-    }
-
-    /**
-     * Appends a declaration of the given label to {@link #buf buf}. This
-     * declaration is of the form "Label lXXX = new Label();". Does nothing if
-     * the given label has already been declared.
-     * 
-     * @param l
-     *            a label.
-     */
-    protected void declareLabel(final Label l) {
-        if (labelNames == null) {
-            labelNames = new HashMap<Label, String>();
-        }
-        String name = labelNames.get(l);
-        if (name == null) {
-            name = "l" + labelNames.size();
-            labelNames.put(l, name);
-            buf.append("Label ").append(name).append(" = new Label();\n");
-        }
-    }
-
-    /**
-     * Appends the name of the given label to {@link #buf buf}. The given label
-     * <i>must</i> already have a name. One way to ensure this is to always call
-     * {@link #declareLabel declared} before calling this method.
-     * 
-     * @param l
-     *            a label.
-     */
-    protected void appendLabel(final Label l) {
-        buf.append(labelNames.get(l));
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/CheckAnnotationAdapter.java b/asm4/src/org/objectweb/asm/util/CheckAnnotationAdapter.java
deleted file mode 100644
index c59ecf2..0000000
--- a/asm4/src/org/objectweb/asm/util/CheckAnnotationAdapter.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * An {@link AnnotationVisitor} that checks that its methods are properly used.
- * 
- * @author Eric Bruneton
- */
-public class CheckAnnotationAdapter extends AnnotationVisitor {
-
-    private final boolean named;
-
-    private boolean end;
-
-    public CheckAnnotationAdapter(final AnnotationVisitor av) {
-        this(av, true);
-    }
-
-    CheckAnnotationAdapter(final AnnotationVisitor av, final boolean named) {
-        super(Opcodes.ASM4, av);
-        this.named = named;
-    }
-
-    @Override
-    public void visit(final String name, final Object value) {
-        checkEnd();
-        checkName(name);
-        if (!(value instanceof Byte || value instanceof Boolean
-                || value instanceof Character || value instanceof Short
-                || value instanceof Integer || value instanceof Long
-                || value instanceof Float || value instanceof Double
-                || value instanceof String || value instanceof Type
-                || value instanceof byte[] || value instanceof boolean[]
-                || value instanceof char[] || value instanceof short[]
-                || value instanceof int[] || value instanceof long[]
-                || value instanceof float[] || value instanceof double[])) {
-            throw new IllegalArgumentException("Invalid annotation value");
-        }
-        if (value instanceof Type) {
-            int sort = ((Type) value).getSort();
-            if (sort != Type.OBJECT && sort != Type.ARRAY) {
-                throw new IllegalArgumentException("Invalid annotation value");
-            }
-        }
-        if (av != null) {
-            av.visit(name, value);
-        }
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        checkEnd();
-        checkName(name);
-        CheckMethodAdapter.checkDesc(desc, false);
-        if (value == null) {
-            throw new IllegalArgumentException("Invalid enum value");
-        }
-        if (av != null) {
-            av.visitEnum(name, desc, value);
-        }
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        checkEnd();
-        checkName(name);
-        CheckMethodAdapter.checkDesc(desc, false);
-        return new CheckAnnotationAdapter(av == null ? null
-                : av.visitAnnotation(name, desc));
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        checkEnd();
-        checkName(name);
-        return new CheckAnnotationAdapter(av == null ? null
-                : av.visitArray(name), false);
-    }
-
-    @Override
-    public void visitEnd() {
-        checkEnd();
-        end = true;
-        if (av != null) {
-            av.visitEnd();
-        }
-    }
-
-    private void checkEnd() {
-        if (end) {
-            throw new IllegalStateException(
-                    "Cannot call a visit method after visitEnd has been called");
-        }
-    }
-
-    private void checkName(final String name) {
-        if (named && name == null) {
-            throw new IllegalArgumentException(
-                    "Annotation value name must not be null");
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/CheckClassAdapter.java b/asm4/src/org/objectweb/asm/util/CheckClassAdapter.java
deleted file mode 100644
index 73cf876..0000000
--- a/asm4/src/org/objectweb/asm/util/CheckClassAdapter.java
+++ /dev/null
@@ -1,906 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.BasicValue;
-import org.objectweb.asm.tree.analysis.Frame;
-import org.objectweb.asm.tree.analysis.SimpleVerifier;
-
-/**
- * A {@link ClassVisitor} that checks that its methods are properly used. More
- * precisely this class adapter checks each method call individually, based
- * <i>only</i> on its arguments, but does <i>not</i> check the <i>sequence</i>
- * of method calls. For example, the invalid sequence
- * <tt>visitField(ACC_PUBLIC, "i", "I", null)</tt> <tt>visitField(ACC_PUBLIC,
- * "i", "D", null)</tt> will <i>not</i> be detected by this class adapter.
- * 
- * <p>
- * <code>CheckClassAdapter</code> can be also used to verify bytecode
- * transformations in order to make sure transformed bytecode is sane. For
- * example:
- * 
- * <pre>
- *   InputStream is = ...; // get bytes for the source class
- *   ClassReader cr = new ClassReader(is);
- *   ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
- *   ClassVisitor cv = new <b>MyClassAdapter</b>(new CheckClassAdapter(cw));
- *   cr.accept(cv, 0);
- * 
- *   StringWriter sw = new StringWriter();
- *   PrintWriter pw = new PrintWriter(sw);
- *   CheckClassAdapter.verify(new ClassReader(cw.toByteArray()), false, pw);
- *   assertTrue(sw.toString(), sw.toString().length()==0);
- * </pre>
- * 
- * Above code runs transformed bytecode trough the
- * <code>CheckClassAdapter</code>. It won't be exactly the same verification as
- * JVM does, but it run data flow analysis for the code of each method and
- * checks that expectations are met for each method instruction.
- * 
- * <p>
- * If method bytecode has errors, assertion text will show the erroneous
- * instruction number and dump of the failed method with information about
- * locals and stack slot for each instruction. For example (format is -
- * insnNumber locals : stack):
- * 
- * <pre>
- * org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction 71: Expected I, but found .
- *   at org.objectweb.asm.tree.analysis.Analyzer.analyze(Analyzer.java:289)
- *   at org.objectweb.asm.util.CheckClassAdapter.verify(CheckClassAdapter.java:135)
- * ...
- * remove()V
- * 00000 LinkedBlockingQueue$Itr . . . . . . . .  :
- *   ICONST_0
- * 00001 LinkedBlockingQueue$Itr . . . . . . . .  : I
- *   ISTORE 2
- * 00001 LinkedBlockingQueue$Itr <b>.</b> I . . . . . .  :
- * ...
- * 
- * 00071 LinkedBlockingQueue$Itr <b>.</b> I . . . . . .  :
- *   ILOAD 1
- * 00072 <b>?</b>
- *   INVOKESPECIAL java/lang/Integer.<init> (I)V
- * ...
- * </pre>
- * 
- * In the above output you can see that variable 1 loaded by
- * <code>ILOAD 1</code> instruction at position <code>00071</code> is not
- * initialized. You can also see that at the beginning of the method (code
- * inserted by the transformation) variable 2 is initialized.
- * 
- * <p>
- * Note that when used like that, <code>CheckClassAdapter.verify()</code> can
- * trigger additional class loading, because it is using
- * <code>SimpleVerifier</code>.
- * 
- * @author Eric Bruneton
- */
-public class CheckClassAdapter extends ClassVisitor {
-
-    /**
-     * The class version number.
-     */
-    private int version;
-
-    /**
-     * <tt>true</tt> if the visit method has been called.
-     */
-    private boolean start;
-
-    /**
-     * <tt>true</tt> if the visitSource method has been called.
-     */
-    private boolean source;
-
-    /**
-     * <tt>true</tt> if the visitOuterClass method has been called.
-     */
-    private boolean outer;
-
-    /**
-     * <tt>true</tt> if the visitEnd method has been called.
-     */
-    private boolean end;
-
-    /**
-     * The already visited labels. This map associate Integer values to Label
-     * keys.
-     */
-    private Map<Label, Integer> labels;
-
-    /**
-     * <tt>true</tt> if the method code must be checked with a BasicVerifier.
-     */
-    private boolean checkDataFlow;
-
-    /**
-     * Checks a given class.
-     * <p>
-     * Usage: CheckClassAdapter &lt;binary class name or class file name&gt;
-     * 
-     * @param args
-     *            the command line arguments.
-     * 
-     * @throws Exception
-     *             if the class cannot be found, or if an IO exception occurs.
-     */
-    public static void main(final String[] args) throws Exception {
-        if (args.length != 1) {
-            System.err.println("Verifies the given class.");
-            System.err.println("Usage: CheckClassAdapter "
-                    + "<fully qualified class name or class file name>");
-            return;
-        }
-        ClassReader cr;
-        if (args[0].endsWith(".class")) {
-            cr = new ClassReader(new FileInputStream(args[0]));
-        } else {
-            cr = new ClassReader(args[0]);
-        }
-
-        verify(cr, false, new PrintWriter(System.err));
-    }
-
-    /**
-     * Checks a given class.
-     * 
-     * @param cr
-     *            a <code>ClassReader</code> that contains bytecode for the
-     *            analysis.
-     * @param loader
-     *            a <code>ClassLoader</code> which will be used to load
-     *            referenced classes. This is useful if you are verifiying
-     *            multiple interdependent classes.
-     * @param dump
-     *            true if bytecode should be printed out not only when errors
-     *            are found.
-     * @param pw
-     *            write where results going to be printed
-     */
-    public static void verify(final ClassReader cr, final ClassLoader loader,
-            final boolean dump, final PrintWriter pw) {
-        ClassNode cn = new ClassNode();
-        cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
-
-        Type syperType = cn.superName == null ? null : Type
-                .getObjectType(cn.superName);
-        List<MethodNode> methods = cn.methods;
-
-        List<Type> interfaces = new ArrayList<Type>();
-        for (Iterator<String> i = cn.interfaces.iterator(); i.hasNext();) {
-            interfaces.add(Type.getObjectType(i.next().toString()));
-        }
-
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            SimpleVerifier verifier = new SimpleVerifier(
-                    Type.getObjectType(cn.name), syperType, interfaces,
-                    (cn.access & Opcodes.ACC_INTERFACE) != 0);
-            Analyzer<BasicValue> a = new Analyzer<BasicValue>(verifier);
-            if (loader != null) {
-                verifier.setClassLoader(loader);
-            }
-            try {
-                a.analyze(cn.name, method);
-                if (!dump) {
-                    continue;
-                }
-            } catch (Exception e) {
-                e.printStackTrace(pw);
-            }
-            printAnalyzerResult(method, a, pw);
-        }
-        pw.flush();
-    }
-
-    /**
-     * Checks a given class
-     * 
-     * @param cr
-     *            a <code>ClassReader</code> that contains bytecode for the
-     *            analysis.
-     * @param dump
-     *            true if bytecode should be printed out not only when errors
-     *            are found.
-     * @param pw
-     *            write where results going to be printed
-     */
-    public static void verify(final ClassReader cr, final boolean dump,
-            final PrintWriter pw) {
-        verify(cr, null, dump, pw);
-    }
-
-    static void printAnalyzerResult(MethodNode method, Analyzer<BasicValue> a,
-            final PrintWriter pw) {
-        Frame<BasicValue>[] frames = a.getFrames();
-        Textifier t = new Textifier();
-        TraceMethodVisitor mv = new TraceMethodVisitor(t);
-
-        pw.println(method.name + method.desc);
-        for (int j = 0; j < method.instructions.size(); ++j) {
-            method.instructions.get(j).accept(mv);
-
-            StringBuffer s = new StringBuffer();
-            Frame<BasicValue> f = frames[j];
-            if (f == null) {
-                s.append('?');
-            } else {
-                for (int k = 0; k < f.getLocals(); ++k) {
-                    s.append(getShortName(f.getLocal(k).toString()))
-                            .append(' ');
-                }
-                s.append(" : ");
-                for (int k = 0; k < f.getStackSize(); ++k) {
-                    s.append(getShortName(f.getStack(k).toString()))
-                            .append(' ');
-                }
-            }
-            while (s.length() < method.maxStack + method.maxLocals + 1) {
-                s.append(' ');
-            }
-            pw.print(Integer.toString(j + 100000).substring(1));
-            pw.print(" " + s + " : " + t.text.get(t.text.size() - 1));
-        }
-        for (int j = 0; j < method.tryCatchBlocks.size(); ++j) {
-            method.tryCatchBlocks.get(j).accept(mv);
-            pw.print(" " + t.text.get(t.text.size() - 1));
-        }
-        pw.println();
-    }
-
-    private static String getShortName(final String name) {
-        int n = name.lastIndexOf('/');
-        int k = name.length();
-        if (name.charAt(k - 1) == ';') {
-            k--;
-        }
-        return n == -1 ? name : name.substring(n + 1, k);
-    }
-
-    /**
-     * Constructs a new {@link CheckClassAdapter}. <i>Subclasses must not use
-     * this constructor</i>. Instead, they must use the
-     * {@link #CheckClassAdapter(int, ClassVisitor, boolean)} version.
-     * 
-     * @param cv
-     *            the class visitor to which this adapter must delegate calls.
-     */
-    public CheckClassAdapter(final ClassVisitor cv) {
-        this(cv, true);
-    }
-
-    /**
-     * Constructs a new {@link CheckClassAdapter}. <i>Subclasses must not use
-     * this constructor</i>. Instead, they must use the
-     * {@link #CheckClassAdapter(int, ClassVisitor, boolean)} version.
-     * 
-     * @param cv
-     *            the class visitor to which this adapter must delegate calls.
-     * @param checkDataFlow
-     *            <tt>true</tt> to perform basic data flow checks, or
-     *            <tt>false</tt> to not perform any data flow check (see
-     *            {@link CheckMethodAdapter}). This option requires valid
-     *            maxLocals and maxStack values.
-     */
-    public CheckClassAdapter(final ClassVisitor cv, final boolean checkDataFlow) {
-        this(Opcodes.ASM4, cv, checkDataFlow);
-    }
-
-    /**
-     * Constructs a new {@link CheckClassAdapter}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param cv
-     *            the class visitor to which this adapter must delegate calls.
-     * @param checkDataFlow
-     *            <tt>true</tt> to perform basic data flow checks, or
-     *            <tt>false</tt> to not perform any data flow check (see
-     *            {@link CheckMethodAdapter}). This option requires valid
-     *            maxLocals and maxStack values.
-     */
-    protected CheckClassAdapter(final int api, final ClassVisitor cv,
-            final boolean checkDataFlow) {
-        super(api, cv);
-        this.labels = new HashMap<Label, Integer>();
-        this.checkDataFlow = checkDataFlow;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the ClassVisitor interface
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        if (start) {
-            throw new IllegalStateException("visit must be called only once");
-        }
-        start = true;
-        checkState();
-        checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL
-                + Opcodes.ACC_SUPER + Opcodes.ACC_INTERFACE
-                + Opcodes.ACC_ABSTRACT + Opcodes.ACC_SYNTHETIC
-                + Opcodes.ACC_ANNOTATION + Opcodes.ACC_ENUM
-                + Opcodes.ACC_DEPRECATED + 0x40000); // ClassWriter.ACC_SYNTHETIC_ATTRIBUTE
-        if (name == null || !name.endsWith("package-info")) {
-            CheckMethodAdapter.checkInternalName(name, "class name");
-        }
-        if ("java/lang/Object".equals(name)) {
-            if (superName != null) {
-                throw new IllegalArgumentException(
-                        "The super class name of the Object class must be 'null'");
-            }
-        } else {
-            CheckMethodAdapter.checkInternalName(superName, "super class name");
-        }
-        if (signature != null) {
-            checkClassSignature(signature);
-        }
-        if ((access & Opcodes.ACC_INTERFACE) != 0) {
-            if (!"java/lang/Object".equals(superName)) {
-                throw new IllegalArgumentException(
-                        "The super class name of interfaces must be 'java/lang/Object'");
-            }
-        }
-        if (interfaces != null) {
-            for (int i = 0; i < interfaces.length; ++i) {
-                CheckMethodAdapter.checkInternalName(interfaces[i],
-                        "interface name at index " + i);
-            }
-        }
-        this.version = version;
-        super.visit(version, access, name, signature, superName, interfaces);
-    }
-
-    @Override
-    public void visitSource(final String file, final String debug) {
-        checkState();
-        if (source) {
-            throw new IllegalStateException(
-                    "visitSource can be called only once.");
-        }
-        source = true;
-        super.visitSource(file, debug);
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        checkState();
-        if (outer) {
-            throw new IllegalStateException(
-                    "visitOuterClass can be called only once.");
-        }
-        outer = true;
-        if (owner == null) {
-            throw new IllegalArgumentException("Illegal outer class owner");
-        }
-        if (desc != null) {
-            CheckMethodAdapter.checkMethodDesc(desc);
-        }
-        super.visitOuterClass(owner, name, desc);
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        checkState();
-        CheckMethodAdapter.checkInternalName(name, "class name");
-        if (outerName != null) {
-            CheckMethodAdapter.checkInternalName(outerName, "outer class name");
-        }
-        if (innerName != null) {
-            CheckMethodAdapter.checkIdentifier(innerName, "inner class name");
-        }
-        checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_PRIVATE
-                + Opcodes.ACC_PROTECTED + Opcodes.ACC_STATIC
-                + Opcodes.ACC_FINAL + Opcodes.ACC_INTERFACE
-                + Opcodes.ACC_ABSTRACT + Opcodes.ACC_SYNTHETIC
-                + Opcodes.ACC_ANNOTATION + Opcodes.ACC_ENUM);
-        super.visitInnerClass(name, outerName, innerName, access);
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        checkState();
-        checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_PRIVATE
-                + Opcodes.ACC_PROTECTED + Opcodes.ACC_STATIC
-                + Opcodes.ACC_FINAL + Opcodes.ACC_VOLATILE
-                + Opcodes.ACC_TRANSIENT + Opcodes.ACC_SYNTHETIC
-                + Opcodes.ACC_ENUM + Opcodes.ACC_DEPRECATED + 0x40000); // ClassWriter.ACC_SYNTHETIC_ATTRIBUTE
-        CheckMethodAdapter.checkUnqualifiedName(version, name, "field name");
-        CheckMethodAdapter.checkDesc(desc, false);
-        if (signature != null) {
-            checkFieldSignature(signature);
-        }
-        if (value != null) {
-            CheckMethodAdapter.checkConstant(value);
-        }
-        FieldVisitor av = super
-                .visitField(access, name, desc, signature, value);
-        return new CheckFieldAdapter(av);
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        checkState();
-        checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_PRIVATE
-                + Opcodes.ACC_PROTECTED + Opcodes.ACC_STATIC
-                + Opcodes.ACC_FINAL + Opcodes.ACC_SYNCHRONIZED
-                + Opcodes.ACC_BRIDGE + Opcodes.ACC_VARARGS + Opcodes.ACC_NATIVE
-                + Opcodes.ACC_ABSTRACT + Opcodes.ACC_STRICT
-                + Opcodes.ACC_SYNTHETIC + Opcodes.ACC_DEPRECATED + 0x40000); // ClassWriter.ACC_SYNTHETIC_ATTRIBUTE
-        if (!"<init>".equals(name) && !"<clinit>".equals(name)) {
-            CheckMethodAdapter.checkMethodIdentifier(version, name,
-                    "method name");
-        }
-        CheckMethodAdapter.checkMethodDesc(desc);
-        if (signature != null) {
-            checkMethodSignature(signature);
-        }
-        if (exceptions != null) {
-            for (int i = 0; i < exceptions.length; ++i) {
-                CheckMethodAdapter.checkInternalName(exceptions[i],
-                        "exception name at index " + i);
-            }
-        }
-        CheckMethodAdapter cma;
-        if (checkDataFlow) {
-            cma = new CheckMethodAdapter(access, name, desc, super.visitMethod(
-                    access, name, desc, signature, exceptions), labels);
-        } else {
-            cma = new CheckMethodAdapter(super.visitMethod(access, name, desc,
-                    signature, exceptions), labels);
-        }
-        cma.version = version;
-        return cma;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        checkState();
-        CheckMethodAdapter.checkDesc(desc, false);
-        return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible));
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        checkState();
-        if (attr == null) {
-            throw new IllegalArgumentException(
-                    "Invalid attribute (must not be null)");
-        }
-        super.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitEnd() {
-        checkState();
-        end = true;
-        super.visitEnd();
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Checks that the visit method has been called and that visitEnd has not
-     * been called.
-     */
-    private void checkState() {
-        if (!start) {
-            throw new IllegalStateException(
-                    "Cannot visit member before visit has been called.");
-        }
-        if (end) {
-            throw new IllegalStateException(
-                    "Cannot visit member after visitEnd has been called.");
-        }
-    }
-
-    /**
-     * Checks that the given access flags do not contain invalid flags. This
-     * method also checks that mutually incompatible flags are not set
-     * simultaneously.
-     * 
-     * @param access
-     *            the access flags to be checked
-     * @param possibleAccess
-     *            the valid access flags.
-     */
-    static void checkAccess(final int access, final int possibleAccess) {
-        if ((access & ~possibleAccess) != 0) {
-            throw new IllegalArgumentException("Invalid access flags: "
-                    + access);
-        }
-        int pub = (access & Opcodes.ACC_PUBLIC) == 0 ? 0 : 1;
-        int pri = (access & Opcodes.ACC_PRIVATE) == 0 ? 0 : 1;
-        int pro = (access & Opcodes.ACC_PROTECTED) == 0 ? 0 : 1;
-        if (pub + pri + pro > 1) {
-            throw new IllegalArgumentException(
-                    "public private and protected are mutually exclusive: "
-                            + access);
-        }
-        int fin = (access & Opcodes.ACC_FINAL) == 0 ? 0 : 1;
-        int abs = (access & Opcodes.ACC_ABSTRACT) == 0 ? 0 : 1;
-        if (fin + abs > 1) {
-            throw new IllegalArgumentException(
-                    "final and abstract are mutually exclusive: " + access);
-        }
-    }
-
-    /**
-     * Checks a class signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     */
-    public static void checkClassSignature(final String signature) {
-        // ClassSignature:
-        // FormalTypeParameters? ClassTypeSignature ClassTypeSignature*
-
-        int pos = 0;
-        if (getChar(signature, 0) == '<') {
-            pos = checkFormalTypeParameters(signature, pos);
-        }
-        pos = checkClassTypeSignature(signature, pos);
-        while (getChar(signature, pos) == 'L') {
-            pos = checkClassTypeSignature(signature, pos);
-        }
-        if (pos != signature.length()) {
-            throw new IllegalArgumentException(signature + ": error at index "
-                    + pos);
-        }
-    }
-
-    /**
-     * Checks a method signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     */
-    public static void checkMethodSignature(final String signature) {
-        // MethodTypeSignature:
-        // FormalTypeParameters? ( TypeSignature* ) ( TypeSignature | V ) (
-        // ^ClassTypeSignature | ^TypeVariableSignature )*
-
-        int pos = 0;
-        if (getChar(signature, 0) == '<') {
-            pos = checkFormalTypeParameters(signature, pos);
-        }
-        pos = checkChar('(', signature, pos);
-        while ("ZCBSIFJDL[T".indexOf(getChar(signature, pos)) != -1) {
-            pos = checkTypeSignature(signature, pos);
-        }
-        pos = checkChar(')', signature, pos);
-        if (getChar(signature, pos) == 'V') {
-            ++pos;
-        } else {
-            pos = checkTypeSignature(signature, pos);
-        }
-        while (getChar(signature, pos) == '^') {
-            ++pos;
-            if (getChar(signature, pos) == 'L') {
-                pos = checkClassTypeSignature(signature, pos);
-            } else {
-                pos = checkTypeVariableSignature(signature, pos);
-            }
-        }
-        if (pos != signature.length()) {
-            throw new IllegalArgumentException(signature + ": error at index "
-                    + pos);
-        }
-    }
-
-    /**
-     * Checks a field signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     */
-    public static void checkFieldSignature(final String signature) {
-        int pos = checkFieldTypeSignature(signature, 0);
-        if (pos != signature.length()) {
-            throw new IllegalArgumentException(signature + ": error at index "
-                    + pos);
-        }
-    }
-
-    /**
-     * Checks the formal type parameters of a class or method signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkFormalTypeParameters(final String signature, int pos) {
-        // FormalTypeParameters:
-        // < FormalTypeParameter+ >
-
-        pos = checkChar('<', signature, pos);
-        pos = checkFormalTypeParameter(signature, pos);
-        while (getChar(signature, pos) != '>') {
-            pos = checkFormalTypeParameter(signature, pos);
-        }
-        return pos + 1;
-    }
-
-    /**
-     * Checks a formal type parameter of a class or method signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkFormalTypeParameter(final String signature, int pos) {
-        // FormalTypeParameter:
-        // Identifier : FieldTypeSignature? (: FieldTypeSignature)*
-
-        pos = checkIdentifier(signature, pos);
-        pos = checkChar(':', signature, pos);
-        if ("L[T".indexOf(getChar(signature, pos)) != -1) {
-            pos = checkFieldTypeSignature(signature, pos);
-        }
-        while (getChar(signature, pos) == ':') {
-            pos = checkFieldTypeSignature(signature, pos + 1);
-        }
-        return pos;
-    }
-
-    /**
-     * Checks a field type signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkFieldTypeSignature(final String signature, int pos) {
-        // FieldTypeSignature:
-        // ClassTypeSignature | ArrayTypeSignature | TypeVariableSignature
-        //
-        // ArrayTypeSignature:
-        // [ TypeSignature
-
-        switch (getChar(signature, pos)) {
-        case 'L':
-            return checkClassTypeSignature(signature, pos);
-        case '[':
-            return checkTypeSignature(signature, pos + 1);
-        default:
-            return checkTypeVariableSignature(signature, pos);
-        }
-    }
-
-    /**
-     * Checks a class type signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkClassTypeSignature(final String signature, int pos) {
-        // ClassTypeSignature:
-        // L Identifier ( / Identifier )* TypeArguments? ( . Identifier
-        // TypeArguments? )* ;
-
-        pos = checkChar('L', signature, pos);
-        pos = checkIdentifier(signature, pos);
-        while (getChar(signature, pos) == '/') {
-            pos = checkIdentifier(signature, pos + 1);
-        }
-        if (getChar(signature, pos) == '<') {
-            pos = checkTypeArguments(signature, pos);
-        }
-        while (getChar(signature, pos) == '.') {
-            pos = checkIdentifier(signature, pos + 1);
-            if (getChar(signature, pos) == '<') {
-                pos = checkTypeArguments(signature, pos);
-            }
-        }
-        return checkChar(';', signature, pos);
-    }
-
-    /**
-     * Checks the type arguments in a class type signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeArguments(final String signature, int pos) {
-        // TypeArguments:
-        // < TypeArgument+ >
-
-        pos = checkChar('<', signature, pos);
-        pos = checkTypeArgument(signature, pos);
-        while (getChar(signature, pos) != '>') {
-            pos = checkTypeArgument(signature, pos);
-        }
-        return pos + 1;
-    }
-
-    /**
-     * Checks a type argument in a class type signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeArgument(final String signature, int pos) {
-        // TypeArgument:
-        // * | ( ( + | - )? FieldTypeSignature )
-
-        char c = getChar(signature, pos);
-        if (c == '*') {
-            return pos + 1;
-        } else if (c == '+' || c == '-') {
-            pos++;
-        }
-        return checkFieldTypeSignature(signature, pos);
-    }
-
-    /**
-     * Checks a type variable signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeVariableSignature(final String signature,
-            int pos) {
-        // TypeVariableSignature:
-        // T Identifier ;
-
-        pos = checkChar('T', signature, pos);
-        pos = checkIdentifier(signature, pos);
-        return checkChar(';', signature, pos);
-    }
-
-    /**
-     * Checks a type signature.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeSignature(final String signature, int pos) {
-        // TypeSignature:
-        // Z | C | B | S | I | F | J | D | FieldTypeSignature
-
-        switch (getChar(signature, pos)) {
-        case 'Z':
-        case 'C':
-        case 'B':
-        case 'S':
-        case 'I':
-        case 'F':
-        case 'J':
-        case 'D':
-            return pos + 1;
-        default:
-            return checkFieldTypeSignature(signature, pos);
-        }
-    }
-
-    /**
-     * Checks an identifier.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkIdentifier(final String signature, int pos) {
-        if (!Character.isJavaIdentifierStart(getChar(signature, pos))) {
-            throw new IllegalArgumentException(signature
-                    + ": identifier expected at index " + pos);
-        }
-        ++pos;
-        while (Character.isJavaIdentifierPart(getChar(signature, pos))) {
-            ++pos;
-        }
-        return pos;
-    }
-
-    /**
-     * Checks a single character.
-     * 
-     * @param signature
-     *            a string containing the signature that must be checked.
-     * @param pos
-     *            index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkChar(final char c, final String signature, int pos) {
-        if (getChar(signature, pos) == c) {
-            return pos + 1;
-        }
-        throw new IllegalArgumentException(signature + ": '" + c
-                + "' expected at index " + pos);
-    }
-
-    /**
-     * Returns the signature car at the given index.
-     * 
-     * @param signature
-     *            a signature.
-     * @param pos
-     *            an index in signature.
-     * @return the character at the given index, or 0 if there is no such
-     *         character.
-     */
-    private static char getChar(final String signature, int pos) {
-        return pos < signature.length() ? signature.charAt(pos) : (char) 0;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/CheckFieldAdapter.java b/asm4/src/org/objectweb/asm/util/CheckFieldAdapter.java
deleted file mode 100644
index a7bf81a..0000000
--- a/asm4/src/org/objectweb/asm/util/CheckFieldAdapter.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link FieldVisitor} that checks that its methods are properly used.
- */
-public class CheckFieldAdapter extends FieldVisitor {
-
-    private boolean end;
-
-    /**
-     * Constructs a new {@link CheckFieldAdapter}. <i>Subclasses must not use
-     * this constructor</i>. Instead, they must use the
-     * {@link #CheckFieldAdapter(int, FieldVisitor)} version.
-     * 
-     * @param fv
-     *            the field visitor to which this adapter must delegate calls.
-     */
-    public CheckFieldAdapter(final FieldVisitor fv) {
-        this(Opcodes.ASM4, fv);
-    }
-
-    /**
-     * Constructs a new {@link CheckFieldAdapter}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param fv
-     *            the field visitor to which this adapter must delegate calls.
-     */
-    protected CheckFieldAdapter(final int api, final FieldVisitor fv) {
-        super(api, fv);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        checkEnd();
-        CheckMethodAdapter.checkDesc(desc, false);
-        return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible));
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        checkEnd();
-        if (attr == null) {
-            throw new IllegalArgumentException(
-                    "Invalid attribute (must not be null)");
-        }
-        super.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitEnd() {
-        checkEnd();
-        end = true;
-        super.visitEnd();
-    }
-
-    private void checkEnd() {
-        if (end) {
-            throw new IllegalStateException(
-                    "Cannot call a visit method after visitEnd has been called");
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/CheckMethodAdapter.java b/asm4/src/org/objectweb/asm/util/CheckMethodAdapter.java
deleted file mode 100644
index 7d0a818..0000000
--- a/asm4/src/org/objectweb/asm/util/CheckMethodAdapter.java
+++ /dev/null
@@ -1,1397 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.BasicValue;
-import org.objectweb.asm.tree.analysis.BasicVerifier;
-
-/**
- * A {@link MethodVisitor} that checks that its methods are properly used. More
- * precisely this method adapter checks each instruction individually, i.e.,
- * each visit method checks some preconditions based <i>only</i> on its
- * arguments - such as the fact that the given opcode is correct for a given
- * visit method. This adapter can also perform some basic data flow checks (more
- * precisely those that can be performed without the full class hierarchy - see
- * {@link org.objectweb.asm.tree.analysis.BasicVerifier}). For instance in a
- * method whose signature is <tt>void m ()</tt>, the invalid instruction
- * IRETURN, or the invalid sequence IADD L2I will be detected if the data flow
- * checks are enabled. These checks are enabled by using the
- * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)} constructor.
- * They are not performed if any other constructor is used.
- * 
- * @author Eric Bruneton
- */
-public class CheckMethodAdapter extends MethodVisitor {
-
-    /**
-     * The class version number.
-     */
-    public int version;
-
-    /**
-     * The access flags of the method.
-     */
-    private int access;
-
-    /**
-     * <tt>true</tt> if the visitCode method has been called.
-     */
-    private boolean startCode;
-
-    /**
-     * <tt>true</tt> if the visitMaxs method has been called.
-     */
-    private boolean endCode;
-
-    /**
-     * <tt>true</tt> if the visitEnd method has been called.
-     */
-    private boolean endMethod;
-
-    /**
-     * Number of visited instructions.
-     */
-    private int insnCount;
-
-    /**
-     * The already visited labels. This map associate Integer values to pseudo
-     * code offsets.
-     */
-    private final Map<Label, Integer> labels;
-
-    /**
-     * The labels used in this method. Every used label must be visited with
-     * visitLabel before the end of the method (i.e. should be in #labels).
-     */
-    private Set<Label> usedLabels;
-
-    /**
-     * Number of visited frames in expanded form.
-     */
-    private int expandedFrames;
-
-    /**
-     * Number of visited frames in compressed form.
-     */
-    private int compressedFrames;
-
-    /**
-     * Number of instructions before the last visited frame.
-     */
-    private int lastFrame = -1;
-
-    /**
-     * The exception handler ranges. Each pair of list element contains the
-     * start and end labels of an exception handler block.
-     */
-    private List<Label> handlers;
-
-    /**
-     * Code of the visit method to be used for each opcode.
-     */
-    private static final int[] TYPE;
-
-    /**
-     * The Label.status field.
-     */
-    private static Field labelStatusField;
-
-    static {
-        String s = "BBBBBBBBBBBBBBBBCCIAADDDDDAAAAAAAAAAAAAAAAAAAABBBBBBBBDD"
-                + "DDDAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
-                + "BBBBBBBBBBBBBBBBBBBJBBBBBBBBBBBBBBBBBBBBHHHHHHHHHHHHHHHHD"
-                + "KLBBBBBBFFFFGGGGAECEBBEEBBAMHHAA";
-        TYPE = new int[s.length()];
-        for (int i = 0; i < TYPE.length; ++i) {
-            TYPE[i] = s.charAt(i) - 'A' - 1;
-        }
-    }
-
-    // code to generate the above string
-    // public static void main (String[] args) {
-    // int[] TYPE = new int[] {
-    // 0, //NOP
-    // 0, //ACONST_NULL
-    // 0, //ICONST_M1
-    // 0, //ICONST_0
-    // 0, //ICONST_1
-    // 0, //ICONST_2
-    // 0, //ICONST_3
-    // 0, //ICONST_4
-    // 0, //ICONST_5
-    // 0, //LCONST_0
-    // 0, //LCONST_1
-    // 0, //FCONST_0
-    // 0, //FCONST_1
-    // 0, //FCONST_2
-    // 0, //DCONST_0
-    // 0, //DCONST_1
-    // 1, //BIPUSH
-    // 1, //SIPUSH
-    // 7, //LDC
-    // -1, //LDC_W
-    // -1, //LDC2_W
-    // 2, //ILOAD
-    // 2, //LLOAD
-    // 2, //FLOAD
-    // 2, //DLOAD
-    // 2, //ALOAD
-    // -1, //ILOAD_0
-    // -1, //ILOAD_1
-    // -1, //ILOAD_2
-    // -1, //ILOAD_3
-    // -1, //LLOAD_0
-    // -1, //LLOAD_1
-    // -1, //LLOAD_2
-    // -1, //LLOAD_3
-    // -1, //FLOAD_0
-    // -1, //FLOAD_1
-    // -1, //FLOAD_2
-    // -1, //FLOAD_3
-    // -1, //DLOAD_0
-    // -1, //DLOAD_1
-    // -1, //DLOAD_2
-    // -1, //DLOAD_3
-    // -1, //ALOAD_0
-    // -1, //ALOAD_1
-    // -1, //ALOAD_2
-    // -1, //ALOAD_3
-    // 0, //IALOAD
-    // 0, //LALOAD
-    // 0, //FALOAD
-    // 0, //DALOAD
-    // 0, //AALOAD
-    // 0, //BALOAD
-    // 0, //CALOAD
-    // 0, //SALOAD
-    // 2, //ISTORE
-    // 2, //LSTORE
-    // 2, //FSTORE
-    // 2, //DSTORE
-    // 2, //ASTORE
-    // -1, //ISTORE_0
-    // -1, //ISTORE_1
-    // -1, //ISTORE_2
-    // -1, //ISTORE_3
-    // -1, //LSTORE_0
-    // -1, //LSTORE_1
-    // -1, //LSTORE_2
-    // -1, //LSTORE_3
-    // -1, //FSTORE_0
-    // -1, //FSTORE_1
-    // -1, //FSTORE_2
-    // -1, //FSTORE_3
-    // -1, //DSTORE_0
-    // -1, //DSTORE_1
-    // -1, //DSTORE_2
-    // -1, //DSTORE_3
-    // -1, //ASTORE_0
-    // -1, //ASTORE_1
-    // -1, //ASTORE_2
-    // -1, //ASTORE_3
-    // 0, //IASTORE
-    // 0, //LASTORE
-    // 0, //FASTORE
-    // 0, //DASTORE
-    // 0, //AASTORE
-    // 0, //BASTORE
-    // 0, //CASTORE
-    // 0, //SASTORE
-    // 0, //POP
-    // 0, //POP2
-    // 0, //DUP
-    // 0, //DUP_X1
-    // 0, //DUP_X2
-    // 0, //DUP2
-    // 0, //DUP2_X1
-    // 0, //DUP2_X2
-    // 0, //SWAP
-    // 0, //IADD
-    // 0, //LADD
-    // 0, //FADD
-    // 0, //DADD
-    // 0, //ISUB
-    // 0, //LSUB
-    // 0, //FSUB
-    // 0, //DSUB
-    // 0, //IMUL
-    // 0, //LMUL
-    // 0, //FMUL
-    // 0, //DMUL
-    // 0, //IDIV
-    // 0, //LDIV
-    // 0, //FDIV
-    // 0, //DDIV
-    // 0, //IREM
-    // 0, //LREM
-    // 0, //FREM
-    // 0, //DREM
-    // 0, //INEG
-    // 0, //LNEG
-    // 0, //FNEG
-    // 0, //DNEG
-    // 0, //ISHL
-    // 0, //LSHL
-    // 0, //ISHR
-    // 0, //LSHR
-    // 0, //IUSHR
-    // 0, //LUSHR
-    // 0, //IAND
-    // 0, //LAND
-    // 0, //IOR
-    // 0, //LOR
-    // 0, //IXOR
-    // 0, //LXOR
-    // 8, //IINC
-    // 0, //I2L
-    // 0, //I2F
-    // 0, //I2D
-    // 0, //L2I
-    // 0, //L2F
-    // 0, //L2D
-    // 0, //F2I
-    // 0, //F2L
-    // 0, //F2D
-    // 0, //D2I
-    // 0, //D2L
-    // 0, //D2F
-    // 0, //I2B
-    // 0, //I2C
-    // 0, //I2S
-    // 0, //LCMP
-    // 0, //FCMPL
-    // 0, //FCMPG
-    // 0, //DCMPL
-    // 0, //DCMPG
-    // 6, //IFEQ
-    // 6, //IFNE
-    // 6, //IFLT
-    // 6, //IFGE
-    // 6, //IFGT
-    // 6, //IFLE
-    // 6, //IF_ICMPEQ
-    // 6, //IF_ICMPNE
-    // 6, //IF_ICMPLT
-    // 6, //IF_ICMPGE
-    // 6, //IF_ICMPGT
-    // 6, //IF_ICMPLE
-    // 6, //IF_ACMPEQ
-    // 6, //IF_ACMPNE
-    // 6, //GOTO
-    // 6, //JSR
-    // 2, //RET
-    // 9, //TABLESWITCH
-    // 10, //LOOKUPSWITCH
-    // 0, //IRETURN
-    // 0, //LRETURN
-    // 0, //FRETURN
-    // 0, //DRETURN
-    // 0, //ARETURN
-    // 0, //RETURN
-    // 4, //GETSTATIC
-    // 4, //PUTSTATIC
-    // 4, //GETFIELD
-    // 4, //PUTFIELD
-    // 5, //INVOKEVIRTUAL
-    // 5, //INVOKESPECIAL
-    // 5, //INVOKESTATIC
-    // 5, //INVOKEINTERFACE
-    // -1, //INVOKEDYNAMIC
-    // 3, //NEW
-    // 1, //NEWARRAY
-    // 3, //ANEWARRAY
-    // 0, //ARRAYLENGTH
-    // 0, //ATHROW
-    // 3, //CHECKCAST
-    // 3, //INSTANCEOF
-    // 0, //MONITORENTER
-    // 0, //MONITOREXIT
-    // -1, //WIDE
-    // 11, //MULTIANEWARRAY
-    // 6, //IFNULL
-    // 6, //IFNONNULL
-    // -1, //GOTO_W
-    // -1 //JSR_W
-    // };
-    // for (int i = 0; i < TYPE.length; ++i) {
-    // System.out.print((char)(TYPE[i] + 1 + 'A'));
-    // }
-    // System.out.println();
-    // }
-
-    /**
-     * Constructs a new {@link CheckMethodAdapter} object. This method adapter
-     * will not perform any data flow check (see
-     * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
-     * <i>Subclasses must not use this constructor</i>. Instead, they must use
-     * the {@link #CheckMethodAdapter(int, MethodVisitor, Map)} version.
-     * 
-     * @param mv
-     *            the method visitor to which this adapter must delegate calls.
-     */
-    public CheckMethodAdapter(final MethodVisitor mv) {
-        this(mv, new HashMap<Label, Integer>());
-    }
-
-    /**
-     * Constructs a new {@link CheckMethodAdapter} object. This method adapter
-     * will not perform any data flow check (see
-     * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
-     * <i>Subclasses must not use this constructor</i>. Instead, they must use
-     * the {@link #CheckMethodAdapter(int, MethodVisitor, Map)} version.
-     * 
-     * @param mv
-     *            the method visitor to which this adapter must delegate calls.
-     * @param labels
-     *            a map of already visited labels (in other methods).
-     */
-    public CheckMethodAdapter(final MethodVisitor mv,
-            final Map<Label, Integer> labels) {
-        this(Opcodes.ASM4, mv, labels);
-    }
-
-    /**
-     * Constructs a new {@link CheckMethodAdapter} object. This method adapter
-     * will not perform any data flow check (see
-     * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
-     * 
-     * @param mv
-     *            the method visitor to which this adapter must delegate calls.
-     * @param labels
-     *            a map of already visited labels (in other methods).
-     */
-    protected CheckMethodAdapter(final int api, final MethodVisitor mv,
-            final Map<Label, Integer> labels) {
-        super(api, mv);
-        this.labels = labels;
-        this.usedLabels = new HashSet<Label>();
-        this.handlers = new ArrayList<Label>();
-    }
-
-    /**
-     * Constructs a new {@link CheckMethodAdapter} object. This method adapter
-     * will perform basic data flow checks. For instance in a method whose
-     * signature is <tt>void m ()</tt>, the invalid instruction IRETURN, or the
-     * invalid sequence IADD L2I will be detected.
-     * 
-     * @param access
-     *            the method's access flags.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param cmv
-     *            the method visitor to which this adapter must delegate calls.
-     * @param labels
-     *            a map of already visited labels (in other methods).
-     */
-    public CheckMethodAdapter(final int access, final String name,
-            final String desc, final MethodVisitor cmv,
-            final Map<Label, Integer> labels) {
-        this(new MethodNode(access, name, desc, null, null) {
-            @Override
-            public void visitEnd() {
-                Analyzer<BasicValue> a = new Analyzer<BasicValue>(
-                        new BasicVerifier());
-                try {
-                    a.analyze("dummy", this);
-                } catch (Exception e) {
-                    if (e instanceof IndexOutOfBoundsException
-                            && maxLocals == 0 && maxStack == 0) {
-                        throw new RuntimeException(
-                                "Data flow checking option requires valid, non zero maxLocals and maxStack values.");
-                    }
-                    e.printStackTrace();
-                    StringWriter sw = new StringWriter();
-                    PrintWriter pw = new PrintWriter(sw, true);
-                    CheckClassAdapter.printAnalyzerResult(this, a, pw);
-                    pw.close();
-                    throw new RuntimeException(e.getMessage() + ' '
-                            + sw.toString());
-                }
-                accept(cmv);
-            }
-        }, labels);
-        this.access = access;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        checkEndMethod();
-        checkDesc(desc, false);
-        return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible));
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        checkEndMethod();
-        return new CheckAnnotationAdapter(super.visitAnnotationDefault(), false);
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        checkEndMethod();
-        checkDesc(desc, false);
-        return new CheckAnnotationAdapter(super.visitParameterAnnotation(
-                parameter, desc, visible));
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        checkEndMethod();
-        if (attr == null) {
-            throw new IllegalArgumentException(
-                    "Invalid attribute (must not be null)");
-        }
-        super.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitCode() {
-        if ((access & Opcodes.ACC_ABSTRACT) != 0) {
-            throw new RuntimeException("Abstract methods cannot have code");
-        }
-        startCode = true;
-        super.visitCode();
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        if (insnCount == lastFrame) {
-            throw new IllegalStateException(
-                    "At most one frame can be visited at a given code location.");
-        }
-        lastFrame = insnCount;
-        int mLocal;
-        int mStack;
-        switch (type) {
-        case Opcodes.F_NEW:
-        case Opcodes.F_FULL:
-            mLocal = Integer.MAX_VALUE;
-            mStack = Integer.MAX_VALUE;
-            break;
-
-        case Opcodes.F_SAME:
-            mLocal = 0;
-            mStack = 0;
-            break;
-
-        case Opcodes.F_SAME1:
-            mLocal = 0;
-            mStack = 1;
-            break;
-
-        case Opcodes.F_APPEND:
-        case Opcodes.F_CHOP:
-            mLocal = 3;
-            mStack = 0;
-            break;
-
-        default:
-            throw new IllegalArgumentException("Invalid frame type " + type);
-        }
-
-        if (nLocal > mLocal) {
-            throw new IllegalArgumentException("Invalid nLocal=" + nLocal
-                    + " for frame type " + type);
-        }
-        if (nStack > mStack) {
-            throw new IllegalArgumentException("Invalid nStack=" + nStack
-                    + " for frame type " + type);
-        }
-
-        if (type != Opcodes.F_CHOP) {
-            if (nLocal > 0 && (local == null || local.length < nLocal)) {
-                throw new IllegalArgumentException(
-                        "Array local[] is shorter than nLocal");
-            }
-            for (int i = 0; i < nLocal; ++i) {
-                checkFrameValue(local[i]);
-            }
-        }
-        if (nStack > 0 && (stack == null || stack.length < nStack)) {
-            throw new IllegalArgumentException(
-                    "Array stack[] is shorter than nStack");
-        }
-        for (int i = 0; i < nStack; ++i) {
-            checkFrameValue(stack[i]);
-        }
-        if (type == Opcodes.F_NEW) {
-            ++expandedFrames;
-        } else {
-            ++compressedFrames;
-        }
-        if (expandedFrames > 0 && compressedFrames > 0) {
-            throw new RuntimeException(
-                    "Expanded and compressed frames must not be mixed.");
-        }
-        super.visitFrame(type, nLocal, local, nStack, stack);
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 0);
-        super.visitInsn(opcode);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 1);
-        switch (opcode) {
-        case Opcodes.BIPUSH:
-            checkSignedByte(operand, "Invalid operand");
-            break;
-        case Opcodes.SIPUSH:
-            checkSignedShort(operand, "Invalid operand");
-            break;
-        // case Constants.NEWARRAY:
-        default:
-            if (operand < Opcodes.T_BOOLEAN || operand > Opcodes.T_LONG) {
-                throw new IllegalArgumentException(
-                        "Invalid operand (must be an array type code T_...): "
-                                + operand);
-            }
-        }
-        super.visitIntInsn(opcode, operand);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 2);
-        checkUnsignedShort(var, "Invalid variable index");
-        super.visitVarInsn(opcode, var);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 3);
-        checkInternalName(type, "type");
-        if (opcode == Opcodes.NEW && type.charAt(0) == '[') {
-            throw new IllegalArgumentException(
-                    "NEW cannot be used to create arrays: " + type);
-        }
-        super.visitTypeInsn(opcode, type);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 4);
-        checkInternalName(owner, "owner");
-        checkUnqualifiedName(version, name, "name");
-        checkDesc(desc, false);
-        super.visitFieldInsn(opcode, owner, name, desc);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 5);
-        if (opcode != Opcodes.INVOKESPECIAL || !"<init>".equals(name)) {
-            checkMethodIdentifier(version, name, "name");
-        }
-        checkInternalName(owner, "owner");
-        checkMethodDesc(desc);
-        super.visitMethodInsn(opcode, owner, name, desc);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        checkStartCode();
-        checkEndCode();
-        checkMethodIdentifier(version, name, "name");
-        checkMethodDesc(desc);
-        if (bsm.getTag() != Opcodes.H_INVOKESTATIC
-                && bsm.getTag() != Opcodes.H_NEWINVOKESPECIAL) {
-            throw new IllegalArgumentException("invalid handle tag "
-                    + bsm.getTag());
-        }
-        for (int i = 0; i < bsmArgs.length; i++) {
-            checkLDCConstant(bsmArgs[i]);
-        }
-        super.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        checkStartCode();
-        checkEndCode();
-        checkOpcode(opcode, 6);
-        checkLabel(label, false, "label");
-        checkNonDebugLabel(label);
-        super.visitJumpInsn(opcode, label);
-        usedLabels.add(label);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        checkStartCode();
-        checkEndCode();
-        checkLabel(label, false, "label");
-        if (labels.get(label) != null) {
-            throw new IllegalArgumentException("Already visited label");
-        }
-        labels.put(label, new Integer(insnCount));
-        super.visitLabel(label);
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        checkStartCode();
-        checkEndCode();
-        checkLDCConstant(cst);
-        super.visitLdcInsn(cst);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        checkStartCode();
-        checkEndCode();
-        checkUnsignedShort(var, "Invalid variable index");
-        checkSignedShort(increment, "Invalid increment");
-        super.visitIincInsn(var, increment);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        checkStartCode();
-        checkEndCode();
-        if (max < min) {
-            throw new IllegalArgumentException("Max = " + max
-                    + " must be greater than or equal to min = " + min);
-        }
-        checkLabel(dflt, false, "default label");
-        checkNonDebugLabel(dflt);
-        if (labels == null || labels.length != max - min + 1) {
-            throw new IllegalArgumentException(
-                    "There must be max - min + 1 labels");
-        }
-        for (int i = 0; i < labels.length; ++i) {
-            checkLabel(labels[i], false, "label at index " + i);
-            checkNonDebugLabel(labels[i]);
-        }
-        super.visitTableSwitchInsn(min, max, dflt, labels);
-        for (int i = 0; i < labels.length; ++i) {
-            usedLabels.add(labels[i]);
-        }
-        ++insnCount;
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        checkEndCode();
-        checkStartCode();
-        checkLabel(dflt, false, "default label");
-        checkNonDebugLabel(dflt);
-        if (keys == null || labels == null || keys.length != labels.length) {
-            throw new IllegalArgumentException(
-                    "There must be the same number of keys and labels");
-        }
-        for (int i = 0; i < labels.length; ++i) {
-            checkLabel(labels[i], false, "label at index " + i);
-            checkNonDebugLabel(labels[i]);
-        }
-        super.visitLookupSwitchInsn(dflt, keys, labels);
-        usedLabels.add(dflt);
-        for (int i = 0; i < labels.length; ++i) {
-            usedLabels.add(labels[i]);
-        }
-        ++insnCount;
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        checkStartCode();
-        checkEndCode();
-        checkDesc(desc, false);
-        if (desc.charAt(0) != '[') {
-            throw new IllegalArgumentException(
-                    "Invalid descriptor (must be an array type descriptor): "
-                            + desc);
-        }
-        if (dims < 1) {
-            throw new IllegalArgumentException(
-                    "Invalid dimensions (must be greater than 0): " + dims);
-        }
-        if (dims > desc.lastIndexOf('[') + 1) {
-            throw new IllegalArgumentException(
-                    "Invalid dimensions (must not be greater than dims(desc)): "
-                            + dims);
-        }
-        super.visitMultiANewArrayInsn(desc, dims);
-        ++insnCount;
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        checkStartCode();
-        checkEndCode();
-        checkLabel(start, false, "start label");
-        checkLabel(end, false, "end label");
-        checkLabel(handler, false, "handler label");
-        checkNonDebugLabel(start);
-        checkNonDebugLabel(end);
-        checkNonDebugLabel(handler);
-        if (labels.get(start) != null || labels.get(end) != null
-                || labels.get(handler) != null) {
-            throw new IllegalStateException(
-                    "Try catch blocks must be visited before their labels");
-        }
-        if (type != null) {
-            checkInternalName(type, "type");
-        }
-        super.visitTryCatchBlock(start, end, handler, type);
-        handlers.add(start);
-        handlers.add(end);
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        checkStartCode();
-        checkEndCode();
-        checkUnqualifiedName(version, name, "name");
-        checkDesc(desc, false);
-        checkLabel(start, true, "start label");
-        checkLabel(end, true, "end label");
-        checkUnsignedShort(index, "Invalid variable index");
-        int s = labels.get(start).intValue();
-        int e = labels.get(end).intValue();
-        if (e < s) {
-            throw new IllegalArgumentException(
-                    "Invalid start and end labels (end must be greater than start)");
-        }
-        super.visitLocalVariable(name, desc, signature, start, end, index);
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        checkStartCode();
-        checkEndCode();
-        checkUnsignedShort(line, "Invalid line number");
-        checkLabel(start, true, "start label");
-        super.visitLineNumber(line, start);
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        checkStartCode();
-        checkEndCode();
-        endCode = true;
-        for (Label l : usedLabels) {
-            if (labels.get(l) == null) {
-                throw new IllegalStateException("Undefined label used");
-            }
-        }
-        for (int i = 0; i < handlers.size();) {
-            Integer start = labels.get(handlers.get(i++));
-            Integer end = labels.get(handlers.get(i++));
-            if (start == null || end == null) {
-                throw new IllegalStateException(
-                        "Undefined try catch block labels");
-            }
-            if (end.intValue() <= start.intValue()) {
-                throw new IllegalStateException(
-                        "Emty try catch block handler range");
-            }
-        }
-        checkUnsignedShort(maxStack, "Invalid max stack");
-        checkUnsignedShort(maxLocals, "Invalid max locals");
-        super.visitMaxs(maxStack, maxLocals);
-    }
-
-    @Override
-    public void visitEnd() {
-        checkEndMethod();
-        endMethod = true;
-        super.visitEnd();
-    }
-
-    // -------------------------------------------------------------------------
-
-    /**
-     * Checks that the visitCode method has been called.
-     */
-    void checkStartCode() {
-        if (!startCode) {
-            throw new IllegalStateException(
-                    "Cannot visit instructions before visitCode has been called.");
-        }
-    }
-
-    /**
-     * Checks that the visitMaxs method has not been called.
-     */
-    void checkEndCode() {
-        if (endCode) {
-            throw new IllegalStateException(
-                    "Cannot visit instructions after visitMaxs has been called.");
-        }
-    }
-
-    /**
-     * Checks that the visitEnd method has not been called.
-     */
-    void checkEndMethod() {
-        if (endMethod) {
-            throw new IllegalStateException(
-                    "Cannot visit elements after visitEnd has been called.");
-        }
-    }
-
-    /**
-     * Checks a stack frame value.
-     * 
-     * @param value
-     *            the value to be checked.
-     */
-    void checkFrameValue(final Object value) {
-        if (value == Opcodes.TOP || value == Opcodes.INTEGER
-                || value == Opcodes.FLOAT || value == Opcodes.LONG
-                || value == Opcodes.DOUBLE || value == Opcodes.NULL
-                || value == Opcodes.UNINITIALIZED_THIS) {
-            return;
-        }
-        if (value instanceof String) {
-            checkInternalName((String) value, "Invalid stack frame value");
-            return;
-        }
-        if (!(value instanceof Label)) {
-            throw new IllegalArgumentException("Invalid stack frame value: "
-                    + value);
-        } else {
-            usedLabels.add((Label) value);
-        }
-    }
-
-    /**
-     * Checks that the type of the given opcode is equal to the given type.
-     * 
-     * @param opcode
-     *            the opcode to be checked.
-     * @param type
-     *            the expected opcode type.
-     */
-    static void checkOpcode(final int opcode, final int type) {
-        if (opcode < 0 || opcode > 199 || TYPE[opcode] != type) {
-            throw new IllegalArgumentException("Invalid opcode: " + opcode);
-        }
-    }
-
-    /**
-     * Checks that the given value is a signed byte.
-     * 
-     * @param value
-     *            the value to be checked.
-     * @param msg
-     *            an message to be used in case of error.
-     */
-    static void checkSignedByte(final int value, final String msg) {
-        if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
-            throw new IllegalArgumentException(msg
-                    + " (must be a signed byte): " + value);
-        }
-    }
-
-    /**
-     * Checks that the given value is a signed short.
-     * 
-     * @param value
-     *            the value to be checked.
-     * @param msg
-     *            an message to be used in case of error.
-     */
-    static void checkSignedShort(final int value, final String msg) {
-        if (value < Short.MIN_VALUE || value > Short.MAX_VALUE) {
-            throw new IllegalArgumentException(msg
-                    + " (must be a signed short): " + value);
-        }
-    }
-
-    /**
-     * Checks that the given value is an unsigned short.
-     * 
-     * @param value
-     *            the value to be checked.
-     * @param msg
-     *            an message to be used in case of error.
-     */
-    static void checkUnsignedShort(final int value, final String msg) {
-        if (value < 0 || value > 65535) {
-            throw new IllegalArgumentException(msg
-                    + " (must be an unsigned short): " + value);
-        }
-    }
-
-    /**
-     * Checks that the given value is an {@link Integer}, a{@link Float}, a
-     * {@link Long}, a {@link Double} or a {@link String}.
-     * 
-     * @param cst
-     *            the value to be checked.
-     */
-    static void checkConstant(final Object cst) {
-        if (!(cst instanceof Integer) && !(cst instanceof Float)
-                && !(cst instanceof Long) && !(cst instanceof Double)
-                && !(cst instanceof String)) {
-            throw new IllegalArgumentException("Invalid constant: " + cst);
-        }
-    }
-
-    void checkLDCConstant(final Object cst) {
-        if (cst instanceof Type) {
-            int s = ((Type) cst).getSort();
-            if (s != Type.OBJECT && s != Type.ARRAY && s != Type.METHOD) {
-                throw new IllegalArgumentException("Illegal LDC constant value");
-            }
-            if (s != Type.METHOD && (version & 0xFFFF) < Opcodes.V1_5) {
-                throw new IllegalArgumentException(
-                        "ldc of a constant class requires at least version 1.5");
-            }
-            if (s == Type.METHOD && (version & 0xFFFF) < Opcodes.V1_7) {
-                throw new IllegalArgumentException(
-                        "ldc of a method type requires at least version 1.7");
-            }
-        } else if (cst instanceof Handle) {
-            if ((version & 0xFFFF) < Opcodes.V1_7) {
-                throw new IllegalArgumentException(
-                        "ldc of a handle requires at least version 1.7");
-            }
-            int tag = ((Handle) cst).getTag();
-            if (tag < Opcodes.H_GETFIELD || tag > Opcodes.H_INVOKEINTERFACE) {
-                throw new IllegalArgumentException("invalid handle tag " + tag);
-            }
-        } else {
-            checkConstant(cst);
-        }
-    }
-
-    /**
-     * Checks that the given string is a valid unqualified name.
-     * 
-     * @param version
-     *            the class version.
-     * @param name
-     *            the string to be checked.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    static void checkUnqualifiedName(int version, final String name,
-            final String msg) {
-        if ((version & 0xFFFF) < Opcodes.V1_5) {
-            checkIdentifier(name, msg);
-        } else {
-            for (int i = 0; i < name.length(); ++i) {
-                if (".;[/".indexOf(name.charAt(i)) != -1) {
-                    throw new IllegalArgumentException("Invalid " + msg
-                            + " (must be a valid unqualified name): " + name);
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks that the given string is a valid Java identifier.
-     * 
-     * @param name
-     *            the string to be checked.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    static void checkIdentifier(final String name, final String msg) {
-        checkIdentifier(name, 0, -1, msg);
-    }
-
-    /**
-     * Checks that the given substring is a valid Java identifier.
-     * 
-     * @param name
-     *            the string to be checked.
-     * @param start
-     *            index of the first character of the identifier (inclusive).
-     * @param end
-     *            index of the last character of the identifier (exclusive). -1
-     *            is equivalent to <tt>name.length()</tt> if name is not
-     *            <tt>null</tt>.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    static void checkIdentifier(final String name, final int start,
-            final int end, final String msg) {
-        if (name == null || (end == -1 ? name.length() <= start : end <= start)) {
-            throw new IllegalArgumentException("Invalid " + msg
-                    + " (must not be null or empty)");
-        }
-        if (!Character.isJavaIdentifierStart(name.charAt(start))) {
-            throw new IllegalArgumentException("Invalid " + msg
-                    + " (must be a valid Java identifier): " + name);
-        }
-        int max = end == -1 ? name.length() : end;
-        for (int i = start + 1; i < max; ++i) {
-            if (!Character.isJavaIdentifierPart(name.charAt(i))) {
-                throw new IllegalArgumentException("Invalid " + msg
-                        + " (must be a valid Java identifier): " + name);
-            }
-        }
-    }
-
-    /**
-     * Checks that the given string is a valid Java identifier.
-     * 
-     * @param version
-     *            the class version.
-     * @param name
-     *            the string to be checked.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    static void checkMethodIdentifier(int version, final String name,
-            final String msg) {
-        if (name == null || name.length() == 0) {
-            throw new IllegalArgumentException("Invalid " + msg
-                    + " (must not be null or empty)");
-        }
-        if ((version & 0xFFFF) >= Opcodes.V1_5) {
-            for (int i = 0; i < name.length(); ++i) {
-                if (".;[/<>".indexOf(name.charAt(i)) != -1) {
-                    throw new IllegalArgumentException("Invalid " + msg
-                            + " (must be a valid unqualified name): " + name);
-                }
-            }
-            return;
-        }
-        if (!Character.isJavaIdentifierStart(name.charAt(0))) {
-            throw new IllegalArgumentException(
-                    "Invalid "
-                            + msg
-                            + " (must be a '<init>', '<clinit>' or a valid Java identifier): "
-                            + name);
-        }
-        for (int i = 1; i < name.length(); ++i) {
-            if (!Character.isJavaIdentifierPart(name.charAt(i))) {
-                throw new IllegalArgumentException(
-                        "Invalid "
-                                + msg
-                                + " (must be '<init>' or '<clinit>' or a valid Java identifier): "
-                                + name);
-            }
-        }
-    }
-
-    /**
-     * Checks that the given string is a valid internal class name.
-     * 
-     * @param name
-     *            the string to be checked.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    static void checkInternalName(final String name, final String msg) {
-        if (name == null || name.length() == 0) {
-            throw new IllegalArgumentException("Invalid " + msg
-                    + " (must not be null or empty)");
-        }
-        if (name.charAt(0) == '[') {
-            checkDesc(name, false);
-        } else {
-            checkInternalName(name, 0, -1, msg);
-        }
-    }
-
-    /**
-     * Checks that the given substring is a valid internal class name.
-     * 
-     * @param name
-     *            the string to be checked.
-     * @param start
-     *            index of the first character of the identifier (inclusive).
-     * @param end
-     *            index of the last character of the identifier (exclusive). -1
-     *            is equivalent to <tt>name.length()</tt> if name is not
-     *            <tt>null</tt>.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    static void checkInternalName(final String name, final int start,
-            final int end, final String msg) {
-        int max = end == -1 ? name.length() : end;
-        try {
-            int begin = start;
-            int slash;
-            do {
-                slash = name.indexOf('/', begin + 1);
-                if (slash == -1 || slash > max) {
-                    slash = max;
-                }
-                checkIdentifier(name, begin, slash, null);
-                begin = slash + 1;
-            } while (slash != max);
-        } catch (IllegalArgumentException _) {
-            throw new IllegalArgumentException(
-                    "Invalid "
-                            + msg
-                            + " (must be a fully qualified class name in internal form): "
-                            + name);
-        }
-    }
-
-    /**
-     * Checks that the given string is a valid type descriptor.
-     * 
-     * @param desc
-     *            the string to be checked.
-     * @param canBeVoid
-     *            <tt>true</tt> if <tt>V</tt> can be considered valid.
-     */
-    static void checkDesc(final String desc, final boolean canBeVoid) {
-        int end = checkDesc(desc, 0, canBeVoid);
-        if (end != desc.length()) {
-            throw new IllegalArgumentException("Invalid descriptor: " + desc);
-        }
-    }
-
-    /**
-     * Checks that a the given substring is a valid type descriptor.
-     * 
-     * @param desc
-     *            the string to be checked.
-     * @param start
-     *            index of the first character of the identifier (inclusive).
-     * @param canBeVoid
-     *            <tt>true</tt> if <tt>V</tt> can be considered valid.
-     * @return the index of the last character of the type decriptor, plus one.
-     */
-    static int checkDesc(final String desc, final int start,
-            final boolean canBeVoid) {
-        if (desc == null || start >= desc.length()) {
-            throw new IllegalArgumentException(
-                    "Invalid type descriptor (must not be null or empty)");
-        }
-        int index;
-        switch (desc.charAt(start)) {
-        case 'V':
-            if (canBeVoid) {
-                return start + 1;
-            } else {
-                throw new IllegalArgumentException("Invalid descriptor: "
-                        + desc);
-            }
-        case 'Z':
-        case 'C':
-        case 'B':
-        case 'S':
-        case 'I':
-        case 'F':
-        case 'J':
-        case 'D':
-            return start + 1;
-        case '[':
-            index = start + 1;
-            while (index < desc.length() && desc.charAt(index) == '[') {
-                ++index;
-            }
-            if (index < desc.length()) {
-                return checkDesc(desc, index, false);
-            } else {
-                throw new IllegalArgumentException("Invalid descriptor: "
-                        + desc);
-            }
-        case 'L':
-            index = desc.indexOf(';', start);
-            if (index == -1 || index - start < 2) {
-                throw new IllegalArgumentException("Invalid descriptor: "
-                        + desc);
-            }
-            try {
-                checkInternalName(desc, start + 1, index, null);
-            } catch (IllegalArgumentException _) {
-                throw new IllegalArgumentException("Invalid descriptor: "
-                        + desc);
-            }
-            return index + 1;
-        default:
-            throw new IllegalArgumentException("Invalid descriptor: " + desc);
-        }
-    }
-
-    /**
-     * Checks that the given string is a valid method descriptor.
-     * 
-     * @param desc
-     *            the string to be checked.
-     */
-    static void checkMethodDesc(final String desc) {
-        if (desc == null || desc.length() == 0) {
-            throw new IllegalArgumentException(
-                    "Invalid method descriptor (must not be null or empty)");
-        }
-        if (desc.charAt(0) != '(' || desc.length() < 3) {
-            throw new IllegalArgumentException("Invalid descriptor: " + desc);
-        }
-        int start = 1;
-        if (desc.charAt(start) != ')') {
-            do {
-                if (desc.charAt(start) == 'V') {
-                    throw new IllegalArgumentException("Invalid descriptor: "
-                            + desc);
-                }
-                start = checkDesc(desc, start, false);
-            } while (start < desc.length() && desc.charAt(start) != ')');
-        }
-        start = checkDesc(desc, start + 1, true);
-        if (start != desc.length()) {
-            throw new IllegalArgumentException("Invalid descriptor: " + desc);
-        }
-    }
-
-    /**
-     * Checks that the given label is not null. This method can also check that
-     * the label has been visited.
-     * 
-     * @param label
-     *            the label to be checked.
-     * @param checkVisited
-     *            <tt>true</tt> to check that the label has been visited.
-     * @param msg
-     *            a message to be used in case of error.
-     */
-    void checkLabel(final Label label, final boolean checkVisited,
-            final String msg) {
-        if (label == null) {
-            throw new IllegalArgumentException("Invalid " + msg
-                    + " (must not be null)");
-        }
-        if (checkVisited && labels.get(label) == null) {
-            throw new IllegalArgumentException("Invalid " + msg
-                    + " (must be visited first)");
-        }
-    }
-
-    /**
-     * Checks that the given label is not a label used only for debug purposes.
-     * 
-     * @param label
-     *            the label to be checked.
-     */
-    private static void checkNonDebugLabel(final Label label) {
-        Field f = getLabelStatusField();
-        int status = 0;
-        try {
-            status = f == null ? 0 : ((Integer) f.get(label)).intValue();
-        } catch (IllegalAccessException e) {
-            throw new Error("Internal error");
-        }
-        if ((status & 0x01) != 0) {
-            throw new IllegalArgumentException(
-                    "Labels used for debug info cannot be reused for control flow");
-        }
-    }
-
-    /**
-     * Returns the Field object corresponding to the Label.status field.
-     * 
-     * @return the Field object corresponding to the Label.status field.
-     */
-    private static Field getLabelStatusField() {
-        if (labelStatusField == null) {
-            labelStatusField = getLabelField("a");
-            if (labelStatusField == null) {
-                labelStatusField = getLabelField("status");
-            }
-        }
-        return labelStatusField;
-    }
-
-    /**
-     * Returns the field of the Label class whose name is given.
-     * 
-     * @param name
-     *            a field name.
-     * @return the field of the Label class whose name is given, or null.
-     */
-    private static Field getLabelField(final String name) {
-        try {
-            Field f = Label.class.getDeclaredField(name);
-            f.setAccessible(true);
-            return f;
-        } catch (NoSuchFieldException e) {
-            return null;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/CheckSignatureAdapter.java b/asm4/src/org/objectweb/asm/util/CheckSignatureAdapter.java
deleted file mode 100644
index 450d64c..0000000
--- a/asm4/src/org/objectweb/asm/util/CheckSignatureAdapter.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.signature.SignatureVisitor;
-
-/**
- * A {@link SignatureVisitor} that checks that its methods are properly used.
- * 
- * @author Eric Bruneton
- */
-public class CheckSignatureAdapter extends SignatureVisitor {
-
-    /**
-     * Type to be used to check class signatures. See
-     * {@link #CheckSignatureAdapter(int, SignatureVisitor)
-     * CheckSignatureAdapter}.
-     */
-    public static final int CLASS_SIGNATURE = 0;
-
-    /**
-     * Type to be used to check method signatures. See
-     * {@link #CheckSignatureAdapter(int, SignatureVisitor)
-     * CheckSignatureAdapter}.
-     */
-    public static final int METHOD_SIGNATURE = 1;
-
-    /**
-     * Type to be used to check type signatures.See
-     * {@link #CheckSignatureAdapter(int, SignatureVisitor)
-     * CheckSignatureAdapter}.
-     */
-    public static final int TYPE_SIGNATURE = 2;
-
-    private static final int EMPTY = 1;
-
-    private static final int FORMAL = 2;
-
-    private static final int BOUND = 4;
-
-    private static final int SUPER = 8;
-
-    private static final int PARAM = 16;
-
-    private static final int RETURN = 32;
-
-    private static final int SIMPLE_TYPE = 64;
-
-    private static final int CLASS_TYPE = 128;
-
-    private static final int END = 256;
-
-    /**
-     * Type of the signature to be checked.
-     */
-    private final int type;
-
-    /**
-     * State of the automaton used to check the order of method calls.
-     */
-    private int state;
-
-    /**
-     * <tt>true</tt> if the checked type signature can be 'V'.
-     */
-    private boolean canBeVoid;
-
-    /**
-     * The visitor to which this adapter must delegate calls. May be
-     * <tt>null</tt>.
-     */
-    private final SignatureVisitor sv;
-
-    /**
-     * Creates a new {@link CheckSignatureAdapter} object. <i>Subclasses must
-     * not use this constructor</i>. Instead, they must use the
-     * {@link #CheckSignatureAdapter(int, int, SignatureVisitor)} version.
-     * 
-     * @param type
-     *            the type of signature to be checked. See
-     *            {@link #CLASS_SIGNATURE}, {@link #METHOD_SIGNATURE} and
-     *            {@link #TYPE_SIGNATURE}.
-     * @param sv
-     *            the visitor to which this adapter must delegate calls. May be
-     *            <tt>null</tt>.
-     */
-    public CheckSignatureAdapter(final int type, final SignatureVisitor sv) {
-        this(Opcodes.ASM4, type, sv);
-    }
-
-    /**
-     * Creates a new {@link CheckSignatureAdapter} object.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param type
-     *            the type of signature to be checked. See
-     *            {@link #CLASS_SIGNATURE}, {@link #METHOD_SIGNATURE} and
-     *            {@link #TYPE_SIGNATURE}.
-     * @param sv
-     *            the visitor to which this adapter must delegate calls. May be
-     *            <tt>null</tt>.
-     */
-    protected CheckSignatureAdapter(final int api, final int type,
-            final SignatureVisitor sv) {
-        super(api);
-        this.type = type;
-        this.state = EMPTY;
-        this.sv = sv;
-    }
-
-    // class and method signatures
-
-    @Override
-    public void visitFormalTypeParameter(final String name) {
-        if (type == TYPE_SIGNATURE
-                || (state != EMPTY && state != FORMAL && state != BOUND)) {
-            throw new IllegalStateException();
-        }
-        CheckMethodAdapter.checkIdentifier(name, "formal type parameter");
-        state = FORMAL;
-        if (sv != null) {
-            sv.visitFormalTypeParameter(name);
-        }
-    }
-
-    @Override
-    public SignatureVisitor visitClassBound() {
-        if (state != FORMAL) {
-            throw new IllegalStateException();
-        }
-        state = BOUND;
-        SignatureVisitor v = sv == null ? null : sv.visitClassBound();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    @Override
-    public SignatureVisitor visitInterfaceBound() {
-        if (state != FORMAL && state != BOUND) {
-            throw new IllegalArgumentException();
-        }
-        SignatureVisitor v = sv == null ? null : sv.visitInterfaceBound();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    // class signatures
-
-    @Override
-    public SignatureVisitor visitSuperclass() {
-        if (type != CLASS_SIGNATURE || (state & (EMPTY | FORMAL | BOUND)) == 0) {
-            throw new IllegalArgumentException();
-        }
-        state = SUPER;
-        SignatureVisitor v = sv == null ? null : sv.visitSuperclass();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    @Override
-    public SignatureVisitor visitInterface() {
-        if (state != SUPER) {
-            throw new IllegalStateException();
-        }
-        SignatureVisitor v = sv == null ? null : sv.visitInterface();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    // method signatures
-
-    @Override
-    public SignatureVisitor visitParameterType() {
-        if (type != METHOD_SIGNATURE
-                || (state & (EMPTY | FORMAL | BOUND | PARAM)) == 0) {
-            throw new IllegalArgumentException();
-        }
-        state = PARAM;
-        SignatureVisitor v = sv == null ? null : sv.visitParameterType();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    @Override
-    public SignatureVisitor visitReturnType() {
-        if (type != METHOD_SIGNATURE
-                || (state & (EMPTY | FORMAL | BOUND | PARAM)) == 0) {
-            throw new IllegalArgumentException();
-        }
-        state = RETURN;
-        SignatureVisitor v = sv == null ? null : sv.visitReturnType();
-        CheckSignatureAdapter cv = new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-        cv.canBeVoid = true;
-        return cv;
-    }
-
-    @Override
-    public SignatureVisitor visitExceptionType() {
-        if (state != RETURN) {
-            throw new IllegalStateException();
-        }
-        SignatureVisitor v = sv == null ? null : sv.visitExceptionType();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    // type signatures
-
-    @Override
-    public void visitBaseType(final char descriptor) {
-        if (type != TYPE_SIGNATURE || state != EMPTY) {
-            throw new IllegalStateException();
-        }
-        if (descriptor == 'V') {
-            if (!canBeVoid) {
-                throw new IllegalArgumentException();
-            }
-        } else {
-            if ("ZCBSIFJD".indexOf(descriptor) == -1) {
-                throw new IllegalArgumentException();
-            }
-        }
-        state = SIMPLE_TYPE;
-        if (sv != null) {
-            sv.visitBaseType(descriptor);
-        }
-    }
-
-    @Override
-    public void visitTypeVariable(final String name) {
-        if (type != TYPE_SIGNATURE || state != EMPTY) {
-            throw new IllegalStateException();
-        }
-        CheckMethodAdapter.checkIdentifier(name, "type variable");
-        state = SIMPLE_TYPE;
-        if (sv != null) {
-            sv.visitTypeVariable(name);
-        }
-    }
-
-    @Override
-    public SignatureVisitor visitArrayType() {
-        if (type != TYPE_SIGNATURE || state != EMPTY) {
-            throw new IllegalStateException();
-        }
-        state = SIMPLE_TYPE;
-        SignatureVisitor v = sv == null ? null : sv.visitArrayType();
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    @Override
-    public void visitClassType(final String name) {
-        if (type != TYPE_SIGNATURE || state != EMPTY) {
-            throw new IllegalStateException();
-        }
-        CheckMethodAdapter.checkInternalName(name, "class name");
-        state = CLASS_TYPE;
-        if (sv != null) {
-            sv.visitClassType(name);
-        }
-    }
-
-    @Override
-    public void visitInnerClassType(final String name) {
-        if (state != CLASS_TYPE) {
-            throw new IllegalStateException();
-        }
-        CheckMethodAdapter.checkIdentifier(name, "inner class name");
-        if (sv != null) {
-            sv.visitInnerClassType(name);
-        }
-    }
-
-    @Override
-    public void visitTypeArgument() {
-        if (state != CLASS_TYPE) {
-            throw new IllegalStateException();
-        }
-        if (sv != null) {
-            sv.visitTypeArgument();
-        }
-    }
-
-    @Override
-    public SignatureVisitor visitTypeArgument(final char wildcard) {
-        if (state != CLASS_TYPE) {
-            throw new IllegalStateException();
-        }
-        if ("+-=".indexOf(wildcard) == -1) {
-            throw new IllegalArgumentException();
-        }
-        SignatureVisitor v = sv == null ? null : sv.visitTypeArgument(wildcard);
-        return new CheckSignatureAdapter(TYPE_SIGNATURE, v);
-    }
-
-    @Override
-    public void visitEnd() {
-        if (state != CLASS_TYPE) {
-            throw new IllegalStateException();
-        }
-        state = END;
-        if (sv != null) {
-            sv.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/Printer.java b/asm4/src/org/objectweb/asm/util/Printer.java
deleted file mode 100644
index ffc7470..0000000
--- a/asm4/src/org/objectweb/asm/util/Printer.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-
-/**
- * An abstract converter from visit events to text.
- * 
- * @author Eric Bruneton
- */
-public abstract class Printer {
-
-    /**
-     * The names of the Java Virtual Machine opcodes.
-     */
-    public static final String[] OPCODES;
-
-    /**
-     * The names of the for <code>operand</code> parameter values of the
-     * {@link org.objectweb.asm.MethodVisitor#visitIntInsn} method when
-     * <code>opcode</code> is <code>NEWARRAY</code>.
-     */
-    public static final String[] TYPES;
-
-    /**
-     * The names of the <code>tag</code> field values for
-     * {@link org.objectweb.asm.Handle}.
-     */
-    public static final String[] HANDLE_TAG;
-
-    static {
-        String s = "NOP,ACONST_NULL,ICONST_M1,ICONST_0,ICONST_1,ICONST_2,"
-                + "ICONST_3,ICONST_4,ICONST_5,LCONST_0,LCONST_1,FCONST_0,"
-                + "FCONST_1,FCONST_2,DCONST_0,DCONST_1,BIPUSH,SIPUSH,LDC,,,"
-                + "ILOAD,LLOAD,FLOAD,DLOAD,ALOAD,,,,,,,,,,,,,,,,,,,,,IALOAD,"
-                + "LALOAD,FALOAD,DALOAD,AALOAD,BALOAD,CALOAD,SALOAD,ISTORE,"
-                + "LSTORE,FSTORE,DSTORE,ASTORE,,,,,,,,,,,,,,,,,,,,,IASTORE,"
-                + "LASTORE,FASTORE,DASTORE,AASTORE,BASTORE,CASTORE,SASTORE,POP,"
-                + "POP2,DUP,DUP_X1,DUP_X2,DUP2,DUP2_X1,DUP2_X2,SWAP,IADD,LADD,"
-                + "FADD,DADD,ISUB,LSUB,FSUB,DSUB,IMUL,LMUL,FMUL,DMUL,IDIV,LDIV,"
-                + "FDIV,DDIV,IREM,LREM,FREM,DREM,INEG,LNEG,FNEG,DNEG,ISHL,LSHL,"
-                + "ISHR,LSHR,IUSHR,LUSHR,IAND,LAND,IOR,LOR,IXOR,LXOR,IINC,I2L,"
-                + "I2F,I2D,L2I,L2F,L2D,F2I,F2L,F2D,D2I,D2L,D2F,I2B,I2C,I2S,LCMP,"
-                + "FCMPL,FCMPG,DCMPL,DCMPG,IFEQ,IFNE,IFLT,IFGE,IFGT,IFLE,"
-                + "IF_ICMPEQ,IF_ICMPNE,IF_ICMPLT,IF_ICMPGE,IF_ICMPGT,IF_ICMPLE,"
-                + "IF_ACMPEQ,IF_ACMPNE,GOTO,JSR,RET,TABLESWITCH,LOOKUPSWITCH,"
-                + "IRETURN,LRETURN,FRETURN,DRETURN,ARETURN,RETURN,GETSTATIC,"
-                + "PUTSTATIC,GETFIELD,PUTFIELD,INVOKEVIRTUAL,INVOKESPECIAL,"
-                + "INVOKESTATIC,INVOKEINTERFACE,INVOKEDYNAMIC,NEW,NEWARRAY,"
-                + "ANEWARRAY,ARRAYLENGTH,ATHROW,CHECKCAST,INSTANCEOF,"
-                + "MONITORENTER,MONITOREXIT,,MULTIANEWARRAY,IFNULL,IFNONNULL,";
-        OPCODES = new String[200];
-        int i = 0;
-        int j = 0;
-        int l;
-        while ((l = s.indexOf(',', j)) > 0) {
-            OPCODES[i++] = j + 1 == l ? null : s.substring(j, l);
-            j = l + 1;
-        }
-
-        s = "T_BOOLEAN,T_CHAR,T_FLOAT,T_DOUBLE,T_BYTE,T_SHORT,T_INT,T_LONG,";
-        TYPES = new String[12];
-        j = 0;
-        i = 4;
-        while ((l = s.indexOf(',', j)) > 0) {
-            TYPES[i++] = s.substring(j, l);
-            j = l + 1;
-        }
-
-        s = "H_GETFIELD,H_GETSTATIC,H_PUTFIELD,H_PUTSTATIC,"
-                + "H_INVOKEVIRTUAL,H_INVOKESTATIC,H_INVOKESPECIAL,"
-                + "H_NEWINVOKESPECIAL,H_INVOKEINTERFACE,";
-        HANDLE_TAG = new String[10];
-        j = 0;
-        i = 1;
-        while ((l = s.indexOf(',', j)) > 0) {
-            HANDLE_TAG[i++] = s.substring(j, l);
-            j = l + 1;
-        }
-    }
-
-    /**
-     * The ASM API version implemented by this class. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * A buffer that can be used to create strings.
-     */
-    protected final StringBuffer buf;
-
-    /**
-     * The text to be printed. Since the code of methods is not necessarily
-     * visited in sequential order, one method after the other, but can be
-     * interlaced (some instructions from method one, then some instructions
-     * from method two, then some instructions from method one again...), it is
-     * not possible to print the visited instructions directly to a sequential
-     * stream. A class is therefore printed in a two steps process: a string
-     * tree is constructed during the visit, and printed to a sequential stream
-     * at the end of the visit. This string tree is stored in this field, as a
-     * string list that can contain other string lists, which can themselves
-     * contain other string lists, and so on.
-     */
-    public final List<Object> text;
-
-    /**
-     * Constructs a new {@link Printer}.
-     */
-    protected Printer(final int api) {
-        this.api = api;
-        this.buf = new StringBuffer();
-        this.text = new ArrayList<Object>();
-    }
-
-    /**
-     * Class header. See {@link org.objectweb.asm.ClassVisitor#visit}.
-     */
-    public abstract void visit(final int version, final int access,
-            final String name, final String signature, final String superName,
-            final String[] interfaces);
-
-    /**
-     * Class source. See {@link org.objectweb.asm.ClassVisitor#visitSource}.
-     */
-    public abstract void visitSource(final String file, final String debug);
-
-    /**
-     * Class outer class. See
-     * {@link org.objectweb.asm.ClassVisitor#visitOuterClass}.
-     */
-    public abstract void visitOuterClass(final String owner, final String name,
-            final String desc);
-
-    /**
-     * Class annotation. See
-     * {@link org.objectweb.asm.ClassVisitor#visitAnnotation}.
-     */
-    public abstract Printer visitClassAnnotation(final String desc,
-            final boolean visible);
-
-    /**
-     * Class attribute. See
-     * {@link org.objectweb.asm.ClassVisitor#visitAttribute}.
-     */
-    public abstract void visitClassAttribute(final Attribute attr);
-
-    /**
-     * Class inner name. See
-     * {@link org.objectweb.asm.ClassVisitor#visitInnerClass}.
-     */
-    public abstract void visitInnerClass(final String name,
-            final String outerName, final String innerName, final int access);
-
-    /**
-     * Class field. See {@link org.objectweb.asm.ClassVisitor#visitField}.
-     */
-    public abstract Printer visitField(final int access, final String name,
-            final String desc, final String signature, final Object value);
-
-    /**
-     * Class method. See {@link org.objectweb.asm.ClassVisitor#visitMethod}.
-     */
-    public abstract Printer visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions);
-
-    /**
-     * Class end. See {@link org.objectweb.asm.ClassVisitor#visitEnd}.
-     */
-    public abstract void visitClassEnd();
-
-    // ------------------------------------------------------------------------
-    // Annotations
-    // ------------------------------------------------------------------------
-
-    /**
-     * Annotation value. See {@link org.objectweb.asm.AnnotationVisitor#visit}.
-     */
-    public abstract void visit(final String name, final Object value);
-
-    /**
-     * Annotation enum value. See
-     * {@link org.objectweb.asm.AnnotationVisitor#visitEnum}.
-     */
-    public abstract void visitEnum(final String name, final String desc,
-            final String value);
-
-    /**
-     * Nested annotation value. See
-     * {@link org.objectweb.asm.AnnotationVisitor#visitAnnotation}.
-     */
-    public abstract Printer visitAnnotation(final String name, final String desc);
-
-    /**
-     * Annotation array value. See
-     * {@link org.objectweb.asm.AnnotationVisitor#visitArray}.
-     */
-    public abstract Printer visitArray(final String name);
-
-    /**
-     * Annotation end. See {@link org.objectweb.asm.AnnotationVisitor#visitEnd}.
-     */
-    public abstract void visitAnnotationEnd();
-
-    // ------------------------------------------------------------------------
-    // Fields
-    // ------------------------------------------------------------------------
-
-    /**
-     * Field annotation. See
-     * {@link org.objectweb.asm.FieldVisitor#visitAnnotation}.
-     */
-    public abstract Printer visitFieldAnnotation(final String desc,
-            final boolean visible);
-
-    /**
-     * Field attribute. See
-     * {@link org.objectweb.asm.FieldVisitor#visitAttribute}.
-     */
-    public abstract void visitFieldAttribute(final Attribute attr);
-
-    /**
-     * Field end. See {@link org.objectweb.asm.FieldVisitor#visitEnd}.
-     */
-    public abstract void visitFieldEnd();
-
-    // ------------------------------------------------------------------------
-    // Methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Method default annotation. See
-     * {@link org.objectweb.asm.MethodVisitor#visitAnnotationDefault}.
-     */
-    public abstract Printer visitAnnotationDefault();
-
-    /**
-     * Method annotation. See
-     * {@link org.objectweb.asm.MethodVisitor#visitAnnotation}.
-     */
-    public abstract Printer visitMethodAnnotation(final String desc,
-            final boolean visible);
-
-    /**
-     * Method parameter annotation. See
-     * {@link org.objectweb.asm.MethodVisitor#visitParameterAnnotation}.
-     */
-    public abstract Printer visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible);
-
-    /**
-     * Method attribute. See
-     * {@link org.objectweb.asm.MethodVisitor#visitAttribute}.
-     */
-    public abstract void visitMethodAttribute(final Attribute attr);
-
-    /**
-     * Method start. See {@link org.objectweb.asm.MethodVisitor#visitCode}.
-     */
-    public abstract void visitCode();
-
-    /**
-     * Method stack frame. See
-     * {@link org.objectweb.asm.MethodVisitor#visitFrame}.
-     */
-    public abstract void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack);
-
-    /**
-     * Method instruction. See {@link org.objectweb.asm.MethodVisitor#visitInsn}
-     * .
-     */
-    public abstract void visitInsn(final int opcode);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitIntInsn}.
-     */
-    public abstract void visitIntInsn(final int opcode, final int operand);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitVarInsn}.
-     */
-    public abstract void visitVarInsn(final int opcode, final int var);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitTypeInsn}.
-     */
-    public abstract void visitTypeInsn(final int opcode, final String type);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitFieldInsn}.
-     */
-    public abstract void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitMethodInsn}.
-     */
-    public abstract void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitInvokeDynamicInsn}.
-     */
-    public abstract void visitInvokeDynamicInsn(String name, String desc,
-            Handle bsm, Object... bsmArgs);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitJumpInsn}.
-     */
-    public abstract void visitJumpInsn(final int opcode, final Label label);
-
-    /**
-     * Method label. See {@link org.objectweb.asm.MethodVisitor#visitLabel}.
-     */
-    public abstract void visitLabel(final Label label);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitLdcInsn}.
-     */
-    public abstract void visitLdcInsn(final Object cst);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitIincInsn}.
-     */
-    public abstract void visitIincInsn(final int var, final int increment);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitTableSwitchInsn}.
-     */
-    public abstract void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitLookupSwitchInsn}.
-     */
-    public abstract void visitLookupSwitchInsn(final Label dflt,
-            final int[] keys, final Label[] labels);
-
-    /**
-     * Method instruction. See
-     * {@link org.objectweb.asm.MethodVisitor#visitMultiANewArrayInsn}.
-     */
-    public abstract void visitMultiANewArrayInsn(final String desc,
-            final int dims);
-
-    /**
-     * Method exception handler. See
-     * {@link org.objectweb.asm.MethodVisitor#visitTryCatchBlock}.
-     */
-    public abstract void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type);
-
-    /**
-     * Method debug info. See
-     * {@link org.objectweb.asm.MethodVisitor#visitLocalVariable}.
-     */
-    public abstract void visitLocalVariable(final String name,
-            final String desc, final String signature, final Label start,
-            final Label end, final int index);
-
-    /**
-     * Method debug info. See
-     * {@link org.objectweb.asm.MethodVisitor#visitLineNumber}.
-     */
-    public abstract void visitLineNumber(final int line, final Label start);
-
-    /**
-     * Method max stack and max locals. See
-     * {@link org.objectweb.asm.MethodVisitor#visitMaxs}.
-     */
-    public abstract void visitMaxs(final int maxStack, final int maxLocals);
-
-    /**
-     * Method end. See {@link org.objectweb.asm.MethodVisitor#visitEnd}.
-     */
-    public abstract void visitMethodEnd();
-
-    /**
-     * Returns the text constructed by this visitor.
-     * 
-     * @return the text constructed by this visitor.
-     */
-    public List<Object> getText() {
-        return text;
-    }
-
-    /**
-     * Prints the text constructed by this visitor.
-     * 
-     * @param pw
-     *            the print writer to be used.
-     */
-    public void print(final PrintWriter pw) {
-        printList(pw, text);
-    }
-
-    /**
-     * Appends a quoted string to a given buffer.
-     * 
-     * @param buf
-     *            the buffer where the string must be added.
-     * @param s
-     *            the string to be added.
-     */
-    public static void appendString(final StringBuffer buf, final String s) {
-        buf.append('\"');
-        for (int i = 0; i < s.length(); ++i) {
-            char c = s.charAt(i);
-            if (c == '\n') {
-                buf.append("\\n");
-            } else if (c == '\r') {
-                buf.append("\\r");
-            } else if (c == '\\') {
-                buf.append("\\\\");
-            } else if (c == '"') {
-                buf.append("\\\"");
-            } else if (c < 0x20 || c > 0x7f) {
-                buf.append("\\u");
-                if (c < 0x10) {
-                    buf.append("000");
-                } else if (c < 0x100) {
-                    buf.append("00");
-                } else if (c < 0x1000) {
-                    buf.append('0');
-                }
-                buf.append(Integer.toString(c, 16));
-            } else {
-                buf.append(c);
-            }
-        }
-        buf.append('\"');
-    }
-
-    /**
-     * Prints the given string tree.
-     * 
-     * @param pw
-     *            the writer to be used to print the tree.
-     * @param l
-     *            a string tree, i.e., a string list that can contain other
-     *            string lists, and so on recursively.
-     */
-    static void printList(final PrintWriter pw, final List<?> l) {
-        for (int i = 0; i < l.size(); ++i) {
-            Object o = l.get(i);
-            if (o instanceof List) {
-                printList(pw, (List<?>) o);
-            } else {
-                pw.print(o.toString());
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/Textifiable.java b/asm4/src/org/objectweb/asm/util/Textifiable.java
deleted file mode 100644
index aad97ba..0000000
--- a/asm4/src/org/objectweb/asm/util/Textifiable.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.util.Map;
-
-import org.objectweb.asm.Label;
-
-/**
- * An {@link org.objectweb.asm.Attribute Attribute} that can print a readable
- * representation of itself.
- * 
- * Implementations should construct readable output from an attribute data
- * structure. Such representation could be used in unit test assertions.
- * 
- * @author Eugene Kuleshov
- */
-public interface Textifiable {
-
-    /**
-     * Build a human readable representation of this attribute.
-     * 
-     * @param buf
-     *            a buffer used for printing Java code.
-     * @param labelNames
-     *            map of label instances to their names.
-     */
-    void textify(StringBuffer buf, Map<Label, String> labelNames);
-}
diff --git a/asm4/src/org/objectweb/asm/util/Textifier.java b/asm4/src/org/objectweb/asm/util/Textifier.java
deleted file mode 100644
index 68a14a7..0000000
--- a/asm4/src/org/objectweb/asm/util/Textifier.java
+++ /dev/null
@@ -1,1200 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.signature.SignatureReader;
-
-/**
- * A {@link Printer} that prints a disassembled view of the classes it visits.
- * 
- * @author Eric Bruneton
- */
-public class Textifier extends Printer {
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for internal
-     * type names in bytecode notation.
-     */
-    public static final int INTERNAL_NAME = 0;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for field
-     * descriptors, formatted in bytecode notation
-     */
-    public static final int FIELD_DESCRIPTOR = 1;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for field
-     * signatures, formatted in bytecode notation
-     */
-    public static final int FIELD_SIGNATURE = 2;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for method
-     * descriptors, formatted in bytecode notation
-     */
-    public static final int METHOD_DESCRIPTOR = 3;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for method
-     * signatures, formatted in bytecode notation
-     */
-    public static final int METHOD_SIGNATURE = 4;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for class
-     * signatures, formatted in bytecode notation
-     */
-    public static final int CLASS_SIGNATURE = 5;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for field or
-     * method return value signatures, formatted in default Java notation
-     * (non-bytecode)
-     */
-    public static final int TYPE_DECLARATION = 6;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for class
-     * signatures, formatted in default Java notation (non-bytecode)
-     */
-    public static final int CLASS_DECLARATION = 7;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for method
-     * parameter signatures, formatted in default Java notation (non-bytecode)
-     */
-    public static final int PARAMETERS_DECLARATION = 8;
-
-    /**
-     * Constant used in {@link #appendDescriptor appendDescriptor} for handle
-     * descriptors, formatted in bytecode notation
-     */
-    public static final int HANDLE_DESCRIPTOR = 9;
-
-    /**
-     * Tab for class members.
-     */
-    protected String tab = "  ";
-
-    /**
-     * Tab for bytecode instructions.
-     */
-    protected String tab2 = "    ";
-
-    /**
-     * Tab for table and lookup switch instructions.
-     */
-    protected String tab3 = "      ";
-
-    /**
-     * Tab for labels.
-     */
-    protected String ltab = "   ";
-
-    /**
-     * The label names. This map associate String values to Label keys.
-     */
-    protected Map<Label, String> labelNames;
-
-    private int valueNumber = 0;
-
-    /**
-     * Constructs a new {@link Textifier}. <i>Subclasses must not use this
-     * constructor</i>. Instead, they must use the {@link #Textifier(int)}
-     * version.
-     */
-    public Textifier() {
-        this(Opcodes.ASM4);
-    }
-
-    /**
-     * Constructs a new {@link Textifier}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    protected Textifier(final int api) {
-        super(api);
-    }
-
-    /**
-     * Prints a disassembled view of the given class to the standard output.
-     * <p>
-     * Usage: Textifier [-debug] &lt;binary class name or class file name &gt;
-     * 
-     * @param args
-     *            the command line arguments.
-     * 
-     * @throws Exception
-     *             if the class cannot be found, or if an IO exception occurs.
-     */
-    public static void main(final String[] args) throws Exception {
-        int i = 0;
-        int flags = ClassReader.SKIP_DEBUG;
-
-        boolean ok = true;
-        if (args.length < 1 || args.length > 2) {
-            ok = false;
-        }
-        if (ok && "-debug".equals(args[0])) {
-            i = 1;
-            flags = 0;
-            if (args.length != 2) {
-                ok = false;
-            }
-        }
-        if (!ok) {
-            System.err
-                    .println("Prints a disassembled view of the given class.");
-            System.err.println("Usage: Textifier [-debug] "
-                    + "<fully qualified class name or class file name>");
-            return;
-        }
-        ClassReader cr;
-        if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1
-                || args[i].indexOf('/') > -1) {
-            cr = new ClassReader(new FileInputStream(args[i]));
-        } else {
-            cr = new ClassReader(args[i]);
-        }
-        cr.accept(new TraceClassVisitor(new PrintWriter(System.out)), flags);
-    }
-
-    // ------------------------------------------------------------------------
-    // Classes
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        int major = version & 0xFFFF;
-        int minor = version >>> 16;
-        buf.setLength(0);
-        buf.append("// class version ").append(major).append('.').append(minor)
-                .append(" (").append(version).append(")\n");
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            buf.append("// DEPRECATED\n");
-        }
-        buf.append("// access flags 0x")
-                .append(Integer.toHexString(access).toUpperCase()).append('\n');
-
-        appendDescriptor(CLASS_SIGNATURE, signature);
-        if (signature != null) {
-            TraceSignatureVisitor sv = new TraceSignatureVisitor(access);
-            SignatureReader r = new SignatureReader(signature);
-            r.accept(sv);
-            buf.append("// declaration: ").append(name)
-                    .append(sv.getDeclaration()).append('\n');
-        }
-
-        appendAccess(access & ~Opcodes.ACC_SUPER);
-        if ((access & Opcodes.ACC_ANNOTATION) != 0) {
-            buf.append("@interface ");
-        } else if ((access & Opcodes.ACC_INTERFACE) != 0) {
-            buf.append("interface ");
-        } else if ((access & Opcodes.ACC_ENUM) == 0) {
-            buf.append("class ");
-        }
-        appendDescriptor(INTERNAL_NAME, name);
-
-        if (superName != null && !"java/lang/Object".equals(superName)) {
-            buf.append(" extends ");
-            appendDescriptor(INTERNAL_NAME, superName);
-            buf.append(' ');
-        }
-        if (interfaces != null && interfaces.length > 0) {
-            buf.append(" implements ");
-            for (int i = 0; i < interfaces.length; ++i) {
-                appendDescriptor(INTERNAL_NAME, interfaces[i]);
-                buf.append(' ');
-            }
-        }
-        buf.append(" {\n\n");
-
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitSource(final String file, final String debug) {
-        buf.setLength(0);
-        if (file != null) {
-            buf.append(tab).append("// compiled from: ").append(file)
-                    .append('\n');
-        }
-        if (debug != null) {
-            buf.append(tab).append("// debug info: ").append(debug)
-                    .append('\n');
-        }
-        if (buf.length() > 0) {
-            text.add(buf.toString());
-        }
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        buf.setLength(0);
-        buf.append(tab).append("OUTERCLASS ");
-        appendDescriptor(INTERNAL_NAME, owner);
-        buf.append(' ');
-        if (name != null) {
-            buf.append(name).append(' ');
-        }
-        appendDescriptor(METHOD_DESCRIPTOR, desc);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public Textifier visitClassAnnotation(final String desc,
-            final boolean visible) {
-        text.add("\n");
-        return visitAnnotation(desc, visible);
-    }
-
-    @Override
-    public void visitClassAttribute(final Attribute attr) {
-        text.add("\n");
-        visitAttribute(attr);
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        buf.setLength(0);
-        buf.append(tab).append("// access flags 0x");
-        buf.append(
-                Integer.toHexString(access & ~Opcodes.ACC_SUPER).toUpperCase())
-                .append('\n');
-        buf.append(tab);
-        appendAccess(access);
-        buf.append("INNERCLASS ");
-        appendDescriptor(INTERNAL_NAME, name);
-        buf.append(' ');
-        appendDescriptor(INTERNAL_NAME, outerName);
-        buf.append(' ');
-        appendDescriptor(INTERNAL_NAME, innerName);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public Textifier visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        buf.setLength(0);
-        buf.append('\n');
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            buf.append(tab).append("// DEPRECATED\n");
-        }
-        buf.append(tab).append("// access flags 0x")
-                .append(Integer.toHexString(access).toUpperCase()).append('\n');
-        if (signature != null) {
-            buf.append(tab);
-            appendDescriptor(FIELD_SIGNATURE, signature);
-
-            TraceSignatureVisitor sv = new TraceSignatureVisitor(0);
-            SignatureReader r = new SignatureReader(signature);
-            r.acceptType(sv);
-            buf.append(tab).append("// declaration: ")
-                    .append(sv.getDeclaration()).append('\n');
-        }
-
-        buf.append(tab);
-        appendAccess(access);
-
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append(' ').append(name);
-        if (value != null) {
-            buf.append(" = ");
-            if (value instanceof String) {
-                buf.append('\"').append(value).append('\"');
-            } else {
-                buf.append(value);
-            }
-        }
-
-        buf.append('\n');
-        text.add(buf.toString());
-
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        return t;
-    }
-
-    @Override
-    public Textifier visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        buf.setLength(0);
-        buf.append('\n');
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            buf.append(tab).append("// DEPRECATED\n");
-        }
-        buf.append(tab).append("// access flags 0x")
-                .append(Integer.toHexString(access).toUpperCase()).append('\n');
-
-        if (signature != null) {
-            buf.append(tab);
-            appendDescriptor(METHOD_SIGNATURE, signature);
-
-            TraceSignatureVisitor v = new TraceSignatureVisitor(0);
-            SignatureReader r = new SignatureReader(signature);
-            r.accept(v);
-            String genericDecl = v.getDeclaration();
-            String genericReturn = v.getReturnType();
-            String genericExceptions = v.getExceptions();
-
-            buf.append(tab).append("// declaration: ").append(genericReturn)
-                    .append(' ').append(name).append(genericDecl);
-            if (genericExceptions != null) {
-                buf.append(" throws ").append(genericExceptions);
-            }
-            buf.append('\n');
-        }
-
-        buf.append(tab);
-        appendAccess(access);
-        if ((access & Opcodes.ACC_NATIVE) != 0) {
-            buf.append("native ");
-        }
-        if ((access & Opcodes.ACC_VARARGS) != 0) {
-            buf.append("varargs ");
-        }
-        if ((access & Opcodes.ACC_BRIDGE) != 0) {
-            buf.append("bridge ");
-        }
-
-        buf.append(name);
-        appendDescriptor(METHOD_DESCRIPTOR, desc);
-        if (exceptions != null && exceptions.length > 0) {
-            buf.append(" throws ");
-            for (int i = 0; i < exceptions.length; ++i) {
-                appendDescriptor(INTERNAL_NAME, exceptions[i]);
-                buf.append(' ');
-            }
-        }
-
-        buf.append('\n');
-        text.add(buf.toString());
-
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        return t;
-    }
-
-    @Override
-    public void visitClassEnd() {
-        text.add("}\n");
-    }
-
-    // ------------------------------------------------------------------------
-    // Annotations
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final String name, final Object value) {
-        buf.setLength(0);
-        appendComa(valueNumber++);
-
-        if (name != null) {
-            buf.append(name).append('=');
-        }
-
-        if (value instanceof String) {
-            visitString((String) value);
-        } else if (value instanceof Type) {
-            visitType((Type) value);
-        } else if (value instanceof Byte) {
-            visitByte(((Byte) value).byteValue());
-        } else if (value instanceof Boolean) {
-            visitBoolean(((Boolean) value).booleanValue());
-        } else if (value instanceof Short) {
-            visitShort(((Short) value).shortValue());
-        } else if (value instanceof Character) {
-            visitChar(((Character) value).charValue());
-        } else if (value instanceof Integer) {
-            visitInt(((Integer) value).intValue());
-        } else if (value instanceof Float) {
-            visitFloat(((Float) value).floatValue());
-        } else if (value instanceof Long) {
-            visitLong(((Long) value).longValue());
-        } else if (value instanceof Double) {
-            visitDouble(((Double) value).doubleValue());
-        } else if (value.getClass().isArray()) {
-            buf.append('{');
-            if (value instanceof byte[]) {
-                byte[] v = (byte[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitByte(v[i]);
-                }
-            } else if (value instanceof boolean[]) {
-                boolean[] v = (boolean[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitBoolean(v[i]);
-                }
-            } else if (value instanceof short[]) {
-                short[] v = (short[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitShort(v[i]);
-                }
-            } else if (value instanceof char[]) {
-                char[] v = (char[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitChar(v[i]);
-                }
-            } else if (value instanceof int[]) {
-                int[] v = (int[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitInt(v[i]);
-                }
-            } else if (value instanceof long[]) {
-                long[] v = (long[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitLong(v[i]);
-                }
-            } else if (value instanceof float[]) {
-                float[] v = (float[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitFloat(v[i]);
-                }
-            } else if (value instanceof double[]) {
-                double[] v = (double[]) value;
-                for (int i = 0; i < v.length; i++) {
-                    appendComa(i);
-                    visitDouble(v[i]);
-                }
-            }
-            buf.append('}');
-        }
-
-        text.add(buf.toString());
-    }
-
-    private void visitInt(final int value) {
-        buf.append(value);
-    }
-
-    private void visitLong(final long value) {
-        buf.append(value).append('L');
-    }
-
-    private void visitFloat(final float value) {
-        buf.append(value).append('F');
-    }
-
-    private void visitDouble(final double value) {
-        buf.append(value).append('D');
-    }
-
-    private void visitChar(final char value) {
-        buf.append("(char)").append((int) value);
-    }
-
-    private void visitShort(final short value) {
-        buf.append("(short)").append(value);
-    }
-
-    private void visitByte(final byte value) {
-        buf.append("(byte)").append(value);
-    }
-
-    private void visitBoolean(final boolean value) {
-        buf.append(value);
-    }
-
-    private void visitString(final String value) {
-        appendString(buf, value);
-    }
-
-    private void visitType(final Type value) {
-        buf.append(value.getClassName()).append(".class");
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        buf.setLength(0);
-        appendComa(valueNumber++);
-        if (name != null) {
-            buf.append(name).append('=');
-        }
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append('.').append(value);
-        text.add(buf.toString());
-    }
-
-    @Override
-    public Textifier visitAnnotation(final String name, final String desc) {
-        buf.setLength(0);
-        appendComa(valueNumber++);
-        if (name != null) {
-            buf.append(name).append('=');
-        }
-        buf.append('@');
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append('(');
-        text.add(buf.toString());
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        text.add(")");
-        return t;
-    }
-
-    @Override
-    public Textifier visitArray(final String name) {
-        buf.setLength(0);
-        appendComa(valueNumber++);
-        if (name != null) {
-            buf.append(name).append('=');
-        }
-        buf.append('{');
-        text.add(buf.toString());
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        text.add("}");
-        return t;
-    }
-
-    @Override
-    public void visitAnnotationEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Fields
-    // ------------------------------------------------------------------------
-
-    @Override
-    public Textifier visitFieldAnnotation(final String desc,
-            final boolean visible) {
-        return visitAnnotation(desc, visible);
-    }
-
-    @Override
-    public void visitFieldAttribute(final Attribute attr) {
-        visitAttribute(attr);
-    }
-
-    @Override
-    public void visitFieldEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Methods
-    // ------------------------------------------------------------------------
-
-    @Override
-    public Textifier visitAnnotationDefault() {
-        text.add(tab2 + "default=");
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        text.add("\n");
-        return t;
-    }
-
-    @Override
-    public Textifier visitMethodAnnotation(final String desc,
-            final boolean visible) {
-        return visitAnnotation(desc, visible);
-    }
-
-    @Override
-    public Textifier visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        buf.setLength(0);
-        buf.append(tab2).append('@');
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append('(');
-        text.add(buf.toString());
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        text.add(visible ? ") // parameter " : ") // invisible, parameter ");
-        text.add(new Integer(parameter));
-        text.add("\n");
-        return t;
-    }
-
-    @Override
-    public void visitMethodAttribute(final Attribute attr) {
-        buf.setLength(0);
-        buf.append(tab).append("ATTRIBUTE ");
-        appendDescriptor(-1, attr.type);
-
-        if (attr instanceof Textifiable) {
-            ((Textifiable) attr).textify(buf, labelNames);
-        } else {
-            buf.append(" : unknown\n");
-        }
-
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitCode() {
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        buf.setLength(0);
-        buf.append(ltab);
-        buf.append("FRAME ");
-        switch (type) {
-        case Opcodes.F_NEW:
-        case Opcodes.F_FULL:
-            buf.append("FULL [");
-            appendFrameTypes(nLocal, local);
-            buf.append("] [");
-            appendFrameTypes(nStack, stack);
-            buf.append(']');
-            break;
-        case Opcodes.F_APPEND:
-            buf.append("APPEND [");
-            appendFrameTypes(nLocal, local);
-            buf.append(']');
-            break;
-        case Opcodes.F_CHOP:
-            buf.append("CHOP ").append(nLocal);
-            break;
-        case Opcodes.F_SAME:
-            buf.append("SAME");
-            break;
-        case Opcodes.F_SAME1:
-            buf.append("SAME1 ");
-            appendFrameTypes(1, stack);
-            break;
-        }
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        buf.setLength(0);
-        buf.append(tab2).append(OPCODES[opcode]).append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        buf.setLength(0);
-        buf.append(tab2)
-                .append(OPCODES[opcode])
-                .append(' ')
-                .append(opcode == Opcodes.NEWARRAY ? TYPES[operand] : Integer
-                        .toString(operand)).append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        buf.setLength(0);
-        buf.append(tab2).append(OPCODES[opcode]).append(' ').append(var)
-                .append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        buf.setLength(0);
-        buf.append(tab2).append(OPCODES[opcode]).append(' ');
-        appendDescriptor(INTERNAL_NAME, type);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        buf.setLength(0);
-        buf.append(tab2).append(OPCODES[opcode]).append(' ');
-        appendDescriptor(INTERNAL_NAME, owner);
-        buf.append('.').append(name).append(" : ");
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        buf.setLength(0);
-        buf.append(tab2).append(OPCODES[opcode]).append(' ');
-        appendDescriptor(INTERNAL_NAME, owner);
-        buf.append('.').append(name).append(' ');
-        appendDescriptor(METHOD_DESCRIPTOR, desc);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        buf.setLength(0);
-        buf.append(tab2).append("INVOKEDYNAMIC").append(' ');
-        buf.append(name);
-        appendDescriptor(METHOD_DESCRIPTOR, desc);
-        buf.append(" [");
-        appendHandle(bsm);
-        buf.append(tab3).append("// arguments:");
-        if (bsmArgs.length == 0) {
-            buf.append(" none");
-        } else {
-            buf.append('\n').append(tab3);
-            for (int i = 0; i < bsmArgs.length; i++) {
-                Object cst = bsmArgs[i];
-                if (cst instanceof String) {
-                    Printer.appendString(buf, (String) cst);
-                } else if (cst instanceof Type) {
-                    buf.append(((Type) cst).getDescriptor()).append(".class");
-                } else if (cst instanceof Handle) {
-                    appendHandle((Handle) cst);
-                } else {
-                    buf.append(cst);
-                }
-                buf.append(", ");
-            }
-            buf.setLength(buf.length() - 2);
-        }
-        buf.append('\n');
-        buf.append(tab2).append("]\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        buf.setLength(0);
-        buf.append(tab2).append(OPCODES[opcode]).append(' ');
-        appendLabel(label);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        buf.setLength(0);
-        buf.append(ltab);
-        appendLabel(label);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        buf.setLength(0);
-        buf.append(tab2).append("LDC ");
-        if (cst instanceof String) {
-            Printer.appendString(buf, (String) cst);
-        } else if (cst instanceof Type) {
-            buf.append(((Type) cst).getDescriptor()).append(".class");
-        } else {
-            buf.append(cst);
-        }
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        buf.setLength(0);
-        buf.append(tab2).append("IINC ").append(var).append(' ')
-                .append(increment).append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        buf.setLength(0);
-        buf.append(tab2).append("TABLESWITCH\n");
-        for (int i = 0; i < labels.length; ++i) {
-            buf.append(tab3).append(min + i).append(": ");
-            appendLabel(labels[i]);
-            buf.append('\n');
-        }
-        buf.append(tab3).append("default: ");
-        appendLabel(dflt);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        buf.setLength(0);
-        buf.append(tab2).append("LOOKUPSWITCH\n");
-        for (int i = 0; i < labels.length; ++i) {
-            buf.append(tab3).append(keys[i]).append(": ");
-            appendLabel(labels[i]);
-            buf.append('\n');
-        }
-        buf.append(tab3).append("default: ");
-        appendLabel(dflt);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        buf.setLength(0);
-        buf.append(tab2).append("MULTIANEWARRAY ");
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append(' ').append(dims).append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        buf.setLength(0);
-        buf.append(tab2).append("TRYCATCHBLOCK ");
-        appendLabel(start);
-        buf.append(' ');
-        appendLabel(end);
-        buf.append(' ');
-        appendLabel(handler);
-        buf.append(' ');
-        appendDescriptor(INTERNAL_NAME, type);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        buf.setLength(0);
-        buf.append(tab2).append("LOCALVARIABLE ").append(name).append(' ');
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append(' ');
-        appendLabel(start);
-        buf.append(' ');
-        appendLabel(end);
-        buf.append(' ').append(index).append('\n');
-
-        if (signature != null) {
-            buf.append(tab2);
-            appendDescriptor(FIELD_SIGNATURE, signature);
-
-            TraceSignatureVisitor sv = new TraceSignatureVisitor(0);
-            SignatureReader r = new SignatureReader(signature);
-            r.acceptType(sv);
-            buf.append(tab2).append("// declaration: ")
-                    .append(sv.getDeclaration()).append('\n');
-        }
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        buf.setLength(0);
-        buf.append(tab2).append("LINENUMBER ").append(line).append(' ');
-        appendLabel(start);
-        buf.append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        buf.setLength(0);
-        buf.append(tab2).append("MAXSTACK = ").append(maxStack).append('\n');
-        text.add(buf.toString());
-
-        buf.setLength(0);
-        buf.append(tab2).append("MAXLOCALS = ").append(maxLocals).append('\n');
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMethodEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Common methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Prints a disassembled view of the given annotation.
-     * 
-     * @param desc
-     *            the class descriptor of the annotation class.
-     * @param visible
-     *            <tt>true</tt> if the annotation is visible at runtime.
-     * @return a visitor to visit the annotation values.
-     */
-    public Textifier visitAnnotation(final String desc, final boolean visible) {
-        buf.setLength(0);
-        buf.append(tab).append('@');
-        appendDescriptor(FIELD_DESCRIPTOR, desc);
-        buf.append('(');
-        text.add(buf.toString());
-        Textifier t = createTextifier();
-        text.add(t.getText());
-        text.add(visible ? ")\n" : ") // invisible\n");
-        return t;
-    }
-
-    /**
-     * Prints a disassembled view of the given attribute.
-     * 
-     * @param attr
-     *            an attribute.
-     */
-    public void visitAttribute(final Attribute attr) {
-        buf.setLength(0);
-        buf.append(tab).append("ATTRIBUTE ");
-        appendDescriptor(-1, attr.type);
-
-        if (attr instanceof Textifiable) {
-            ((Textifiable) attr).textify(buf, null);
-        } else {
-            buf.append(" : unknown\n");
-        }
-
-        text.add(buf.toString());
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Creates a new TraceVisitor instance.
-     * 
-     * @return a new TraceVisitor.
-     */
-    protected Textifier createTextifier() {
-        return new Textifier();
-    }
-
-    /**
-     * Appends an internal name, a type descriptor or a type signature to
-     * {@link #buf buf}.
-     * 
-     * @param type
-     *            indicates if desc is an internal name, a field descriptor, a
-     *            method descriptor, a class signature, ...
-     * @param desc
-     *            an internal name, type descriptor, or type signature. May be
-     *            <tt>null</tt>.
-     */
-    protected void appendDescriptor(final int type, final String desc) {
-        if (type == CLASS_SIGNATURE || type == FIELD_SIGNATURE
-                || type == METHOD_SIGNATURE) {
-            if (desc != null) {
-                buf.append("// signature ").append(desc).append('\n');
-            }
-        } else {
-            buf.append(desc);
-        }
-    }
-
-    /**
-     * Appends the name of the given label to {@link #buf buf}. Creates a new
-     * label name if the given label does not yet have one.
-     * 
-     * @param l
-     *            a label.
-     */
-    protected void appendLabel(final Label l) {
-        if (labelNames == null) {
-            labelNames = new HashMap<Label, String>();
-        }
-        String name = labelNames.get(l);
-        if (name == null) {
-            name = "L" + labelNames.size();
-            labelNames.put(l, name);
-        }
-        buf.append(name);
-    }
-
-    /**
-     * Appends the information about the given handle to {@link #buf buf}.
-     * 
-     * @param h
-     *            a handle, non null.
-     */
-    protected void appendHandle(final Handle h) {
-        buf.append('\n').append(tab3);
-        int tag = h.getTag();
-        buf.append("// handle kind 0x").append(Integer.toHexString(tag))
-                .append(" : ");
-        switch (tag) {
-        case Opcodes.H_GETFIELD:
-            buf.append("GETFIELD");
-            break;
-        case Opcodes.H_GETSTATIC:
-            buf.append("GETSTATIC");
-            break;
-        case Opcodes.H_PUTFIELD:
-            buf.append("PUTFIELD");
-            break;
-        case Opcodes.H_PUTSTATIC:
-            buf.append("PUTSTATIC");
-            break;
-        case Opcodes.H_INVOKEINTERFACE:
-            buf.append("INVOKEINTERFACE");
-            break;
-        case Opcodes.H_INVOKESPECIAL:
-            buf.append("INVOKESPECIAL");
-            break;
-        case Opcodes.H_INVOKESTATIC:
-            buf.append("INVOKESTATIC");
-            break;
-        case Opcodes.H_INVOKEVIRTUAL:
-            buf.append("INVOKEVIRTUAL");
-            break;
-        case Opcodes.H_NEWINVOKESPECIAL:
-            buf.append("NEWINVOKESPECIAL");
-            break;
-        }
-        buf.append('\n');
-        buf.append(tab3);
-        appendDescriptor(INTERNAL_NAME, h.getOwner());
-        buf.append('.');
-        buf.append(h.getName());
-        buf.append('(');
-        appendDescriptor(HANDLE_DESCRIPTOR, h.getDesc());
-        buf.append(')').append('\n');
-    }
-
-    /**
-     * Appends a string representation of the given access modifiers to
-     * {@link #buf buf}.
-     * 
-     * @param access
-     *            some access modifiers.
-     */
-    private void appendAccess(final int access) {
-        if ((access & Opcodes.ACC_PUBLIC) != 0) {
-            buf.append("public ");
-        }
-        if ((access & Opcodes.ACC_PRIVATE) != 0) {
-            buf.append("private ");
-        }
-        if ((access & Opcodes.ACC_PROTECTED) != 0) {
-            buf.append("protected ");
-        }
-        if ((access & Opcodes.ACC_FINAL) != 0) {
-            buf.append("final ");
-        }
-        if ((access & Opcodes.ACC_STATIC) != 0) {
-            buf.append("static ");
-        }
-        if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
-            buf.append("synchronized ");
-        }
-        if ((access & Opcodes.ACC_VOLATILE) != 0) {
-            buf.append("volatile ");
-        }
-        if ((access & Opcodes.ACC_TRANSIENT) != 0) {
-            buf.append("transient ");
-        }
-        if ((access & Opcodes.ACC_ABSTRACT) != 0) {
-            buf.append("abstract ");
-        }
-        if ((access & Opcodes.ACC_STRICT) != 0) {
-            buf.append("strictfp ");
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            buf.append("synthetic ");
-        }
-        if ((access & Opcodes.ACC_ENUM) != 0) {
-            buf.append("enum ");
-        }
-    }
-
-    private void appendComa(final int i) {
-        if (i != 0) {
-            buf.append(", ");
-        }
-    }
-
-    private void appendFrameTypes(final int n, final Object[] o) {
-        for (int i = 0; i < n; ++i) {
-            if (i > 0) {
-                buf.append(' ');
-            }
-            if (o[i] instanceof String) {
-                String desc = (String) o[i];
-                if (desc.startsWith("[")) {
-                    appendDescriptor(FIELD_DESCRIPTOR, desc);
-                } else {
-                    appendDescriptor(INTERNAL_NAME, desc);
-                }
-            } else if (o[i] instanceof Integer) {
-                switch (((Integer) o[i]).intValue()) {
-                case 0:
-                    appendDescriptor(FIELD_DESCRIPTOR, "T");
-                    break;
-                case 1:
-                    appendDescriptor(FIELD_DESCRIPTOR, "I");
-                    break;
-                case 2:
-                    appendDescriptor(FIELD_DESCRIPTOR, "F");
-                    break;
-                case 3:
-                    appendDescriptor(FIELD_DESCRIPTOR, "D");
-                    break;
-                case 4:
-                    appendDescriptor(FIELD_DESCRIPTOR, "J");
-                    break;
-                case 5:
-                    appendDescriptor(FIELD_DESCRIPTOR, "N");
-                    break;
-                case 6:
-                    appendDescriptor(FIELD_DESCRIPTOR, "U");
-                    break;
-                }
-            } else {
-                appendLabel((Label) o[i]);
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/TraceAnnotationVisitor.java b/asm4/src/org/objectweb/asm/util/TraceAnnotationVisitor.java
deleted file mode 100644
index 9c2259d..0000000
--- a/asm4/src/org/objectweb/asm/util/TraceAnnotationVisitor.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * An {@link AnnotationVisitor} that prints the annotations it visits with a
- * {@link Printer}.
- * 
- * @author Eric Bruneton
- */
-public final class TraceAnnotationVisitor extends AnnotationVisitor {
-
-    private final Printer p;
-
-    public TraceAnnotationVisitor(final Printer p) {
-        this(null, p);
-    }
-
-    public TraceAnnotationVisitor(final AnnotationVisitor av, final Printer p) {
-        super(Opcodes.ASM4, av);
-        this.p = p;
-    }
-
-    @Override
-    public void visit(final String name, final Object value) {
-        p.visit(name, value);
-        super.visit(name, value);
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        p.visitEnum(name, desc, value);
-        super.visitEnum(name, desc, value);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        Printer p = this.p.visitAnnotation(name, desc);
-        AnnotationVisitor av = this.av == null ? null : this.av
-                .visitAnnotation(name, desc);
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        Printer p = this.p.visitArray(name);
-        AnnotationVisitor av = this.av == null ? null : this.av
-                .visitArray(name);
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public void visitEnd() {
-        p.visitAnnotationEnd();
-        super.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/TraceClassVisitor.java b/asm4/src/org/objectweb/asm/util/TraceClassVisitor.java
deleted file mode 100644
index ccfeeb6..0000000
--- a/asm4/src/org/objectweb/asm/util/TraceClassVisitor.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.PrintWriter;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassVisitor} that prints the classes it visits with a
- * {@link Printer}. This class visitor can be used in the middle of a class
- * visitor chain to trace the class that is visited at a given point in this
- * chain. This may be useful for debugging purposes.
- * <p>
- * The trace printed when visiting the <tt>Hello</tt> class is the following:
- * <p>
- * <blockquote>
- * 
- * <pre>
- * // class version 49.0 (49) // access flags 0x21 public class Hello {
- * 
- * // compiled from: Hello.java
- * 
- * // access flags 0x1 public &lt;init&gt; ()V ALOAD 0 INVOKESPECIAL
- * java/lang/Object &lt;init&gt; ()V RETURN MAXSTACK = 1 MAXLOCALS = 1
- * 
- * // access flags 0x9 public static main ([Ljava/lang/String;)V GETSTATIC
- * java/lang/System out Ljava/io/PrintStream; LDC &quot;hello&quot;
- * INVOKEVIRTUAL java/io/PrintStream println (Ljava/lang/String;)V RETURN
- * MAXSTACK = 2 MAXLOCALS = 1 }
- * </pre>
- * 
- * </blockquote> where <tt>Hello</tt> is defined by:
- * <p>
- * <blockquote>
- * 
- * <pre>
- * public class Hello {
- * 
- *     public static void main(String[] args) {
- *         System.out.println(&quot;hello&quot;);
- *     }
- * }
- * </pre>
- * 
- * </blockquote>
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public final class TraceClassVisitor extends ClassVisitor {
-
-    /**
-     * The print writer to be used to print the class. May be null.
-     */
-    private final PrintWriter pw;
-
-    /**
-     * The object that actually converts visit events into text.
-     */
-    public final Printer p;
-
-    /**
-     * Constructs a new {@link TraceClassVisitor}.
-     * 
-     * @param pw
-     *            the print writer to be used to print the class.
-     */
-    public TraceClassVisitor(final PrintWriter pw) {
-        this(null, pw);
-    }
-
-    /**
-     * Constructs a new {@link TraceClassVisitor}.
-     * 
-     * @param cv
-     *            the {@link ClassVisitor} to which this visitor delegates
-     *            calls. May be <tt>null</tt>.
-     * @param pw
-     *            the print writer to be used to print the class.
-     */
-    public TraceClassVisitor(final ClassVisitor cv, final PrintWriter pw) {
-        this(cv, new Textifier(), pw);
-    }
-
-    /**
-     * Constructs a new {@link TraceClassVisitor}.
-     * 
-     * @param cv
-     *            the {@link ClassVisitor} to which this visitor delegates
-     *            calls. May be <tt>null</tt>.
-     * @param p
-     *            the object that actually converts visit events into text.
-     * @param pw
-     *            the print writer to be used to print the class. May be null if
-     *            you simply want to use the result via
-     *            {@link Printer#getText()}, instead of printing it.
-     */
-    public TraceClassVisitor(final ClassVisitor cv, final Printer p,
-            final PrintWriter pw) {
-        super(Opcodes.ASM4, cv);
-        this.pw = pw;
-        this.p = p;
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        p.visit(version, access, name, signature, superName, interfaces);
-        super.visit(version, access, name, signature, superName, interfaces);
-    }
-
-    @Override
-    public void visitSource(final String file, final String debug) {
-        p.visitSource(file, debug);
-        super.visitSource(file, debug);
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        p.visitOuterClass(owner, name, desc);
-        super.visitOuterClass(owner, name, desc);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        Printer p = this.p.visitClassAnnotation(desc, visible);
-        AnnotationVisitor av = cv == null ? null : cv.visitAnnotation(desc,
-                visible);
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        p.visitClassAttribute(attr);
-        super.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitInnerClass(final String name, final String outerName,
-            final String innerName, final int access) {
-        p.visitInnerClass(name, outerName, innerName, access);
-        super.visitInnerClass(name, outerName, innerName, access);
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        Printer p = this.p.visitField(access, name, desc, signature, value);
-        FieldVisitor fv = cv == null ? null : cv.visitField(access, name, desc,
-                signature, value);
-        return new TraceFieldVisitor(fv, p);
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        Printer p = this.p.visitMethod(access, name, desc, signature,
-                exceptions);
-        MethodVisitor mv = cv == null ? null : cv.visitMethod(access, name,
-                desc, signature, exceptions);
-        return new TraceMethodVisitor(mv, p);
-    }
-
-    @Override
-    public void visitEnd() {
-        p.visitClassEnd();
-        if (pw != null) {
-            p.print(pw);
-            pw.flush();
-        }
-        super.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/TraceFieldVisitor.java b/asm4/src/org/objectweb/asm/util/TraceFieldVisitor.java
deleted file mode 100644
index 2158a72..0000000
--- a/asm4/src/org/objectweb/asm/util/TraceFieldVisitor.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link FieldVisitor} that prints the fields it visits with a
- * {@link Printer}.
- * 
- * @author Eric Bruneton
- */
-public final class TraceFieldVisitor extends FieldVisitor {
-
-    public final Printer p;
-
-    public TraceFieldVisitor(final Printer p) {
-        this(null, p);
-    }
-
-    public TraceFieldVisitor(final FieldVisitor fv, final Printer p) {
-        super(Opcodes.ASM4, fv);
-        this.p = p;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        Printer p = this.p.visitFieldAnnotation(desc, visible);
-        AnnotationVisitor av = fv == null ? null : fv.visitAnnotation(desc,
-                visible);
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        p.visitFieldAttribute(attr);
-        super.visitAttribute(attr);
-    }
-
-    @Override
-    public void visitEnd() {
-        p.visitFieldEnd();
-        super.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/TraceMethodVisitor.java b/asm4/src/org/objectweb/asm/util/TraceMethodVisitor.java
deleted file mode 100644
index a1444e9..0000000
--- a/asm4/src/org/objectweb/asm/util/TraceMethodVisitor.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link MethodVisitor} that prints the methods it visits with a
- * {@link Printer}.
- * 
- * @author Eric Bruneton
- */
-public final class TraceMethodVisitor extends MethodVisitor {
-
-    public final Printer p;
-
-    public TraceMethodVisitor(final Printer p) {
-        this(null, p);
-    }
-
-    public TraceMethodVisitor(final MethodVisitor mv, final Printer p) {
-        super(Opcodes.ASM4, mv);
-        this.p = p;
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        Printer p = this.p.visitMethodAnnotation(desc, visible);
-        AnnotationVisitor av = mv == null ? null : mv.visitAnnotation(desc,
-                visible);
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public void visitAttribute(final Attribute attr) {
-        p.visitMethodAttribute(attr);
-        super.visitAttribute(attr);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        Printer p = this.p.visitAnnotationDefault();
-        AnnotationVisitor av = mv == null ? null : mv.visitAnnotationDefault();
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        Printer p = this.p.visitParameterAnnotation(parameter, desc, visible);
-        AnnotationVisitor av = mv == null ? null : mv.visitParameterAnnotation(
-                parameter, desc, visible);
-        return new TraceAnnotationVisitor(av, p);
-    }
-
-    @Override
-    public void visitCode() {
-        p.visitCode();
-        super.visitCode();
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        p.visitFrame(type, nLocal, local, nStack, stack);
-        super.visitFrame(type, nLocal, local, nStack, stack);
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        p.visitInsn(opcode);
-        super.visitInsn(opcode);
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        p.visitIntInsn(opcode, operand);
-        super.visitIntInsn(opcode, operand);
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        p.visitVarInsn(opcode, var);
-        super.visitVarInsn(opcode, var);
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        p.visitTypeInsn(opcode, type);
-        super.visitTypeInsn(opcode, type);
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        p.visitFieldInsn(opcode, owner, name, desc);
-        super.visitFieldInsn(opcode, owner, name, desc);
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        p.visitMethodInsn(opcode, owner, name, desc);
-        super.visitMethodInsn(opcode, owner, name, desc);
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        p.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        super.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        p.visitJumpInsn(opcode, label);
-        super.visitJumpInsn(opcode, label);
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        p.visitLabel(label);
-        super.visitLabel(label);
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        p.visitLdcInsn(cst);
-        super.visitLdcInsn(cst);
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        p.visitIincInsn(var, increment);
-        super.visitIincInsn(var, increment);
-    }
-
-    @Override
-    public void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        p.visitTableSwitchInsn(min, max, dflt, labels);
-        super.visitTableSwitchInsn(min, max, dflt, labels);
-    }
-
-    @Override
-    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        p.visitLookupSwitchInsn(dflt, keys, labels);
-        super.visitLookupSwitchInsn(dflt, keys, labels);
-    }
-
-    @Override
-    public void visitMultiANewArrayInsn(final String desc, final int dims) {
-        p.visitMultiANewArrayInsn(desc, dims);
-        super.visitMultiANewArrayInsn(desc, dims);
-    }
-
-    @Override
-    public void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        p.visitTryCatchBlock(start, end, handler, type);
-        super.visitTryCatchBlock(start, end, handler, type);
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        p.visitLocalVariable(name, desc, signature, start, end, index);
-        super.visitLocalVariable(name, desc, signature, start, end, index);
-    }
-
-    @Override
-    public void visitLineNumber(final int line, final Label start) {
-        p.visitLineNumber(line, start);
-        super.visitLineNumber(line, start);
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        p.visitMaxs(maxStack, maxLocals);
-        super.visitMaxs(maxStack, maxLocals);
-    }
-
-    @Override
-    public void visitEnd() {
-        p.visitMethodEnd();
-        super.visitEnd();
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/TraceSignatureVisitor.java b/asm4/src/org/objectweb/asm/util/TraceSignatureVisitor.java
deleted file mode 100644
index 5413782..0000000
--- a/asm4/src/org/objectweb/asm/util/TraceSignatureVisitor.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.signature.SignatureVisitor;
-
-/**
- * A {@link SignatureVisitor} that prints a disassembled view of the signature
- * it visits.
- * 
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public final class TraceSignatureVisitor extends SignatureVisitor {
-
-    private final StringBuffer declaration;
-
-    private boolean isInterface;
-
-    private boolean seenFormalParameter;
-
-    private boolean seenInterfaceBound;
-
-    private boolean seenParameter;
-
-    private boolean seenInterface;
-
-    private StringBuffer returnType;
-
-    private StringBuffer exceptions;
-
-    /**
-     * Stack used to keep track of class types that have arguments. Each element
-     * of this stack is a boolean encoded in one bit. The top of the stack is
-     * the lowest order bit. Pushing false = *2, pushing true = *2+1, popping =
-     * /2.
-     */
-    private int argumentStack;
-
-    /**
-     * Stack used to keep track of array class types. Each element of this stack
-     * is a boolean encoded in one bit. The top of the stack is the lowest order
-     * bit. Pushing false = *2, pushing true = *2+1, popping = /2.
-     */
-    private int arrayStack;
-
-    private String separator = "";
-
-    public TraceSignatureVisitor(final int access) {
-        super(Opcodes.ASM4);
-        isInterface = (access & Opcodes.ACC_INTERFACE) != 0;
-        this.declaration = new StringBuffer();
-    }
-
-    private TraceSignatureVisitor(final StringBuffer buf) {
-        super(Opcodes.ASM4);
-        this.declaration = buf;
-    }
-
-    @Override
-    public void visitFormalTypeParameter(final String name) {
-        declaration.append(seenFormalParameter ? ", " : "<").append(name);
-        seenFormalParameter = true;
-        seenInterfaceBound = false;
-    }
-
-    @Override
-    public SignatureVisitor visitClassBound() {
-        separator = " extends ";
-        startType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitInterfaceBound() {
-        separator = seenInterfaceBound ? ", " : " extends ";
-        seenInterfaceBound = true;
-        startType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitSuperclass() {
-        endFormals();
-        separator = " extends ";
-        startType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitInterface() {
-        separator = seenInterface ? ", " : isInterface ? " extends "
-                : " implements ";
-        seenInterface = true;
-        startType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitParameterType() {
-        endFormals();
-        if (seenParameter) {
-            declaration.append(", ");
-        } else {
-            seenParameter = true;
-            declaration.append('(');
-        }
-        startType();
-        return this;
-    }
-
-    @Override
-    public SignatureVisitor visitReturnType() {
-        endFormals();
-        if (seenParameter) {
-            seenParameter = false;
-        } else {
-            declaration.append('(');
-        }
-        declaration.append(')');
-        returnType = new StringBuffer();
-        return new TraceSignatureVisitor(returnType);
-    }
-
-    @Override
-    public SignatureVisitor visitExceptionType() {
-        if (exceptions == null) {
-            exceptions = new StringBuffer();
-        } else {
-            exceptions.append(", ");
-        }
-        // startType();
-        return new TraceSignatureVisitor(exceptions);
-    }
-
-    @Override
-    public void visitBaseType(final char descriptor) {
-        switch (descriptor) {
-        case 'V':
-            declaration.append("void");
-            break;
-        case 'B':
-            declaration.append("byte");
-            break;
-        case 'J':
-            declaration.append("long");
-            break;
-        case 'Z':
-            declaration.append("boolean");
-            break;
-        case 'I':
-            declaration.append("int");
-            break;
-        case 'S':
-            declaration.append("short");
-            break;
-        case 'C':
-            declaration.append("char");
-            break;
-        case 'F':
-            declaration.append("float");
-            break;
-        // case 'D':
-        default:
-            declaration.append("double");
-            break;
-        }
-        endType();
-    }
-
-    @Override
-    public void visitTypeVariable(final String name) {
-        declaration.append(name);
-        endType();
-    }
-
-    @Override
-    public SignatureVisitor visitArrayType() {
-        startType();
-        arrayStack |= 1;
-        return this;
-    }
-
-    @Override
-    public void visitClassType(final String name) {
-        if ("java/lang/Object".equals(name)) {
-            // Map<java.lang.Object,java.util.List>
-            // or
-            // abstract public V get(Object key); (seen in Dictionary.class)
-            // should have Object
-            // but java.lang.String extends java.lang.Object is unnecessary
-            boolean needObjectClass = argumentStack % 2 != 0 || seenParameter;
-            if (needObjectClass) {
-                declaration.append(separator).append(name.replace('/', '.'));
-            }
-        } else {
-            declaration.append(separator).append(name.replace('/', '.'));
-        }
-        separator = "";
-        argumentStack *= 2;
-    }
-
-    @Override
-    public void visitInnerClassType(final String name) {
-        if (argumentStack % 2 != 0) {
-            declaration.append('>');
-        }
-        argumentStack /= 2;
-        declaration.append('.');
-        declaration.append(separator).append(name.replace('/', '.'));
-        separator = "";
-        argumentStack *= 2;
-    }
-
-    @Override
-    public void visitTypeArgument() {
-        if (argumentStack % 2 == 0) {
-            ++argumentStack;
-            declaration.append('<');
-        } else {
-            declaration.append(", ");
-        }
-        declaration.append('?');
-    }
-
-    @Override
-    public SignatureVisitor visitTypeArgument(final char tag) {
-        if (argumentStack % 2 == 0) {
-            ++argumentStack;
-            declaration.append('<');
-        } else {
-            declaration.append(", ");
-        }
-
-        if (tag == EXTENDS) {
-            declaration.append("? extends ");
-        } else if (tag == SUPER) {
-            declaration.append("? super ");
-        }
-
-        startType();
-        return this;
-    }
-
-    @Override
-    public void visitEnd() {
-        if (argumentStack % 2 != 0) {
-            declaration.append('>');
-        }
-        argumentStack /= 2;
-        endType();
-    }
-
-    public String getDeclaration() {
-        return declaration.toString();
-    }
-
-    public String getReturnType() {
-        return returnType == null ? null : returnType.toString();
-    }
-
-    public String getExceptions() {
-        return exceptions == null ? null : exceptions.toString();
-    }
-
-    // -----------------------------------------------
-
-    private void endFormals() {
-        if (seenFormalParameter) {
-            declaration.append('>');
-            seenFormalParameter = false;
-        }
-    }
-
-    private void startType() {
-        arrayStack *= 2;
-    }
-
-    private void endType() {
-        if (arrayStack % 2 == 0) {
-            arrayStack /= 2;
-        } else {
-            while (arrayStack % 2 != 0) {
-                arrayStack /= 2;
-                declaration.append("[]");
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/util/package.html b/asm4/src/org/objectweb/asm/util/package.html
deleted file mode 100644
index 91d7420..0000000
--- a/asm4/src/org/objectweb/asm/util/package.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-<!--
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
--->
-<body>
-Provides ASM visitors that can be useful for programming and
-debugging purposes. These class visitors are normally not used by applications
-at runtime. This is why they are bundled in an optional <tt>asm-util.jar</tt>
-library that is separated from (but requires) the <tt>asm.jar</tt> library,
-which contains the core ASM framework.
-
-@since ASM 1.3.2
-</body>
-</html>
diff --git a/asm4/src/org/objectweb/asm/xml/ASMContentHandler.java b/asm4/src/org/objectweb/asm/xml/ASMContentHandler.java
deleted file mode 100644
index 0ce5ba6..0000000
--- a/asm4/src/org/objectweb/asm/xml/ASMContentHandler.java
+++ /dev/null
@@ -1,1317 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * A {@link org.xml.sax.ContentHandler ContentHandler} that transforms XML
- * document into Java class file. This class can be feeded by any kind of SAX
- * 2.0 event producers, e.g. XML parser, XSLT or XPath engines, or custom code.
- * 
- * @see org.objectweb.asm.xml.SAXClassAdapter
- * @see org.objectweb.asm.xml.Processor
- * 
- * @author Eugene Kuleshov
- */
-public class ASMContentHandler extends DefaultHandler implements Opcodes {
-
-    /**
-     * Stack of the intermediate processing contexts.
-     */
-    private final ArrayList<Object> stack = new ArrayList<Object>();
-
-    /**
-     * Complete name of the current element.
-     */
-    String match = "";
-
-    /**
-     * Current instance of the {@link ClassVisitor ClassVisitor} used to visit
-     * classfile bytecode.
-     */
-    protected ClassVisitor cv;
-
-    /**
-     * Map of the active {@link Label Label} instances for current method.
-     */
-    protected Map<Object, Label> labels;
-
-    private static final String BASE = "class";
-
-    private final RuleSet RULES = new RuleSet();
-    {
-        RULES.add(BASE, new ClassRule());
-        RULES.add(BASE + "/interfaces/interface", new InterfaceRule());
-        RULES.add(BASE + "/interfaces", new InterfacesRule());
-        RULES.add(BASE + "/outerclass", new OuterClassRule());
-        RULES.add(BASE + "/innerclass", new InnerClassRule());
-        RULES.add(BASE + "/source", new SourceRule());
-        RULES.add(BASE + "/field", new FieldRule());
-
-        RULES.add(BASE + "/method", new MethodRule());
-        RULES.add(BASE + "/method/exceptions/exception", new ExceptionRule());
-        RULES.add(BASE + "/method/exceptions", new ExceptionsRule());
-
-        RULES.add(BASE + "/method/annotationDefault",
-                new AnnotationDefaultRule());
-
-        RULES.add(BASE + "/method/code/*", new OpcodesRule()); // opcodes
-
-        RULES.add(BASE + "/method/code/frame", new FrameRule());
-        RULES.add(BASE + "/method/code/frame/local", new FrameTypeRule());
-        RULES.add(BASE + "/method/code/frame/stack", new FrameTypeRule());
-
-        RULES.add(BASE + "/method/code/TABLESWITCH", new TableSwitchRule());
-        RULES.add(BASE + "/method/code/TABLESWITCH/label",
-                new TableSwitchLabelRule());
-        RULES.add(BASE + "/method/code/LOOKUPSWITCH", new LookupSwitchRule());
-        RULES.add(BASE + "/method/code/LOOKUPSWITCH/label",
-                new LookupSwitchLabelRule());
-
-        RULES.add(BASE + "/method/code/INVOKEDYNAMIC", new InvokeDynamicRule());
-        RULES.add(BASE + "/method/code/INVOKEDYNAMIC/bsmArg",
-                new InvokeDynamicBsmArgumentsRule());
-
-        RULES.add(BASE + "/method/code/Label", new LabelRule());
-        RULES.add(BASE + "/method/code/TryCatch", new TryCatchRule());
-        RULES.add(BASE + "/method/code/LineNumber", new LineNumberRule());
-        RULES.add(BASE + "/method/code/LocalVar", new LocalVarRule());
-        RULES.add(BASE + "/method/code/Max", new MaxRule());
-
-        RULES.add("*/annotation", new AnnotationRule());
-        RULES.add("*/parameterAnnotation", new AnnotationParameterRule());
-        RULES.add("*/annotationValue", new AnnotationValueRule());
-        RULES.add("*/annotationValueAnnotation",
-                new AnnotationValueAnnotationRule());
-        RULES.add("*/annotationValueEnum", new AnnotationValueEnumRule());
-        RULES.add("*/annotationValueArray", new AnnotationValueArrayRule());
-    }
-
-    private static interface OpcodeGroup {
-        public static final int INSN = 0;
-        public static final int INSN_INT = 1;
-        public static final int INSN_VAR = 2;
-        public static final int INSN_TYPE = 3;
-        public static final int INSN_FIELD = 4;
-        public static final int INSN_METHOD = 5;
-        public static final int INSN_JUMP = 6;
-        public static final int INSN_LDC = 7;
-        public static final int INSN_IINC = 8;
-        public static final int INSN_MULTIANEWARRAY = 9;
-    }
-
-    /**
-     * Map of the opcode names to opcode and opcode group
-     */
-    static final HashMap<String, Opcode> OPCODES = new HashMap<String, Opcode>();
-    static {
-        addOpcode("NOP", NOP, OpcodeGroup.INSN);
-        addOpcode("ACONST_NULL", ACONST_NULL, OpcodeGroup.INSN);
-        addOpcode("ICONST_M1", ICONST_M1, OpcodeGroup.INSN);
-        addOpcode("ICONST_0", ICONST_0, OpcodeGroup.INSN);
-        addOpcode("ICONST_1", ICONST_1, OpcodeGroup.INSN);
-        addOpcode("ICONST_2", ICONST_2, OpcodeGroup.INSN);
-        addOpcode("ICONST_3", ICONST_3, OpcodeGroup.INSN);
-        addOpcode("ICONST_4", ICONST_4, OpcodeGroup.INSN);
-        addOpcode("ICONST_5", ICONST_5, OpcodeGroup.INSN);
-        addOpcode("LCONST_0", LCONST_0, OpcodeGroup.INSN);
-        addOpcode("LCONST_1", LCONST_1, OpcodeGroup.INSN);
-        addOpcode("FCONST_0", FCONST_0, OpcodeGroup.INSN);
-        addOpcode("FCONST_1", FCONST_1, OpcodeGroup.INSN);
-        addOpcode("FCONST_2", FCONST_2, OpcodeGroup.INSN);
-        addOpcode("DCONST_0", DCONST_0, OpcodeGroup.INSN);
-        addOpcode("DCONST_1", DCONST_1, OpcodeGroup.INSN);
-        addOpcode("BIPUSH", BIPUSH, OpcodeGroup.INSN_INT);
-        addOpcode("SIPUSH", SIPUSH, OpcodeGroup.INSN_INT);
-        addOpcode("LDC", LDC, OpcodeGroup.INSN_LDC);
-        addOpcode("ILOAD", ILOAD, OpcodeGroup.INSN_VAR);
-        addOpcode("LLOAD", LLOAD, OpcodeGroup.INSN_VAR);
-        addOpcode("FLOAD", FLOAD, OpcodeGroup.INSN_VAR);
-        addOpcode("DLOAD", DLOAD, OpcodeGroup.INSN_VAR);
-        addOpcode("ALOAD", ALOAD, OpcodeGroup.INSN_VAR);
-        addOpcode("IALOAD", IALOAD, OpcodeGroup.INSN);
-        addOpcode("LALOAD", LALOAD, OpcodeGroup.INSN);
-        addOpcode("FALOAD", FALOAD, OpcodeGroup.INSN);
-        addOpcode("DALOAD", DALOAD, OpcodeGroup.INSN);
-        addOpcode("AALOAD", AALOAD, OpcodeGroup.INSN);
-        addOpcode("BALOAD", BALOAD, OpcodeGroup.INSN);
-        addOpcode("CALOAD", CALOAD, OpcodeGroup.INSN);
-        addOpcode("SALOAD", SALOAD, OpcodeGroup.INSN);
-        addOpcode("ISTORE", ISTORE, OpcodeGroup.INSN_VAR);
-        addOpcode("LSTORE", LSTORE, OpcodeGroup.INSN_VAR);
-        addOpcode("FSTORE", FSTORE, OpcodeGroup.INSN_VAR);
-        addOpcode("DSTORE", DSTORE, OpcodeGroup.INSN_VAR);
-        addOpcode("ASTORE", ASTORE, OpcodeGroup.INSN_VAR);
-        addOpcode("IASTORE", IASTORE, OpcodeGroup.INSN);
-        addOpcode("LASTORE", LASTORE, OpcodeGroup.INSN);
-        addOpcode("FASTORE", FASTORE, OpcodeGroup.INSN);
-        addOpcode("DASTORE", DASTORE, OpcodeGroup.INSN);
-        addOpcode("AASTORE", AASTORE, OpcodeGroup.INSN);
-        addOpcode("BASTORE", BASTORE, OpcodeGroup.INSN);
-        addOpcode("CASTORE", CASTORE, OpcodeGroup.INSN);
-        addOpcode("SASTORE", SASTORE, OpcodeGroup.INSN);
-        addOpcode("POP", POP, OpcodeGroup.INSN);
-        addOpcode("POP2", POP2, OpcodeGroup.INSN);
-        addOpcode("DUP", DUP, OpcodeGroup.INSN);
-        addOpcode("DUP_X1", DUP_X1, OpcodeGroup.INSN);
-        addOpcode("DUP_X2", DUP_X2, OpcodeGroup.INSN);
-        addOpcode("DUP2", DUP2, OpcodeGroup.INSN);
-        addOpcode("DUP2_X1", DUP2_X1, OpcodeGroup.INSN);
-        addOpcode("DUP2_X2", DUP2_X2, OpcodeGroup.INSN);
-        addOpcode("SWAP", SWAP, OpcodeGroup.INSN);
-        addOpcode("IADD", IADD, OpcodeGroup.INSN);
-        addOpcode("LADD", LADD, OpcodeGroup.INSN);
-        addOpcode("FADD", FADD, OpcodeGroup.INSN);
-        addOpcode("DADD", DADD, OpcodeGroup.INSN);
-        addOpcode("ISUB", ISUB, OpcodeGroup.INSN);
-        addOpcode("LSUB", LSUB, OpcodeGroup.INSN);
-        addOpcode("FSUB", FSUB, OpcodeGroup.INSN);
-        addOpcode("DSUB", DSUB, OpcodeGroup.INSN);
-        addOpcode("IMUL", IMUL, OpcodeGroup.INSN);
-        addOpcode("LMUL", LMUL, OpcodeGroup.INSN);
-        addOpcode("FMUL", FMUL, OpcodeGroup.INSN);
-        addOpcode("DMUL", DMUL, OpcodeGroup.INSN);
-        addOpcode("IDIV", IDIV, OpcodeGroup.INSN);
-        addOpcode("LDIV", LDIV, OpcodeGroup.INSN);
-        addOpcode("FDIV", FDIV, OpcodeGroup.INSN);
-        addOpcode("DDIV", DDIV, OpcodeGroup.INSN);
-        addOpcode("IREM", IREM, OpcodeGroup.INSN);
-        addOpcode("LREM", LREM, OpcodeGroup.INSN);
-        addOpcode("FREM", FREM, OpcodeGroup.INSN);
-        addOpcode("DREM", DREM, OpcodeGroup.INSN);
-        addOpcode("INEG", INEG, OpcodeGroup.INSN);
-        addOpcode("LNEG", LNEG, OpcodeGroup.INSN);
-        addOpcode("FNEG", FNEG, OpcodeGroup.INSN);
-        addOpcode("DNEG", DNEG, OpcodeGroup.INSN);
-        addOpcode("ISHL", ISHL, OpcodeGroup.INSN);
-        addOpcode("LSHL", LSHL, OpcodeGroup.INSN);
-        addOpcode("ISHR", ISHR, OpcodeGroup.INSN);
-        addOpcode("LSHR", LSHR, OpcodeGroup.INSN);
-        addOpcode("IUSHR", IUSHR, OpcodeGroup.INSN);
-        addOpcode("LUSHR", LUSHR, OpcodeGroup.INSN);
-        addOpcode("IAND", IAND, OpcodeGroup.INSN);
-        addOpcode("LAND", LAND, OpcodeGroup.INSN);
-        addOpcode("IOR", IOR, OpcodeGroup.INSN);
-        addOpcode("LOR", LOR, OpcodeGroup.INSN);
-        addOpcode("IXOR", IXOR, OpcodeGroup.INSN);
-        addOpcode("LXOR", LXOR, OpcodeGroup.INSN);
-        addOpcode("IINC", IINC, OpcodeGroup.INSN_IINC);
-        addOpcode("I2L", I2L, OpcodeGroup.INSN);
-        addOpcode("I2F", I2F, OpcodeGroup.INSN);
-        addOpcode("I2D", I2D, OpcodeGroup.INSN);
-        addOpcode("L2I", L2I, OpcodeGroup.INSN);
-        addOpcode("L2F", L2F, OpcodeGroup.INSN);
-        addOpcode("L2D", L2D, OpcodeGroup.INSN);
-        addOpcode("F2I", F2I, OpcodeGroup.INSN);
-        addOpcode("F2L", F2L, OpcodeGroup.INSN);
-        addOpcode("F2D", F2D, OpcodeGroup.INSN);
-        addOpcode("D2I", D2I, OpcodeGroup.INSN);
-        addOpcode("D2L", D2L, OpcodeGroup.INSN);
-        addOpcode("D2F", D2F, OpcodeGroup.INSN);
-        addOpcode("I2B", I2B, OpcodeGroup.INSN);
-        addOpcode("I2C", I2C, OpcodeGroup.INSN);
-        addOpcode("I2S", I2S, OpcodeGroup.INSN);
-        addOpcode("LCMP", LCMP, OpcodeGroup.INSN);
-        addOpcode("FCMPL", FCMPL, OpcodeGroup.INSN);
-        addOpcode("FCMPG", FCMPG, OpcodeGroup.INSN);
-        addOpcode("DCMPL", DCMPL, OpcodeGroup.INSN);
-        addOpcode("DCMPG", DCMPG, OpcodeGroup.INSN);
-        addOpcode("IFEQ", IFEQ, OpcodeGroup.INSN_JUMP);
-        addOpcode("IFNE", IFNE, OpcodeGroup.INSN_JUMP);
-        addOpcode("IFLT", IFLT, OpcodeGroup.INSN_JUMP);
-        addOpcode("IFGE", IFGE, OpcodeGroup.INSN_JUMP);
-        addOpcode("IFGT", IFGT, OpcodeGroup.INSN_JUMP);
-        addOpcode("IFLE", IFLE, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ICMPEQ", IF_ICMPEQ, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ICMPNE", IF_ICMPNE, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ICMPLT", IF_ICMPLT, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ICMPGE", IF_ICMPGE, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ICMPGT", IF_ICMPGT, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ICMPLE", IF_ICMPLE, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ACMPEQ", IF_ACMPEQ, OpcodeGroup.INSN_JUMP);
-        addOpcode("IF_ACMPNE", IF_ACMPNE, OpcodeGroup.INSN_JUMP);
-        addOpcode("GOTO", GOTO, OpcodeGroup.INSN_JUMP);
-        addOpcode("JSR", JSR, OpcodeGroup.INSN_JUMP);
-        addOpcode("RET", RET, OpcodeGroup.INSN_VAR);
-        addOpcode("IRETURN", IRETURN, OpcodeGroup.INSN);
-        addOpcode("LRETURN", LRETURN, OpcodeGroup.INSN);
-        addOpcode("FRETURN", FRETURN, OpcodeGroup.INSN);
-        addOpcode("DRETURN", DRETURN, OpcodeGroup.INSN);
-        addOpcode("ARETURN", ARETURN, OpcodeGroup.INSN);
-        addOpcode("RETURN", RETURN, OpcodeGroup.INSN);
-        addOpcode("GETSTATIC", GETSTATIC, OpcodeGroup.INSN_FIELD);
-        addOpcode("PUTSTATIC", PUTSTATIC, OpcodeGroup.INSN_FIELD);
-        addOpcode("GETFIELD", GETFIELD, OpcodeGroup.INSN_FIELD);
-        addOpcode("PUTFIELD", PUTFIELD, OpcodeGroup.INSN_FIELD);
-        addOpcode("INVOKEVIRTUAL", INVOKEVIRTUAL, OpcodeGroup.INSN_METHOD);
-        addOpcode("INVOKESPECIAL", INVOKESPECIAL, OpcodeGroup.INSN_METHOD);
-        addOpcode("INVOKESTATIC", INVOKESTATIC, OpcodeGroup.INSN_METHOD);
-        addOpcode("INVOKEINTERFACE", INVOKEINTERFACE, OpcodeGroup.INSN_METHOD);
-        addOpcode("NEW", NEW, OpcodeGroup.INSN_TYPE);
-        addOpcode("NEWARRAY", NEWARRAY, OpcodeGroup.INSN_INT);
-        addOpcode("ANEWARRAY", ANEWARRAY, OpcodeGroup.INSN_TYPE);
-        addOpcode("ARRAYLENGTH", ARRAYLENGTH, OpcodeGroup.INSN);
-        addOpcode("ATHROW", ATHROW, OpcodeGroup.INSN);
-        addOpcode("CHECKCAST", CHECKCAST, OpcodeGroup.INSN_TYPE);
-        addOpcode("INSTANCEOF", INSTANCEOF, OpcodeGroup.INSN_TYPE);
-        addOpcode("MONITORENTER", MONITORENTER, OpcodeGroup.INSN);
-        addOpcode("MONITOREXIT", MONITOREXIT, OpcodeGroup.INSN);
-        addOpcode("MULTIANEWARRAY", MULTIANEWARRAY,
-                OpcodeGroup.INSN_MULTIANEWARRAY);
-        addOpcode("IFNULL", IFNULL, OpcodeGroup.INSN_JUMP);
-        addOpcode("IFNONNULL", IFNONNULL, OpcodeGroup.INSN_JUMP);
-    }
-
-    private static void addOpcode(String operStr, int oper, int group) {
-        OPCODES.put(operStr, new Opcode(oper, group));
-    }
-
-    static final HashMap<String, Integer> TYPES = new HashMap<String, Integer>();
-    static {
-        String[] types = SAXCodeAdapter.TYPES;
-        for (int i = 0; i < types.length; i++) {
-            TYPES.put(types[i], new Integer(i));
-        }
-    }
-
-    /**
-     * Constructs a new {@link ASMContentHandler ASMContentHandler} object.
-     * 
-     * @param cv
-     *            class visitor that will be called to reconstruct the classfile
-     *            using the XML stream.
-     */
-    public ASMContentHandler(final ClassVisitor cv) {
-        this.cv = cv;
-    }
-
-    /**
-     * Process notification of the start of an XML element being reached.
-     * 
-     * @param ns
-     *            - The Namespace URI, or the empty string if the element has no
-     *            Namespace URI or if Namespace processing is not being
-     *            performed.
-     * @param lName
-     *            - The local name (without prefix), or the empty string if
-     *            Namespace processing is not being performed.
-     * @param qName
-     *            - The qualified name (with prefix), or the empty string if
-     *            qualified names are not available.
-     * @param list
-     *            - The attributes attached to the element. If there are no
-     *            attributes, it shall be an empty Attributes object.
-     * @exception SAXException
-     *                if a parsing error is to be reported
-     */
-    @Override
-    public final void startElement(final String ns, final String lName,
-            final String qName, final Attributes list) throws SAXException {
-        // the actual element name is either in lName or qName, depending
-        // on whether the parser is namespace aware
-        String name = lName == null || lName.length() == 0 ? qName : lName;
-
-        // Compute the current matching rule
-        StringBuffer sb = new StringBuffer(match);
-        if (match.length() > 0) {
-            sb.append('/');
-        }
-        sb.append(name);
-        match = sb.toString();
-
-        // Fire "begin" events for all relevant rules
-        Rule r = (Rule) RULES.match(match);
-        if (r != null) {
-            r.begin(name, list);
-        }
-    }
-
-    /**
-     * Process notification of the end of an XML element being reached.
-     * 
-     * @param ns
-     *            - The Namespace URI, or the empty string if the element has no
-     *            Namespace URI or if Namespace processing is not being
-     *            performed.
-     * @param lName
-     *            - The local name (without prefix), or the empty string if
-     *            Namespace processing is not being performed.
-     * @param qName
-     *            - The qualified XML 1.0 name (with prefix), or the empty
-     *            string if qualified names are not available.
-     * 
-     * @exception SAXException
-     *                if a parsing error is to be reported
-     */
-    @Override
-    public final void endElement(final String ns, final String lName,
-            final String qName) throws SAXException {
-        // the actual element name is either in lName or qName, depending
-        // on whether the parser is namespace aware
-        String name = lName == null || lName.length() == 0 ? qName : lName;
-
-        // Fire "end" events for all relevant rules in reverse order
-        Rule r = (Rule) RULES.match(match);
-        if (r != null) {
-            r.end(name);
-        }
-
-        // Recover the previous match expression
-        int slash = match.lastIndexOf('/');
-        if (slash >= 0) {
-            match = match.substring(0, slash);
-        } else {
-            match = "";
-        }
-    }
-
-    /**
-     * Return the top object on the stack without removing it. If there are no
-     * objects on the stack, return <code>null</code>.
-     * 
-     * @return the top object on the stack without removing it.
-     */
-    final Object peek() {
-        int size = stack.size();
-        return size == 0 ? null : stack.get(size - 1);
-    }
-
-    /**
-     * Pop the top object off of the stack, and return it. If there are no
-     * objects on the stack, return <code>null</code>.
-     * 
-     * @return the top object off of the stack.
-     */
-    final Object pop() {
-        int size = stack.size();
-        return size == 0 ? null : stack.remove(size - 1);
-    }
-
-    /**
-     * Push a new object onto the top of the object stack.
-     * 
-     * @param object
-     *            The new object
-     */
-    final void push(final Object object) {
-        stack.add(object);
-    }
-
-    static final class RuleSet {
-
-        private final HashMap<String, Object> rules = new HashMap<String, Object>();
-
-        private final ArrayList<String> lpatterns = new ArrayList<String>();
-
-        private final ArrayList<String> rpatterns = new ArrayList<String>();
-
-        public void add(final String path, final Object rule) {
-            String pattern = path;
-            if (path.startsWith("*/")) {
-                pattern = path.substring(1);
-                lpatterns.add(pattern);
-            } else if (path.endsWith("/*")) {
-                pattern = path.substring(0, path.length() - 1);
-                rpatterns.add(pattern);
-            }
-            rules.put(pattern, rule);
-        }
-
-        public Object match(final String path) {
-            if (rules.containsKey(path)) {
-                return rules.get(path);
-            }
-
-            int n = path.lastIndexOf('/');
-            for (Iterator<String> it = lpatterns.iterator(); it.hasNext();) {
-                String pattern = it.next();
-                if (path.substring(n).endsWith(pattern)) {
-                    return rules.get(pattern);
-                }
-            }
-
-            for (Iterator<String> it = rpatterns.iterator(); it.hasNext();) {
-                String pattern = it.next();
-                if (path.startsWith(pattern)) {
-                    return rules.get(pattern);
-                }
-            }
-
-            return null;
-        }
-    }
-
-    /**
-     * Rule
-     */
-    protected abstract class Rule {
-
-        public void begin(final String name, final Attributes attrs)
-                throws SAXException {
-        }
-
-        public void end(final String name) {
-        }
-
-        protected final Object getValue(final String desc, final String val)
-                throws SAXException {
-            Object value = null;
-            if (val != null) {
-                if ("Ljava/lang/String;".equals(desc)) {
-                    value = decode(val);
-                } else if ("Ljava/lang/Integer;".equals(desc)
-                        || "I".equals(desc) || "S".equals(desc)
-                        || "B".equals(desc) || "C".equals(desc)
-                        || "Z".equals(desc)) {
-                    value = new Integer(val);
-
-                } else if ("Ljava/lang/Short;".equals(desc)) {
-                    value = new Short(val);
-
-                } else if ("Ljava/lang/Byte;".equals(desc)) {
-                    value = new Byte(val);
-
-                } else if ("Ljava/lang/Character;".equals(desc)) {
-                    value = new Character(decode(val).charAt(0));
-
-                } else if ("Ljava/lang/Boolean;".equals(desc)) {
-                    value = Boolean.valueOf(val);
-
-                } else if ("Ljava/lang/Long;".equals(desc) || "J".equals(desc)) {
-                    value = new Long(val);
-                } else if ("Ljava/lang/Float;".equals(desc) || "F".equals(desc)) {
-                    value = new Float(val);
-                } else if ("Ljava/lang/Double;".equals(desc)
-                        || "D".equals(desc)) {
-                    value = new Double(val);
-                } else if (Type.getDescriptor(Type.class).equals(desc)) {
-                    value = Type.getType(val);
-
-                } else if (Type.getDescriptor(Handle.class).equals(desc)) {
-                    value = decodeHandle(val);
-
-                } else {
-                    // TODO use of default toString().
-                    throw new SAXException("Invalid value:" + val + " desc:"
-                            + desc + " ctx:" + this);
-                }
-            }
-            return value;
-        }
-
-        Handle decodeHandle(final String val) throws SAXException {
-            try {
-                int dotIndex = val.indexOf('.');
-                int descIndex = val.indexOf('(', dotIndex + 1);
-                int tagIndex = val.lastIndexOf('(');
-
-                int tag = Integer.parseInt(val.substring(tagIndex + 1,
-                        val.length() - 1));
-                String owner = val.substring(0, dotIndex);
-                String name = val.substring(dotIndex + 1, descIndex);
-                String desc = val.substring(descIndex, tagIndex - 1);
-                return new Handle(tag, owner, name, desc);
-
-            } catch (RuntimeException e) {
-                throw new SAXException("Malformed handle " + val, e);
-            }
-        }
-
-        private final String decode(final String val) throws SAXException {
-            StringBuffer sb = new StringBuffer(val.length());
-            try {
-                int n = 0;
-                while (n < val.length()) {
-                    char c = val.charAt(n);
-                    if (c == '\\') {
-                        n++;
-                        c = val.charAt(n);
-                        if (c == '\\') {
-                            sb.append('\\');
-                        } else {
-                            n++; // skip 'u'
-                            sb.append((char) Integer.parseInt(
-                                    val.substring(n, n + 4), 16));
-                            n += 3;
-                        }
-                    } else {
-                        sb.append(c);
-                    }
-                    n++;
-                }
-
-            } catch (RuntimeException ex) {
-                throw new SAXException(ex);
-            }
-            return sb.toString();
-        }
-
-        protected final Label getLabel(final Object label) {
-            Label lbl = labels.get(label);
-            if (lbl == null) {
-                lbl = new Label();
-                labels.put(label, lbl);
-            }
-            return lbl;
-        }
-
-        // TODO verify move to stack
-        protected final MethodVisitor getCodeVisitor() {
-            return (MethodVisitor) peek();
-        }
-
-        protected final int getAccess(final String s) {
-            int access = 0;
-            if (s.indexOf("public") != -1) {
-                access |= ACC_PUBLIC;
-            }
-            if (s.indexOf("private") != -1) {
-                access |= ACC_PRIVATE;
-            }
-            if (s.indexOf("protected") != -1) {
-                access |= ACC_PROTECTED;
-            }
-            if (s.indexOf("static") != -1) {
-                access |= ACC_STATIC;
-            }
-            if (s.indexOf("final") != -1) {
-                access |= ACC_FINAL;
-            }
-            if (s.indexOf("super") != -1) {
-                access |= ACC_SUPER;
-            }
-            if (s.indexOf("synchronized") != -1) {
-                access |= ACC_SYNCHRONIZED;
-            }
-            if (s.indexOf("volatile") != -1) {
-                access |= ACC_VOLATILE;
-            }
-            if (s.indexOf("bridge") != -1) {
-                access |= ACC_BRIDGE;
-            }
-            if (s.indexOf("varargs") != -1) {
-                access |= ACC_VARARGS;
-            }
-            if (s.indexOf("transient") != -1) {
-                access |= ACC_TRANSIENT;
-            }
-            if (s.indexOf("native") != -1) {
-                access |= ACC_NATIVE;
-            }
-            if (s.indexOf("interface") != -1) {
-                access |= ACC_INTERFACE;
-            }
-            if (s.indexOf("abstract") != -1) {
-                access |= ACC_ABSTRACT;
-            }
-            if (s.indexOf("strict") != -1) {
-                access |= ACC_STRICT;
-            }
-            if (s.indexOf("synthetic") != -1) {
-                access |= ACC_SYNTHETIC;
-            }
-            if (s.indexOf("annotation") != -1) {
-                access |= ACC_ANNOTATION;
-            }
-            if (s.indexOf("enum") != -1) {
-                access |= ACC_ENUM;
-            }
-            if (s.indexOf("deprecated") != -1) {
-                access |= ACC_DEPRECATED;
-            }
-            return access;
-        }
-    }
-
-    /**
-     * ClassRule
-     */
-    final class ClassRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            int major = Integer.parseInt(attrs.getValue("major"));
-            int minor = Integer.parseInt(attrs.getValue("minor"));
-            HashMap<String, Object> vals = new HashMap<String, Object>();
-            vals.put("version", new Integer(minor << 16 | major));
-            vals.put("access", attrs.getValue("access"));
-            vals.put("name", attrs.getValue("name"));
-            vals.put("parent", attrs.getValue("parent"));
-            vals.put("source", attrs.getValue("source"));
-            vals.put("signature", attrs.getValue("signature"));
-            vals.put("interfaces", new ArrayList<String>());
-            push(vals);
-            // values will be extracted in InterfacesRule.end();
-        }
-    }
-
-    final class SourceRule extends Rule {
-
-        @Override
-        public void begin(final String name, final Attributes attrs) {
-            String file = attrs.getValue("file");
-            String debug = attrs.getValue("debug");
-            cv.visitSource(file, debug);
-        }
-    }
-
-    /**
-     * InterfaceRule
-     */
-    final class InterfaceRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            ((ArrayList<String>) ((HashMap<?, ?>) peek()).get("interfaces"))
-                    .add(attrs.getValue("name"));
-        }
-    }
-
-    /**
-     * InterfacesRule
-     */
-    final class InterfacesRule extends Rule {
-
-        @Override
-        public final void end(final String element) {
-            HashMap<?, ?> vals = (HashMap<?, ?>) pop();
-            int version = ((Integer) vals.get("version")).intValue();
-            int access = getAccess((String) vals.get("access"));
-            String name = (String) vals.get("name");
-            String signature = (String) vals.get("signature");
-            String parent = (String) vals.get("parent");
-            ArrayList<?> infs = (ArrayList<?>) vals.get("interfaces");
-            String[] interfaces = infs.toArray(new String[infs.size()]);
-            cv.visit(version, access, name, signature, parent, interfaces);
-            push(cv);
-        }
-    }
-
-    /**
-     * OuterClassRule
-     */
-    final class OuterClassRule extends Rule {
-
-        @Override
-        public final void begin(final String element, final Attributes attrs) {
-            String owner = attrs.getValue("owner");
-            String name = attrs.getValue("name");
-            String desc = attrs.getValue("desc");
-            cv.visitOuterClass(owner, name, desc);
-        }
-    }
-
-    /**
-     * InnerClassRule
-     */
-    final class InnerClassRule extends Rule {
-
-        @Override
-        public final void begin(final String element, final Attributes attrs) {
-            int access = getAccess(attrs.getValue("access"));
-            String name = attrs.getValue("name");
-            String outerName = attrs.getValue("outerName");
-            String innerName = attrs.getValue("innerName");
-            cv.visitInnerClass(name, outerName, innerName, access);
-        }
-    }
-
-    /**
-     * FieldRule
-     */
-    final class FieldRule extends Rule {
-
-        @Override
-        public final void begin(final String element, final Attributes attrs)
-                throws SAXException {
-            int access = getAccess(attrs.getValue("access"));
-            String name = attrs.getValue("name");
-            String signature = attrs.getValue("signature");
-            String desc = attrs.getValue("desc");
-            Object value = getValue(desc, attrs.getValue("value"));
-            push(cv.visitField(access, name, desc, signature, value));
-        }
-
-        @Override
-        public void end(final String name) {
-            ((FieldVisitor) pop()).visitEnd();
-        }
-    }
-
-    /**
-     * MethodRule
-     */
-    final class MethodRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            labels = new HashMap<Object, Label>();
-            HashMap<String, Object> vals = new HashMap<String, Object>();
-            vals.put("access", attrs.getValue("access"));
-            vals.put("name", attrs.getValue("name"));
-            vals.put("desc", attrs.getValue("desc"));
-            vals.put("signature", attrs.getValue("signature"));
-            vals.put("exceptions", new ArrayList<String>());
-            push(vals);
-            // values will be extracted in ExceptionsRule.end();
-        }
-
-        @Override
-        public final void end(final String name) {
-            ((MethodVisitor) pop()).visitEnd();
-            labels = null;
-        }
-    }
-
-    /**
-     * ExceptionRule
-     */
-    final class ExceptionRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            ((ArrayList<String>) ((HashMap<?, ?>) peek()).get("exceptions"))
-                    .add(attrs.getValue("name"));
-        }
-    }
-
-    /**
-     * ExceptionsRule
-     */
-    final class ExceptionsRule extends Rule {
-
-        @Override
-        public final void end(final String element) {
-            HashMap<?, ?> vals = (HashMap<?, ?>) pop();
-            int access = getAccess((String) vals.get("access"));
-            String name = (String) vals.get("name");
-            String desc = (String) vals.get("desc");
-            String signature = (String) vals.get("signature");
-            ArrayList<?> excs = (ArrayList<?>) vals.get("exceptions");
-            String[] exceptions = excs.toArray(new String[excs.size()]);
-
-            push(cv.visitMethod(access, name, desc, signature, exceptions));
-        }
-    }
-
-    /**
-     * TableSwitchRule
-     */
-    final class TableSwitchRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            HashMap<String, Object> vals = new HashMap<String, Object>();
-            vals.put("min", attrs.getValue("min"));
-            vals.put("max", attrs.getValue("max"));
-            vals.put("dflt", attrs.getValue("dflt"));
-            vals.put("labels", new ArrayList<String>());
-            push(vals);
-        }
-
-        @Override
-        public final void end(final String name) {
-            HashMap<?, ?> vals = (HashMap<?, ?>) pop();
-            int min = Integer.parseInt((String) vals.get("min"));
-            int max = Integer.parseInt((String) vals.get("max"));
-            Label dflt = getLabel(vals.get("dflt"));
-            ArrayList<?> lbls = (ArrayList<?>) vals.get("labels");
-            Label[] labels = lbls.toArray(new Label[lbls.size()]);
-            getCodeVisitor().visitTableSwitchInsn(min, max, dflt, labels);
-        }
-    }
-
-    /**
-     * TableSwitchLabelRule
-     */
-    final class TableSwitchLabelRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            ((ArrayList<Label>) ((HashMap<?, ?>) peek()).get("labels"))
-                    .add(getLabel(attrs.getValue("name")));
-        }
-    }
-
-    /**
-     * LookupSwitchRule
-     */
-    final class LookupSwitchRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            HashMap<String, Object> vals = new HashMap<String, Object>();
-            vals.put("dflt", attrs.getValue("dflt"));
-            vals.put("labels", new ArrayList<Label>());
-            vals.put("keys", new ArrayList<String>());
-            push(vals);
-        }
-
-        @Override
-        public final void end(final String name) {
-            HashMap<?, ?> vals = (HashMap<?, ?>) pop();
-            Label dflt = getLabel(vals.get("dflt"));
-            ArrayList<String> keyList = (ArrayList<String>) vals.get("keys");
-            ArrayList<?> lbls = (ArrayList<?>) vals.get("labels");
-            Label[] labels = lbls.toArray(new Label[lbls.size()]);
-            int[] keys = new int[keyList.size()];
-            for (int i = 0; i < keys.length; i++) {
-                keys[i] = Integer.parseInt(keyList.get(i));
-            }
-            getCodeVisitor().visitLookupSwitchInsn(dflt, keys, labels);
-        }
-    }
-
-    /**
-     * LookupSwitchLabelRule
-     */
-    final class LookupSwitchLabelRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            HashMap<?, ?> vals = (HashMap<?, ?>) peek();
-            ((ArrayList<Label>) vals.get("labels")).add(getLabel(attrs
-                    .getValue("name")));
-            ((ArrayList<String>) vals.get("keys")).add(attrs.getValue("key"));
-        }
-    }
-
-    /**
-     * FrameRule
-     */
-    final class FrameRule extends Rule {
-
-        @Override
-        public void begin(final String name, final Attributes attrs) {
-            HashMap<String, Object> typeLists = new HashMap<String, Object>();
-            typeLists.put("local", new ArrayList<Object>());
-            typeLists.put("stack", new ArrayList<Object>());
-            push(attrs.getValue("type"));
-            push(attrs.getValue("count") == null ? "0" : attrs
-                    .getValue("count"));
-            push(typeLists);
-        }
-
-        @Override
-        public void end(final String name) {
-            HashMap<?, ?> typeLists = (HashMap<?, ?>) pop();
-            ArrayList<?> locals = (ArrayList<?>) typeLists.get("local");
-            int nLocal = locals.size();
-            Object[] local = locals.toArray();
-            ArrayList<?> stacks = (ArrayList<?>) typeLists.get("stack");
-            int nStack = stacks.size();
-            Object[] stack = stacks.toArray();
-            String count = (String) pop();
-            String type = (String) pop();
-            if ("NEW".equals(type)) {
-                getCodeVisitor()
-                        .visitFrame(F_NEW, nLocal, local, nStack, stack);
-            } else if ("FULL".equals(type)) {
-                getCodeVisitor().visitFrame(F_FULL, nLocal, local, nStack,
-                        stack);
-            } else if ("APPEND".equals(type)) {
-                getCodeVisitor().visitFrame(F_APPEND, nLocal, local, 0, null);
-            } else if ("CHOP".equals(type)) {
-                getCodeVisitor().visitFrame(F_CHOP, Integer.parseInt(count),
-                        null, 0, null);
-            } else if ("SAME".equals(type)) {
-                getCodeVisitor().visitFrame(F_SAME, 0, null, 0, null);
-            } else if ("SAME1".equals(type)) {
-                getCodeVisitor().visitFrame(F_SAME1, 0, null, nStack, stack);
-            }
-        }
-    }
-
-    final class FrameTypeRule extends Rule {
-
-        @Override
-        public void begin(final String name, final Attributes attrs) {
-            ArrayList<Object> types = (ArrayList<Object>) ((HashMap<?, ?>) peek())
-                    .get(name);
-            String type = attrs.getValue("type");
-            if ("uninitialized".equals(type)) {
-                types.add(getLabel(attrs.getValue("label")));
-            } else {
-                Integer t = TYPES.get(type);
-                if (t == null) {
-                    types.add(type);
-                } else {
-                    types.add(t);
-                }
-            }
-        }
-    }
-
-    /**
-     * LabelRule
-     */
-    final class LabelRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            getCodeVisitor().visitLabel(getLabel(attrs.getValue("name")));
-        }
-    }
-
-    /**
-     * TryCatchRule
-     */
-    final class TryCatchRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            Label start = getLabel(attrs.getValue("start"));
-            Label end = getLabel(attrs.getValue("end"));
-            Label handler = getLabel(attrs.getValue("handler"));
-            String type = attrs.getValue("type");
-            getCodeVisitor().visitTryCatchBlock(start, end, handler, type);
-        }
-    }
-
-    /**
-     * LineNumberRule
-     */
-    final class LineNumberRule extends Rule {
-
-        @Override
-        public final void begin(final String name, final Attributes attrs) {
-            int line = Integer.parseInt(attrs.getValue("line"));
-            Label start = getLabel(attrs.getValue("start"));
-            getCodeVisitor().visitLineNumber(line, start);
-        }
-    }
-
-    /**
-     * LocalVarRule
-     */
-    final class LocalVarRule extends Rule {
-
-        @Override
-        public final void begin(final String element, final Attributes attrs) {
-            String name = attrs.getValue("name");
-            String desc = attrs.getValue("desc");
-            String signature = attrs.getValue("signature");
-            Label start = getLabel(attrs.getValue("start"));
-            Label end = getLabel(attrs.getValue("end"));
-            int var = Integer.parseInt(attrs.getValue("var"));
-            getCodeVisitor().visitLocalVariable(name, desc, signature, start,
-                    end, var);
-        }
-    }
-
-    /**
-     * InvokeDynamicRule
-     */
-    final class InvokeDynamicRule extends Rule {
-        @Override
-        public final void begin(final String element, final Attributes attrs)
-                throws SAXException {
-            push(attrs.getValue("name"));
-            push(attrs.getValue("desc"));
-            push(decodeHandle(attrs.getValue("bsm")));
-            push(new ArrayList<Object>());
-        }
-
-        @Override
-        public final void end(final String element) {
-            ArrayList<?> bsmArgs = (ArrayList<?>) pop();
-            Handle bsm = (Handle) pop();
-            String desc = (String) pop();
-            String name = (String) pop();
-            getCodeVisitor().visitInvokeDynamicInsn(name, desc, bsm,
-                    bsmArgs.toArray());
-        }
-    }
-
-    /**
-     * InvokeDynamicBsmArgumentsRule
-     */
-    final class InvokeDynamicBsmArgumentsRule extends Rule {
-        @Override
-        public final void begin(final String element, final Attributes attrs)
-                throws SAXException {
-            ArrayList<Object> bsmArgs = (ArrayList<Object>) peek();
-            bsmArgs.add(getValue(attrs.getValue("desc"), attrs.getValue("cst")));
-        }
-    }
-
-    /**
-     * OpcodesRule
-     */
-    final class OpcodesRule extends Rule {
-
-        // public boolean match( String match, String element) {
-        // return match.startsWith( path) && OPCODES.containsKey( element);
-        // }
-
-        @Override
-        public final void begin(final String element, final Attributes attrs)
-                throws SAXException {
-            Opcode o = OPCODES.get(element);
-            if (o == null) {
-                throw new SAXException("Invalid element: " + element + " at "
-                        + match);
-            }
-
-            switch (o.type) {
-            case OpcodeGroup.INSN:
-                getCodeVisitor().visitInsn(o.opcode);
-                break;
-
-            case OpcodeGroup.INSN_FIELD:
-                getCodeVisitor().visitFieldInsn(o.opcode,
-                        attrs.getValue("owner"), attrs.getValue("name"),
-                        attrs.getValue("desc"));
-                break;
-
-            case OpcodeGroup.INSN_INT:
-                getCodeVisitor().visitIntInsn(o.opcode,
-                        Integer.parseInt(attrs.getValue("value")));
-                break;
-
-            case OpcodeGroup.INSN_JUMP:
-                getCodeVisitor().visitJumpInsn(o.opcode,
-                        getLabel(attrs.getValue("label")));
-                break;
-
-            case OpcodeGroup.INSN_METHOD:
-                getCodeVisitor().visitMethodInsn(o.opcode,
-                        attrs.getValue("owner"), attrs.getValue("name"),
-                        attrs.getValue("desc"));
-                break;
-
-            case OpcodeGroup.INSN_TYPE:
-                getCodeVisitor()
-                        .visitTypeInsn(o.opcode, attrs.getValue("desc"));
-                break;
-
-            case OpcodeGroup.INSN_VAR:
-                getCodeVisitor().visitVarInsn(o.opcode,
-                        Integer.parseInt(attrs.getValue("var")));
-                break;
-
-            case OpcodeGroup.INSN_IINC:
-                getCodeVisitor().visitIincInsn(
-                        Integer.parseInt(attrs.getValue("var")),
-                        Integer.parseInt(attrs.getValue("inc")));
-                break;
-
-            case OpcodeGroup.INSN_LDC:
-                getCodeVisitor()
-                        .visitLdcInsn(
-                                getValue(attrs.getValue("desc"),
-                                        attrs.getValue("cst")));
-                break;
-
-            case OpcodeGroup.INSN_MULTIANEWARRAY:
-                getCodeVisitor().visitMultiANewArrayInsn(
-                        attrs.getValue("desc"),
-                        Integer.parseInt(attrs.getValue("dims")));
-                break;
-
-            default:
-                throw new Error("Internal error");
-
-            }
-        }
-    }
-
-    /**
-     * MaxRule
-     */
-    final class MaxRule extends Rule {
-
-        @Override
-        public final void begin(final String element, final Attributes attrs) {
-            int maxStack = Integer.parseInt(attrs.getValue("maxStack"));
-            int maxLocals = Integer.parseInt(attrs.getValue("maxLocals"));
-            getCodeVisitor().visitMaxs(maxStack, maxLocals);
-        }
-    }
-
-    final class AnnotationRule extends Rule {
-
-        @Override
-        public void begin(final String name, final Attributes attrs) {
-            String desc = attrs.getValue("desc");
-            boolean visible = Boolean.valueOf(attrs.getValue("visible"))
-                    .booleanValue();
-
-            Object v = peek();
-            if (v instanceof ClassVisitor) {
-                push(((ClassVisitor) v).visitAnnotation(desc, visible));
-            } else if (v instanceof FieldVisitor) {
-                push(((FieldVisitor) v).visitAnnotation(desc, visible));
-            } else if (v instanceof MethodVisitor) {
-                push(((MethodVisitor) v).visitAnnotation(desc, visible));
-            }
-        }
-
-        @Override
-        public void end(final String name) {
-            AnnotationVisitor av = (AnnotationVisitor) pop();
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-    }
-
-    final class AnnotationParameterRule extends Rule {
-
-        @Override
-        public void begin(final String name, final Attributes attrs) {
-            int parameter = Integer.parseInt(attrs.getValue("parameter"));
-            String desc = attrs.getValue("desc");
-            boolean visible = Boolean.valueOf(attrs.getValue("visible"))
-                    .booleanValue();
-
-            push(((MethodVisitor) peek()).visitParameterAnnotation(parameter,
-                    desc, visible));
-        }
-
-        @Override
-        public void end(final String name) {
-            AnnotationVisitor av = (AnnotationVisitor) pop();
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-    }
-
-    final class AnnotationValueRule extends Rule {
-
-        @Override
-        public void begin(final String nm, final Attributes attrs)
-                throws SAXException {
-            AnnotationVisitor av = (AnnotationVisitor) peek();
-            if (av != null) {
-                av.visit(
-                        attrs.getValue("name"),
-                        getValue(attrs.getValue("desc"),
-                                attrs.getValue("value")));
-            }
-        }
-    }
-
-    final class AnnotationValueEnumRule extends Rule {
-
-        @Override
-        public void begin(final String nm, final Attributes attrs) {
-            AnnotationVisitor av = (AnnotationVisitor) peek();
-            if (av != null) {
-                av.visitEnum(attrs.getValue("name"), attrs.getValue("desc"),
-                        attrs.getValue("value"));
-            }
-        }
-    }
-
-    final class AnnotationValueAnnotationRule extends Rule {
-
-        @Override
-        public void begin(final String nm, final Attributes attrs) {
-            AnnotationVisitor av = (AnnotationVisitor) peek();
-            push(av == null ? null : av.visitAnnotation(attrs.getValue("name"),
-                    attrs.getValue("desc")));
-        }
-
-        @Override
-        public void end(final String name) {
-            AnnotationVisitor av = (AnnotationVisitor) pop();
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-    }
-
-    final class AnnotationValueArrayRule extends Rule {
-
-        @Override
-        public void begin(final String nm, final Attributes attrs) {
-            AnnotationVisitor av = (AnnotationVisitor) peek();
-            push(av == null ? null : av.visitArray(attrs.getValue("name")));
-        }
-
-        @Override
-        public void end(final String name) {
-            AnnotationVisitor av = (AnnotationVisitor) pop();
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-    }
-
-    final class AnnotationDefaultRule extends Rule {
-
-        @Override
-        public void begin(final String nm, final Attributes attrs) {
-            MethodVisitor av = (MethodVisitor) peek();
-            push(av == null ? null : av.visitAnnotationDefault());
-        }
-
-        @Override
-        public void end(final String name) {
-            AnnotationVisitor av = (AnnotationVisitor) pop();
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-    }
-
-    /**
-     * Opcode
-     */
-    static final class Opcode {
-
-        public final int opcode;
-
-        public final int type;
-
-        Opcode(final int opcode, final int type) {
-            this.opcode = opcode;
-            this.type = type;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/xml/Processor.java b/asm4/src/org/objectweb/asm/xml/Processor.java
deleted file mode 100644
index 24f0ab0..0000000
--- a/asm4/src/org/objectweb/asm/xml/Processor.java
+++ /dev/null
@@ -1,1044 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamSource;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
-import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-/**
- * Processor is a command line tool that can be used for bytecode waving
- * directed by XSL transformation.
- * <p>
- * In order to use a concrete XSLT engine, system property
- * <tt>javax.xml.transform.TransformerFactory</tt> must be set to one of the
- * following values.
- * 
- * <blockquote>
- * <table border="1" cellspacing="0" cellpadding="3">
- * <tr>
- * <td>jd.xslt</td>
- * <td>jd.xml.xslt.trax.TransformerFactoryImpl</td>
- * </tr>
- * 
- * <tr>
- * <td>Saxon</td>
- * <td>net.sf.saxon.TransformerFactoryImpl</td>
- * </tr>
- * 
- * <tr>
- * <td>Caucho</td>
- * <td>com.caucho.xsl.Xsl</td>
- * </tr>
- * 
- * <tr>
- * <td>Xalan interpeter</td>
- * <td>org.apache.xalan.processor.TransformerFactory</td>
- * </tr>
- * 
- * <tr>
- * <td>Xalan xsltc</td>
- * <td>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</td>
- * </tr>
- * </table>
- * </blockquote>
- * 
- * @author Eugene Kuleshov
- */
-public class Processor {
-
-    public static final int BYTECODE = 1;
-
-    public static final int MULTI_XML = 2;
-
-    public static final int SINGLE_XML = 3;
-
-    private static final String SINGLE_XML_NAME = "classes.xml";
-
-    private final int inRepresentation;
-
-    private final int outRepresentation;
-
-    private final InputStream input;
-
-    private final OutputStream output;
-
-    private final Source xslt;
-
-    private int n = 0;
-
-    public Processor(final int inRepresenation, final int outRepresentation,
-            final InputStream input, final OutputStream output,
-            final Source xslt) {
-        this.inRepresentation = inRepresenation;
-        this.outRepresentation = outRepresentation;
-        this.input = input;
-        this.output = output;
-        this.xslt = xslt;
-    }
-
-    public int process() throws TransformerException, IOException, SAXException {
-        ZipInputStream zis = new ZipInputStream(input);
-        final ZipOutputStream zos = new ZipOutputStream(output);
-        final OutputStreamWriter osw = new OutputStreamWriter(zos);
-
-        Thread.currentThread().setContextClassLoader(
-                getClass().getClassLoader());
-
-        TransformerFactory tf = TransformerFactory.newInstance();
-        if (!tf.getFeature(SAXSource.FEATURE)
-                || !tf.getFeature(SAXResult.FEATURE)) {
-            return 0;
-        }
-
-        SAXTransformerFactory saxtf = (SAXTransformerFactory) tf;
-        Templates templates = null;
-        if (xslt != null) {
-            templates = saxtf.newTemplates(xslt);
-        }
-
-        // configuring outHandlerFactory
-        // ///////////////////////////////////////////////////////
-
-        EntryElement entryElement = getEntryElement(zos);
-
-        ContentHandler outDocHandler = null;
-        switch (outRepresentation) {
-        case BYTECODE:
-            outDocHandler = new OutputSlicingHandler(
-                    new ASMContentHandlerFactory(zos), entryElement, false);
-            break;
-
-        case MULTI_XML:
-            outDocHandler = new OutputSlicingHandler(new SAXWriterFactory(osw,
-                    true), entryElement, true);
-            break;
-
-        case SINGLE_XML:
-            ZipEntry outputEntry = new ZipEntry(SINGLE_XML_NAME);
-            zos.putNextEntry(outputEntry);
-            outDocHandler = new SAXWriter(osw, false);
-            break;
-
-        }
-
-        // configuring inputDocHandlerFactory
-        // /////////////////////////////////////////////////
-        ContentHandler inDocHandler;
-        if (templates == null) {
-            inDocHandler = outDocHandler;
-        } else {
-            inDocHandler = new InputSlicingHandler("class", outDocHandler,
-                    new TransformerHandlerFactory(saxtf, templates,
-                            outDocHandler));
-        }
-        ContentHandlerFactory inDocHandlerFactory = new SubdocumentHandlerFactory(
-                inDocHandler);
-
-        if (inDocHandler != null && inRepresentation != SINGLE_XML) {
-            inDocHandler.startDocument();
-            inDocHandler.startElement("", "classes", "classes",
-                    new AttributesImpl());
-        }
-
-        int i = 0;
-        ZipEntry ze;
-        while ((ze = zis.getNextEntry()) != null) {
-            update(ze.getName(), n++);
-            if (isClassEntry(ze)) {
-                processEntry(zis, ze, inDocHandlerFactory);
-            } else {
-                OutputStream os = entryElement.openEntry(getName(ze));
-                copyEntry(zis, os);
-                entryElement.closeEntry();
-            }
-
-            i++;
-        }
-
-        if (inDocHandler != null && inRepresentation != SINGLE_XML) {
-            inDocHandler.endElement("", "classes", "classes");
-            inDocHandler.endDocument();
-        }
-
-        if (outRepresentation == SINGLE_XML) {
-            zos.closeEntry();
-        }
-        zos.flush();
-        zos.close();
-
-        return i;
-    }
-
-    private void copyEntry(final InputStream is, final OutputStream os)
-            throws IOException {
-        if (outRepresentation == SINGLE_XML) {
-            return;
-        }
-
-        byte[] buff = new byte[2048];
-        int i;
-        while ((i = is.read(buff)) != -1) {
-            os.write(buff, 0, i);
-        }
-    }
-
-    private boolean isClassEntry(final ZipEntry ze) {
-        String name = ze.getName();
-        return inRepresentation == SINGLE_XML && name.equals(SINGLE_XML_NAME)
-                || name.endsWith(".class") || name.endsWith(".class.xml");
-    }
-
-    private void processEntry(final ZipInputStream zis, final ZipEntry ze,
-            final ContentHandlerFactory handlerFactory) {
-        ContentHandler handler = handlerFactory.createContentHandler();
-        try {
-
-            // if (CODE2ASM.equals(command)) { // read bytecode and process it
-            // // with TraceClassVisitor
-            // ClassReader cr = new ClassReader(readEntry(zis, ze));
-            // cr.accept(new TraceClassVisitor(null, new PrintWriter(os)),
-            // false);
-            // }
-
-            boolean singleInputDocument = inRepresentation == SINGLE_XML;
-            if (inRepresentation == BYTECODE) { // read bytecode and process it
-                // with handler
-                ClassReader cr = new ClassReader(readEntry(zis, ze));
-                cr.accept(new SAXClassAdapter(handler, singleInputDocument), 0);
-
-            } else { // read XML and process it with handler
-                XMLReader reader = XMLReaderFactory.createXMLReader();
-                reader.setContentHandler(handler);
-                reader.parse(new InputSource(
-                        singleInputDocument ? (InputStream) new ProtectedInputStream(
-                                zis) : new ByteArrayInputStream(readEntry(zis,
-                                ze))));
-
-            }
-        } catch (Exception ex) {
-            update(ze.getName(), 0);
-            update(ex, 0);
-        }
-    }
-
-    private EntryElement getEntryElement(final ZipOutputStream zos) {
-        if (outRepresentation == SINGLE_XML) {
-            return new SingleDocElement(zos);
-        }
-        return new ZipEntryElement(zos);
-    }
-
-    // private ContentHandlerFactory getHandlerFactory(
-    // OutputStream os,
-    // SAXTransformerFactory saxtf,
-    // Templates templates)
-    // {
-    // ContentHandlerFactory factory = null;
-    // if (templates == null) {
-    // if (outputRepresentation == BYTECODE) { // factory used to write
-    // // bytecode
-    // factory = new ASMContentHandlerFactory(os, computeMax);
-    // } else { // factory used to write XML
-    // factory = new SAXWriterFactory(os, true);
-    // }
-    // } else {
-    // if (outputRepresentation == BYTECODE) { // factory used to transform
-    // // and then write bytecode
-    // factory = new ASMTransformerHandlerFactory(saxtf,
-    // templates,
-    // os,
-    // computeMax);
-    // } else { // factory used to transformand then write XML
-    // factory = new TransformerHandlerFactory(saxtf,
-    // templates,
-    // os,
-    // outputRepresentation == SINGLE_XML);
-    // }
-    // }
-    // return factory;
-    // }
-
-    private String getName(final ZipEntry ze) {
-        String name = ze.getName();
-        if (isClassEntry(ze)) {
-            if (inRepresentation != BYTECODE && outRepresentation == BYTECODE) {
-                name = name.substring(0, name.length() - 4); // .class.xml to
-                // .class
-            } else if (inRepresentation == BYTECODE
-                    && outRepresentation != BYTECODE) {
-                name += ".xml"; // .class to .class.xml
-            }
-            // } else if( CODE2ASM.equals( command)) {
-            // name = name.substring( 0, name.length()-6).concat( ".asm");
-        }
-        return name;
-    }
-
-    private static byte[] readEntry(final InputStream zis, final ZipEntry ze)
-            throws IOException {
-        long size = ze.getSize();
-        if (size > -1) {
-            byte[] buff = new byte[(int) size];
-            int k = 0;
-            int n;
-            while ((n = zis.read(buff, k, buff.length - k)) > 0) {
-                k += n;
-            }
-            return buff;
-        }
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        byte[] buff = new byte[4096];
-        int i;
-        while ((i = zis.read(buff)) != -1) {
-            bos.write(buff, 0, i);
-        }
-        return bos.toByteArray();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
-     */
-    protected void update(final Object arg, final int n) {
-        if (arg instanceof Throwable) {
-            ((Throwable) arg).printStackTrace();
-        } else {
-            if (n % 100 == 0) {
-                System.err.println(n + " " + arg);
-            }
-        }
-    }
-
-    public static void main(final String[] args) throws Exception {
-        if (args.length < 2) {
-            showUsage();
-            return;
-        }
-
-        int inRepresentation = getRepresentation(args[0]);
-        int outRepresentation = getRepresentation(args[1]);
-
-        InputStream is = System.in;
-        OutputStream os = new BufferedOutputStream(System.out);
-
-        Source xslt = null;
-        // boolean computeMax = true;
-
-        for (int i = 2; i < args.length; i++) {
-            if ("-in".equals(args[i])) {
-                is = new FileInputStream(args[++i]);
-
-            } else if ("-out".equals(args[i])) {
-                os = new BufferedOutputStream(new FileOutputStream(args[++i]));
-
-            } else if ("-xslt".equals(args[i])) {
-                xslt = new StreamSource(new FileInputStream(args[++i]));
-
-                // } else if( "-computemax".equals( args[ i].toLowerCase())) {
-                // computeMax = true;
-
-            } else {
-                showUsage();
-                return;
-
-            }
-        }
-
-        if (inRepresentation == 0 || outRepresentation == 0) {
-            showUsage();
-            return;
-        }
-
-        Processor m = new Processor(inRepresentation, outRepresentation, is,
-                os, xslt);
-
-        long l1 = System.currentTimeMillis();
-        int n = m.process();
-        long l2 = System.currentTimeMillis();
-        System.err.println(n);
-        System.err.println((l2 - l1) + "ms  " + 1000f * n / (l2 - l1)
-                + " resources/sec");
-    }
-
-    private static int getRepresentation(final String s) {
-        if ("code".equals(s)) {
-            return BYTECODE;
-        } else if ("xml".equals(s)) {
-            return MULTI_XML;
-        } else if ("singlexml".equals(s)) {
-            return SINGLE_XML;
-        }
-        return 0;
-    }
-
-    private static void showUsage() {
-        System.err
-                .println("Usage: Main <in format> <out format> [-in <input jar>] [-out <output jar>] [-xslt <xslt fiel>]");
-        System.err
-                .println("  when -in or -out is omitted sysin and sysout would be used");
-        System.err
-                .println("  <in format> and <out format> - code | xml | singlexml");
-    }
-
-    /**
-     * IputStream wrapper class used to protect input streams from being closed
-     * by some stupid XML parsers.
-     */
-    private static final class ProtectedInputStream extends InputStream {
-        private final InputStream is;
-
-        ProtectedInputStream(final InputStream is) {
-            this.is = is;
-        }
-
-        @Override
-        public final void close() throws IOException {
-        }
-
-        @Override
-        public final int read() throws IOException {
-            return is.read();
-        }
-
-        @Override
-        public final int read(final byte[] b, final int off, final int len)
-                throws IOException {
-            return is.read(b, off, len);
-        }
-
-        @Override
-        public final int available() throws IOException {
-            return is.available();
-        }
-    }
-
-    /**
-     * A {@link ContentHandlerFactory ContentHandlerFactory} is used to create
-     * {@link org.xml.sax.ContentHandler ContentHandler} instances for concrete
-     * context.
-     */
-    private static interface ContentHandlerFactory {
-
-        /**
-         * Creates an instance of the content handler.
-         * 
-         * @return content handler
-         */
-        ContentHandler createContentHandler();
-
-    }
-
-    /**
-     * SAXWriterFactory
-     */
-    private static final class SAXWriterFactory implements
-            ContentHandlerFactory {
-        private final Writer w;
-
-        private final boolean optimizeEmptyElements;
-
-        SAXWriterFactory(final Writer w, final boolean optimizeEmptyElements) {
-            this.w = w;
-            this.optimizeEmptyElements = optimizeEmptyElements;
-        }
-
-        public final ContentHandler createContentHandler() {
-            return new SAXWriter(w, optimizeEmptyElements);
-        }
-
-    }
-
-    /**
-     * ASMContentHandlerFactory
-     */
-    private static final class ASMContentHandlerFactory implements
-            ContentHandlerFactory {
-        final OutputStream os;
-
-        ASMContentHandlerFactory(final OutputStream os) {
-            this.os = os;
-        }
-
-        public final ContentHandler createContentHandler() {
-            final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-            return new ASMContentHandler(cw) {
-                @Override
-                public void endDocument() throws SAXException {
-                    try {
-                        os.write(cw.toByteArray());
-                    } catch (IOException e) {
-                        throw new SAXException(e);
-                    }
-                }
-            };
-        }
-
-    }
-
-    /**
-     * TransformerHandlerFactory
-     */
-    private static final class TransformerHandlerFactory implements
-            ContentHandlerFactory {
-        private SAXTransformerFactory saxtf;
-
-        private final Templates templates;
-
-        private ContentHandler outputHandler;
-
-        TransformerHandlerFactory(final SAXTransformerFactory saxtf,
-                final Templates templates, final ContentHandler outputHandler) {
-            this.saxtf = saxtf;
-            this.templates = templates;
-            this.outputHandler = outputHandler;
-        }
-
-        public final ContentHandler createContentHandler() {
-            try {
-                TransformerHandler handler = saxtf
-                        .newTransformerHandler(templates);
-                handler.setResult(new SAXResult(outputHandler));
-                return handler;
-            } catch (TransformerConfigurationException ex) {
-                throw new RuntimeException(ex.toString());
-            }
-        }
-    }
-
-    /**
-     * SubdocumentHandlerFactory
-     */
-    private static final class SubdocumentHandlerFactory implements
-            ContentHandlerFactory {
-        private final ContentHandler subdocumentHandler;
-
-        SubdocumentHandlerFactory(final ContentHandler subdocumentHandler) {
-            this.subdocumentHandler = subdocumentHandler;
-        }
-
-        public final ContentHandler createContentHandler() {
-            return subdocumentHandler;
-        }
-
-    }
-
-    /**
-     * A {@link org.xml.sax.ContentHandler ContentHandler} and
-     * {@link org.xml.sax.ext.LexicalHandler LexicalHandler} that serializes XML
-     * from SAX 2.0 events into {@link java.io.Writer Writer}.
-     * 
-     * <i><blockquote> This implementation does not support namespaces, entity
-     * definitions (uncluding DTD), CDATA and text elements. </blockquote></i>
-     */
-    private static final class SAXWriter extends DefaultHandler implements
-            LexicalHandler {
-        private static final char[] OFF = "                                                                                                        "
-                .toCharArray();
-
-        private Writer w;
-
-        private final boolean optimizeEmptyElements;
-
-        private boolean openElement = false;
-
-        private int ident = 0;
-
-        /**
-         * Creates <code>SAXWriter</code>.
-         * 
-         * @param w
-         *            writer
-         * @param optimizeEmptyElements
-         *            if set to <code>true</code>, short XML syntax will be used
-         *            for empty elements
-         */
-        SAXWriter(final Writer w, final boolean optimizeEmptyElements) {
-            this.w = w;
-            this.optimizeEmptyElements = optimizeEmptyElements;
-        }
-
-        @Override
-        public final void startElement(final String ns, final String localName,
-                final String qName, final Attributes atts) throws SAXException {
-            try {
-                closeElement();
-
-                writeIdent();
-                w.write('<' + qName);
-                if (atts != null && atts.getLength() > 0) {
-                    writeAttributes(atts);
-                }
-
-                if (optimizeEmptyElements) {
-                    openElement = true;
-                } else {
-                    w.write(">\n");
-                }
-                ident += 2;
-
-            } catch (IOException ex) {
-                throw new SAXException(ex);
-
-            }
-        }
-
-        @Override
-        public final void endElement(final String ns, final String localName,
-                final String qName) throws SAXException {
-            ident -= 2;
-            try {
-                if (openElement) {
-                    w.write("/>\n");
-                    openElement = false;
-                } else {
-                    writeIdent();
-                    w.write("</" + qName + ">\n");
-                }
-
-            } catch (IOException ex) {
-                throw new SAXException(ex);
-
-            }
-        }
-
-        @Override
-        public final void endDocument() throws SAXException {
-            try {
-                w.flush();
-
-            } catch (IOException ex) {
-                throw new SAXException(ex);
-
-            }
-        }
-
-        public final void comment(final char[] ch, final int off, final int len)
-                throws SAXException {
-            try {
-                closeElement();
-
-                writeIdent();
-                w.write("<!-- ");
-                w.write(ch, off, len);
-                w.write(" -->\n");
-
-            } catch (IOException ex) {
-                throw new SAXException(ex);
-
-            }
-        }
-
-        public final void startDTD(final String arg0, final String arg1,
-                final String arg2) throws SAXException {
-        }
-
-        public final void endDTD() throws SAXException {
-        }
-
-        public final void startEntity(final String arg0) throws SAXException {
-        }
-
-        public final void endEntity(final String arg0) throws SAXException {
-        }
-
-        public final void startCDATA() throws SAXException {
-        }
-
-        public final void endCDATA() throws SAXException {
-        }
-
-        private final void writeAttributes(final Attributes atts)
-                throws IOException {
-            StringBuffer sb = new StringBuffer();
-            int len = atts.getLength();
-            for (int i = 0; i < len; i++) {
-                sb.append(' ').append(atts.getLocalName(i)).append("=\"")
-                        .append(esc(atts.getValue(i))).append('\"');
-            }
-            w.write(sb.toString());
-        }
-
-        /**
-         * Encode string with escaping.
-         * 
-         * @param str
-         *            string to encode.
-         * @return encoded string
-         */
-        private static final String esc(final String str) {
-            StringBuffer sb = new StringBuffer(str.length());
-            for (int i = 0; i < str.length(); i++) {
-                char ch = str.charAt(i);
-                switch (ch) {
-                case '&':
-                    sb.append("&amp;");
-                    break;
-
-                case '<':
-                    sb.append("&lt;");
-                    break;
-
-                case '>':
-                    sb.append("&gt;");
-                    break;
-
-                case '\"':
-                    sb.append("&quot;");
-                    break;
-
-                default:
-                    if (ch > 0x7f) {
-                        sb.append("&#").append(Integer.toString(ch))
-                                .append(';');
-                    } else {
-                        sb.append(ch);
-                    }
-
-                }
-            }
-            return sb.toString();
-        }
-
-        private final void writeIdent() throws IOException {
-            int n = ident;
-            while (n > 0) {
-                if (n > OFF.length) {
-                    w.write(OFF);
-                    n -= OFF.length;
-                } else {
-                    w.write(OFF, 0, n);
-                    n = 0;
-                }
-            }
-        }
-
-        private final void closeElement() throws IOException {
-            if (openElement) {
-                w.write(">\n");
-            }
-            openElement = false;
-        }
-
-    }
-
-    /**
-     * A {@link org.xml.sax.ContentHandler ContentHandler} that splits XML
-     * documents into smaller chunks. Each chunk is processed by the nested
-     * {@link org.xml.sax.ContentHandler ContentHandler} obtained from
-     * {@link java.net.ContentHandlerFactory ContentHandlerFactory}. This is
-     * useful for running XSLT engine against large XML document that will
-     * hardly fit into the memory all together.
-     * <p>
-     * TODO use complete path for subdocumentRoot
-     */
-    private static final class InputSlicingHandler extends DefaultHandler {
-        private String subdocumentRoot;
-
-        private final ContentHandler rootHandler;
-
-        private ContentHandlerFactory subdocumentHandlerFactory;
-
-        private boolean subdocument = false;
-
-        private ContentHandler subdocumentHandler;
-
-        /**
-         * Constructs a new {@link InputSlicingHandler SubdocumentHandler}
-         * object.
-         * 
-         * @param subdocumentRoot
-         *            name/path to the root element of the subdocument
-         * @param rootHandler
-         *            content handler for the entire document (subdocument
-         *            envelope).
-         * @param subdocumentHandlerFactory
-         *            a {@link ContentHandlerFactory ContentHandlerFactory} used
-         *            to create {@link ContentHandler ContentHandler} instances
-         *            for subdocuments.
-         */
-        InputSlicingHandler(final String subdocumentRoot,
-                final ContentHandler rootHandler,
-                final ContentHandlerFactory subdocumentHandlerFactory) {
-            this.subdocumentRoot = subdocumentRoot;
-            this.rootHandler = rootHandler;
-            this.subdocumentHandlerFactory = subdocumentHandlerFactory;
-        }
-
-        @Override
-        public final void startElement(final String namespaceURI,
-                final String localName, final String qName,
-                final Attributes list) throws SAXException {
-            if (subdocument) {
-                subdocumentHandler.startElement(namespaceURI, localName, qName,
-                        list);
-            } else if (localName.equals(subdocumentRoot)) {
-                subdocumentHandler = subdocumentHandlerFactory
-                        .createContentHandler();
-                subdocumentHandler.startDocument();
-                subdocumentHandler.startElement(namespaceURI, localName, qName,
-                        list);
-                subdocument = true;
-            } else if (rootHandler != null) {
-                rootHandler.startElement(namespaceURI, localName, qName, list);
-            }
-        }
-
-        @Override
-        public final void endElement(final String namespaceURI,
-                final String localName, final String qName) throws SAXException {
-            if (subdocument) {
-                subdocumentHandler.endElement(namespaceURI, localName, qName);
-                if (localName.equals(subdocumentRoot)) {
-                    subdocumentHandler.endDocument();
-                    subdocument = false;
-                }
-            } else if (rootHandler != null) {
-                rootHandler.endElement(namespaceURI, localName, qName);
-            }
-        }
-
-        @Override
-        public final void startDocument() throws SAXException {
-            if (rootHandler != null) {
-                rootHandler.startDocument();
-            }
-        }
-
-        @Override
-        public final void endDocument() throws SAXException {
-            if (rootHandler != null) {
-                rootHandler.endDocument();
-
-            }
-        }
-
-        @Override
-        public final void characters(final char[] buff, final int offset,
-                final int size) throws SAXException {
-            if (subdocument) {
-                subdocumentHandler.characters(buff, offset, size);
-            } else if (rootHandler != null) {
-                rootHandler.characters(buff, offset, size);
-            }
-        }
-
-    }
-
-    /**
-     * A {@link org.xml.sax.ContentHandler ContentHandler} that splits XML
-     * documents into smaller chunks. Each chunk is processed by the nested
-     * {@link org.xml.sax.ContentHandler ContentHandler} obtained from
-     * {@link java.net.ContentHandlerFactory ContentHandlerFactory}. This is
-     * useful for running XSLT engine against large XML document that will
-     * hardly fit into the memory all together.
-     * 
-     * <p>
-     * TODO use complete path for subdocumentRoot
-     */
-    private static final class OutputSlicingHandler extends DefaultHandler {
-        private final String subdocumentRoot;
-
-        private ContentHandlerFactory subdocumentHandlerFactory;
-
-        private final EntryElement entryElement;
-
-        private boolean isXml;
-
-        private boolean subdocument = false;
-
-        private ContentHandler subdocumentHandler;
-
-        /**
-         * Constructs a new {@link OutputSlicingHandler SubdocumentHandler}
-         * object.
-         * 
-         * @param subdocumentHandlerFactory
-         *            a {@link ContentHandlerFactory ContentHandlerFactory} used
-         *            to create {@link ContentHandler ContentHandler} instances
-         *            for subdocuments.
-         * @param entryElement
-         *            TODO.
-         * @param isXml
-         *            TODO.
-         */
-        OutputSlicingHandler(
-                final ContentHandlerFactory subdocumentHandlerFactory,
-                final EntryElement entryElement, final boolean isXml) {
-            this.subdocumentRoot = "class";
-            this.subdocumentHandlerFactory = subdocumentHandlerFactory;
-            this.entryElement = entryElement;
-            this.isXml = isXml;
-        }
-
-        @Override
-        public final void startElement(final String namespaceURI,
-                final String localName, final String qName,
-                final Attributes list) throws SAXException {
-            if (subdocument) {
-                subdocumentHandler.startElement(namespaceURI, localName, qName,
-                        list);
-            } else if (localName.equals(subdocumentRoot)) {
-                String name = list.getValue("name");
-                if (name == null || name.length() == 0) {
-                    throw new SAXException(
-                            "Class element without name attribute.");
-                }
-                try {
-                    entryElement.openEntry(isXml ? name + ".class.xml" : name
-                            + ".class");
-                } catch (IOException ex) {
-                    throw new SAXException(ex.toString(), ex);
-                }
-                subdocumentHandler = subdocumentHandlerFactory
-                        .createContentHandler();
-                subdocumentHandler.startDocument();
-                subdocumentHandler.startElement(namespaceURI, localName, qName,
-                        list);
-                subdocument = true;
-            }
-        }
-
-        @Override
-        public final void endElement(final String namespaceURI,
-                final String localName, final String qName) throws SAXException {
-            if (subdocument) {
-                subdocumentHandler.endElement(namespaceURI, localName, qName);
-                if (localName.equals(subdocumentRoot)) {
-                    subdocumentHandler.endDocument();
-                    subdocument = false;
-                    try {
-                        entryElement.closeEntry();
-                    } catch (IOException ex) {
-                        throw new SAXException(ex.toString(), ex);
-                    }
-                }
-            }
-        }
-
-        @Override
-        public final void startDocument() throws SAXException {
-        }
-
-        @Override
-        public final void endDocument() throws SAXException {
-        }
-
-        @Override
-        public final void characters(final char[] buff, final int offset,
-                final int size) throws SAXException {
-            if (subdocument) {
-                subdocumentHandler.characters(buff, offset, size);
-            }
-        }
-
-    }
-
-    private static interface EntryElement {
-
-        OutputStream openEntry(String name) throws IOException;
-
-        void closeEntry() throws IOException;
-
-    }
-
-    private static final class SingleDocElement implements EntryElement {
-        private final OutputStream os;
-
-        SingleDocElement(final OutputStream os) {
-            this.os = os;
-        }
-
-        public OutputStream openEntry(final String name) throws IOException {
-            return os;
-        }
-
-        public void closeEntry() throws IOException {
-            os.flush();
-        }
-
-    }
-
-    private static final class ZipEntryElement implements EntryElement {
-        private ZipOutputStream zos;
-
-        ZipEntryElement(final ZipOutputStream zos) {
-            this.zos = zos;
-        }
-
-        public OutputStream openEntry(final String name) throws IOException {
-            ZipEntry entry = new ZipEntry(name);
-            zos.putNextEntry(entry);
-            return zos;
-        }
-
-        public void closeEntry() throws IOException {
-            zos.flush();
-            zos.closeEntry();
-        }
-
-    }
-
-}
diff --git a/asm4/src/org/objectweb/asm/xml/SAXAdapter.java b/asm4/src/org/objectweb/asm/xml/SAXAdapter.java
deleted file mode 100644
index 0e291ec..0000000
--- a/asm4/src/org/objectweb/asm/xml/SAXAdapter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-/**
- * SAXAdapter
- * 
- * @author Eugene Kuleshov
- */
-public class SAXAdapter {
-
-    private final ContentHandler h;
-
-    protected SAXAdapter(final ContentHandler h) {
-        this.h = h;
-    }
-
-    protected ContentHandler getContentHandler() {
-        return h;
-    }
-
-    protected void addDocumentStart() {
-        try {
-            h.startDocument();
-        } catch (SAXException ex) {
-            throw new RuntimeException(ex.getMessage(), ex.getException());
-        }
-    }
-
-    protected void addDocumentEnd() {
-        try {
-            h.endDocument();
-        } catch (SAXException ex) {
-            throw new RuntimeException(ex.getMessage(), ex.getException());
-        }
-    }
-
-    protected final void addStart(final String name, final Attributes attrs) {
-        try {
-            h.startElement("", name, name, attrs);
-        } catch (SAXException ex) {
-            throw new RuntimeException(ex.getMessage(), ex.getException());
-        }
-    }
-
-    protected final void addEnd(final String name) {
-        try {
-            h.endElement("", name, name);
-        } catch (SAXException ex) {
-            throw new RuntimeException(ex.getMessage(), ex.getException());
-        }
-    }
-
-    protected final void addElement(final String name, final Attributes attrs) {
-        addStart(name, attrs);
-        addEnd(name);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/xml/SAXAnnotationAdapter.java b/asm4/src/org/objectweb/asm/xml/SAXAnnotationAdapter.java
deleted file mode 100644
index a3aebe4..0000000
--- a/asm4/src/org/objectweb/asm/xml/SAXAnnotationAdapter.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * SAXAnnotationAdapter
- * 
- * @author Eugene Kuleshov
- */
-public final class SAXAnnotationAdapter extends AnnotationVisitor {
-
-    SAXAdapter sa;
-
-    private final String elementName;
-
-    public SAXAnnotationAdapter(final SAXAdapter sa, final String elementName,
-            final int visible, final String name, final String desc) {
-        this(Opcodes.ASM4, sa, elementName, visible, desc, name, -1);
-    }
-
-    public SAXAnnotationAdapter(final SAXAdapter sa, final String elementName,
-            final int visible, final int parameter, final String desc) {
-        this(Opcodes.ASM4, sa, elementName, visible, desc, null, parameter);
-    }
-
-    protected SAXAnnotationAdapter(final int api, final SAXAdapter sa,
-            final String elementName, final int visible, final String desc,
-            final String name, final int parameter) {
-        super(api);
-        this.sa = sa;
-        this.elementName = elementName;
-
-        AttributesImpl att = new AttributesImpl();
-        if (name != null) {
-            att.addAttribute("", "name", "name", "", name);
-        }
-        if (visible != 0) {
-            att.addAttribute("", "visible", "visible", "", visible > 0 ? "true"
-                    : "false");
-        }
-        if (parameter != -1) {
-            att.addAttribute("", "parameter", "parameter", "",
-                    Integer.toString(parameter));
-        }
-        if (desc != null) {
-            att.addAttribute("", "desc", "desc", "", desc);
-        }
-
-        sa.addStart(elementName, att);
-    }
-
-    @Override
-    public void visit(final String name, final Object value) {
-        Class<?> c = value.getClass();
-        if (c.isArray()) {
-            AnnotationVisitor av = visitArray(name);
-            if (value instanceof byte[]) {
-                byte[] b = (byte[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Byte(b[i]));
-                }
-
-            } else if (value instanceof char[]) {
-                char[] b = (char[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Character(b[i]));
-                }
-
-            } else if (value instanceof short[]) {
-                short[] b = (short[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Short(b[i]));
-                }
-
-            } else if (value instanceof boolean[]) {
-                boolean[] b = (boolean[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, Boolean.valueOf(b[i]));
-                }
-
-            } else if (value instanceof int[]) {
-                int[] b = (int[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Integer(b[i]));
-                }
-
-            } else if (value instanceof long[]) {
-                long[] b = (long[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Long(b[i]));
-                }
-
-            } else if (value instanceof float[]) {
-                float[] b = (float[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Float(b[i]));
-                }
-
-            } else if (value instanceof double[]) {
-                double[] b = (double[]) value;
-                for (int i = 0; i < b.length; i++) {
-                    av.visit(null, new Double(b[i]));
-                }
-
-            }
-            av.visitEnd();
-        } else {
-            addValueElement("annotationValue", name, Type.getDescriptor(c),
-                    value.toString());
-        }
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        addValueElement("annotationValueEnum", name, desc, value);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        return new SAXAnnotationAdapter(sa, "annotationValueAnnotation", 0,
-                name, desc);
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        return new SAXAnnotationAdapter(sa, "annotationValueArray", 0, name,
-                null);
-    }
-
-    @Override
-    public void visitEnd() {
-        sa.addEnd(elementName);
-    }
-
-    private void addValueElement(final String element, final String name,
-            final String desc, final String value) {
-        AttributesImpl att = new AttributesImpl();
-        if (name != null) {
-            att.addAttribute("", "name", "name", "", name);
-        }
-        if (desc != null) {
-            att.addAttribute("", "desc", "desc", "", desc);
-        }
-        if (value != null) {
-            att.addAttribute("", "value", "value", "",
-                    SAXClassAdapter.encode(value));
-        }
-
-        sa.addElement(element, att);
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/xml/SAXClassAdapter.java b/asm4/src/org/objectweb/asm/xml/SAXClassAdapter.java
deleted file mode 100644
index 488ccf1..0000000
--- a/asm4/src/org/objectweb/asm/xml/SAXClassAdapter.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * A {@link org.objectweb.asm.ClassVisitor ClassVisitor} that generates SAX 2.0
- * events from the visited class. It can feed any kind of
- * {@link org.xml.sax.ContentHandler ContentHandler}, e.g. XML serializer, XSLT
- * or XQuery engines.
- * 
- * @see org.objectweb.asm.xml.Processor
- * @see org.objectweb.asm.xml.ASMContentHandler
- * 
- * @author Eugene Kuleshov
- */
-public final class SAXClassAdapter extends ClassVisitor {
-
-    SAXAdapter sa;
-
-    private final boolean singleDocument;
-
-    /**
-     * Pseudo access flag used to distinguish class access flags.
-     */
-    private static final int ACCESS_CLASS = 262144;
-
-    /**
-     * Pseudo access flag used to distinguish field access flags.
-     */
-    private static final int ACCESS_FIELD = 524288;
-
-    /**
-     * Pseudo access flag used to distinguish inner class flags.
-     */
-    private static final int ACCESS_INNER = 1048576;
-
-    /**
-     * Constructs a new {@link SAXClassAdapter SAXClassAdapter} object.
-     * 
-     * @param h
-     *            content handler that will be used to send SAX 2.0 events.
-     * @param singleDocument
-     *            if <tt>true</tt> adapter will not produce
-     *            {@link ContentHandler#startDocument() startDocument()} and
-     *            {@link ContentHandler#endDocument() endDocument()} events.
-     */
-    public SAXClassAdapter(final ContentHandler h, boolean singleDocument) {
-        super(Opcodes.ASM4);
-        this.sa = new SAXAdapter(h);
-        this.singleDocument = singleDocument;
-        if (!singleDocument) {
-            sa.addDocumentStart();
-        }
-    }
-
-    @Override
-    public void visitSource(final String source, final String debug) {
-        AttributesImpl att = new AttributesImpl();
-        if (source != null) {
-            att.addAttribute("", "file", "file", "", encode(source));
-        }
-        if (debug != null) {
-            att.addAttribute("", "debug", "debug", "", encode(debug));
-        }
-
-        sa.addElement("source", att);
-    }
-
-    @Override
-    public void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        AttributesImpl att = new AttributesImpl();
-        att.addAttribute("", "owner", "owner", "", owner);
-        if (name != null) {
-            att.addAttribute("", "name", "name", "", name);
-        }
-        if (desc != null) {
-            att.addAttribute("", "desc", "desc", "", desc);
-        }
-
-        sa.addElement("outerclass", att);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        return new SAXAnnotationAdapter(sa, "annotation", visible ? 1 : -1,
-                null, desc);
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        StringBuffer sb = new StringBuffer();
-        appendAccess(access | ACCESS_CLASS, sb);
-
-        AttributesImpl att = new AttributesImpl();
-        att.addAttribute("", "access", "access", "", sb.toString());
-        if (name != null) {
-            att.addAttribute("", "name", "name", "", name);
-        }
-        if (signature != null) {
-            att.addAttribute("", "signature", "signature", "",
-                    encode(signature));
-        }
-        if (superName != null) {
-            att.addAttribute("", "parent", "parent", "", superName);
-        }
-        att.addAttribute("", "major", "major", "",
-                Integer.toString(version & 0xFFFF));
-        att.addAttribute("", "minor", "minor", "",
-                Integer.toString(version >>> 16));
-        sa.addStart("class", att);
-
-        sa.addStart("interfaces", new AttributesImpl());
-        if (interfaces != null && interfaces.length > 0) {
-            for (int i = 0; i < interfaces.length; i++) {
-                AttributesImpl att2 = new AttributesImpl();
-                att2.addAttribute("", "name", "name", "", interfaces[i]);
-                sa.addElement("interface", att2);
-            }
-        }
-        sa.addEnd("interfaces");
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        StringBuffer sb = new StringBuffer();
-        appendAccess(access | ACCESS_FIELD, sb);
-
-        AttributesImpl att = new AttributesImpl();
-        att.addAttribute("", "access", "access", "", sb.toString());
-        att.addAttribute("", "name", "name", "", name);
-        att.addAttribute("", "desc", "desc", "", desc);
-        if (signature != null) {
-            att.addAttribute("", "signature", "signature", "",
-                    encode(signature));
-        }
-        if (value != null) {
-            att.addAttribute("", "value", "value", "", encode(value.toString()));
-        }
-
-        return new SAXFieldAdapter(sa, att);
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        StringBuffer sb = new StringBuffer();
-        appendAccess(access, sb);
-
-        AttributesImpl att = new AttributesImpl();
-        att.addAttribute("", "access", "access", "", sb.toString());
-        att.addAttribute("", "name", "name", "", name);
-        att.addAttribute("", "desc", "desc", "", desc);
-        if (signature != null) {
-            att.addAttribute("", "signature", "signature", "", signature);
-        }
-        sa.addStart("method", att);
-
-        sa.addStart("exceptions", new AttributesImpl());
-        if (exceptions != null && exceptions.length > 0) {
-            for (int i = 0; i < exceptions.length; i++) {
-                AttributesImpl att2 = new AttributesImpl();
-                att2.addAttribute("", "name", "name", "", exceptions[i]);
-                sa.addElement("exception", att2);
-            }
-        }
-        sa.addEnd("exceptions");
-
-        return new SAXCodeAdapter(sa, access);
-    }
-
-    @Override
-    public final void visitInnerClass(final String name,
-            final String outerName, final String innerName, final int access) {
-        StringBuffer sb = new StringBuffer();
-        appendAccess(access | ACCESS_INNER, sb);
-
-        AttributesImpl att = new AttributesImpl();
-        att.addAttribute("", "access", "access", "", sb.toString());
-        if (name != null) {
-            att.addAttribute("", "name", "name", "", name);
-        }
-        if (outerName != null) {
-            att.addAttribute("", "outerName", "outerName", "", outerName);
-        }
-        if (innerName != null) {
-            att.addAttribute("", "innerName", "innerName", "", innerName);
-        }
-        sa.addElement("innerclass", att);
-    }
-
-    @Override
-    public final void visitEnd() {
-        sa.addEnd("class");
-        if (!singleDocument) {
-            sa.addDocumentEnd();
-        }
-    }
-
-    static final String encode(final String s) {
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            if (c == '\\') {
-                sb.append("\\\\");
-            } else if (c < 0x20 || c > 0x7f) {
-                sb.append("\\u");
-                if (c < 0x10) {
-                    sb.append("000");
-                } else if (c < 0x100) {
-                    sb.append("00");
-                } else if (c < 0x1000) {
-                    sb.append('0');
-                }
-                sb.append(Integer.toString(c, 16));
-            } else {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    static void appendAccess(final int access, final StringBuffer sb) {
-        if ((access & Opcodes.ACC_PUBLIC) != 0) {
-            sb.append("public ");
-        }
-        if ((access & Opcodes.ACC_PRIVATE) != 0) {
-            sb.append("private ");
-        }
-        if ((access & Opcodes.ACC_PROTECTED) != 0) {
-            sb.append("protected ");
-        }
-        if ((access & Opcodes.ACC_FINAL) != 0) {
-            sb.append("final ");
-        }
-        if ((access & Opcodes.ACC_STATIC) != 0) {
-            sb.append("static ");
-        }
-        if ((access & Opcodes.ACC_SUPER) != 0) {
-            if ((access & ACCESS_CLASS) == 0) {
-                sb.append("synchronized ");
-            } else {
-                sb.append("super ");
-            }
-        }
-        if ((access & Opcodes.ACC_VOLATILE) != 0) {
-            if ((access & ACCESS_FIELD) == 0) {
-                sb.append("bridge ");
-            } else {
-                sb.append("volatile ");
-            }
-        }
-        if ((access & Opcodes.ACC_TRANSIENT) != 0) {
-            if ((access & ACCESS_FIELD) == 0) {
-                sb.append("varargs ");
-            } else {
-                sb.append("transient ");
-            }
-        }
-        if ((access & Opcodes.ACC_NATIVE) != 0) {
-            sb.append("native ");
-        }
-        if ((access & Opcodes.ACC_STRICT) != 0) {
-            sb.append("strict ");
-        }
-        if ((access & Opcodes.ACC_INTERFACE) != 0) {
-            sb.append("interface ");
-        }
-        if ((access & Opcodes.ACC_ABSTRACT) != 0) {
-            sb.append("abstract ");
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            sb.append("synthetic ");
-        }
-        if ((access & Opcodes.ACC_ANNOTATION) != 0) {
-            sb.append("annotation ");
-        }
-        if ((access & Opcodes.ACC_ENUM) != 0) {
-            sb.append("enum ");
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            sb.append("deprecated ");
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/xml/SAXCodeAdapter.java b/asm4/src/org/objectweb/asm/xml/SAXCodeAdapter.java
deleted file mode 100644
index 80cf38c..0000000
--- a/asm4/src/org/objectweb/asm/xml/SAXCodeAdapter.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.util.Printer;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * A {@link MethodVisitor} that generates SAX 2.0 events from the visited
- * method.
- * 
- * @see org.objectweb.asm.xml.SAXClassAdapter
- * @see org.objectweb.asm.xml.Processor
- * 
- * @author Eugene Kuleshov
- */
-public final class SAXCodeAdapter extends MethodVisitor {
-
-    static final String[] TYPES = { "top", "int", "float", "double", "long",
-            "null", "uninitializedThis" };
-
-    SAXAdapter sa;
-
-    private final Map<Label, String> labelNames;
-
-    /**
-     * Constructs a new {@link SAXCodeAdapter SAXCodeAdapter} object.
-     * 
-     * @param sa
-     *            content handler that will be used to send SAX 2.0 events.
-     */
-    public SAXCodeAdapter(final SAXAdapter sa, final int access) {
-        super(Opcodes.ASM4);
-        this.sa = sa;
-        this.labelNames = new HashMap<Label, String>();
-
-        if ((access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_INTERFACE | Opcodes.ACC_NATIVE)) == 0) {
-            sa.addStart("code", new AttributesImpl());
-        }
-    }
-
-    @Override
-    public final void visitCode() {
-    }
-
-    @Override
-    public void visitFrame(final int type, final int nLocal,
-            final Object[] local, final int nStack, final Object[] stack) {
-        AttributesImpl attrs = new AttributesImpl();
-        switch (type) {
-        case Opcodes.F_NEW:
-        case Opcodes.F_FULL:
-            if (type == Opcodes.F_NEW) {
-                attrs.addAttribute("", "type", "type", "", "NEW");
-            } else {
-                attrs.addAttribute("", "type", "type", "", "FULL");
-            }
-            sa.addStart("frame", attrs);
-            appendFrameTypes(true, nLocal, local);
-            appendFrameTypes(false, nStack, stack);
-            break;
-        case Opcodes.F_APPEND:
-            attrs.addAttribute("", "type", "type", "", "APPEND");
-            sa.addStart("frame", attrs);
-            appendFrameTypes(true, nLocal, local);
-            break;
-        case Opcodes.F_CHOP:
-            attrs.addAttribute("", "type", "type", "", "CHOP");
-            attrs.addAttribute("", "count", "count", "",
-                    Integer.toString(nLocal));
-            sa.addStart("frame", attrs);
-            break;
-        case Opcodes.F_SAME:
-            attrs.addAttribute("", "type", "type", "", "SAME");
-            sa.addStart("frame", attrs);
-            break;
-        case Opcodes.F_SAME1:
-            attrs.addAttribute("", "type", "type", "", "SAME1");
-            sa.addStart("frame", attrs);
-            appendFrameTypes(false, 1, stack);
-            break;
-        }
-        sa.addEnd("frame");
-    }
-
-    private void appendFrameTypes(final boolean local, final int n,
-            final Object[] types) {
-        for (int i = 0; i < n; ++i) {
-            Object type = types[i];
-            AttributesImpl attrs = new AttributesImpl();
-            if (type instanceof String) {
-                attrs.addAttribute("", "type", "type", "", (String) type);
-            } else if (type instanceof Integer) {
-                attrs.addAttribute("", "type", "type", "",
-                        TYPES[((Integer) type).intValue()]);
-            } else {
-                attrs.addAttribute("", "type", "type", "", "uninitialized");
-                attrs.addAttribute("", "label", "label", "",
-                        getLabel((Label) type));
-            }
-            sa.addElement(local ? "local" : "stack", attrs);
-        }
-    }
-
-    @Override
-    public final void visitInsn(final int opcode) {
-        sa.addElement(Printer.OPCODES[opcode], new AttributesImpl());
-    }
-
-    @Override
-    public final void visitIntInsn(final int opcode, final int operand) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "value", "value", "", Integer.toString(operand));
-        sa.addElement(Printer.OPCODES[opcode], attrs);
-    }
-
-    @Override
-    public final void visitVarInsn(final int opcode, final int var) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "var", "var", "", Integer.toString(var));
-        sa.addElement(Printer.OPCODES[opcode], attrs);
-    }
-
-    @Override
-    public final void visitTypeInsn(final int opcode, final String type) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "desc", "desc", "", type);
-        sa.addElement(Printer.OPCODES[opcode], attrs);
-    }
-
-    @Override
-    public final void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "owner", "owner", "", owner);
-        attrs.addAttribute("", "name", "name", "", name);
-        attrs.addAttribute("", "desc", "desc", "", desc);
-        sa.addElement(Printer.OPCODES[opcode], attrs);
-    }
-
-    @Override
-    public final void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "owner", "owner", "", owner);
-        attrs.addAttribute("", "name", "name", "", name);
-        attrs.addAttribute("", "desc", "desc", "", desc);
-        sa.addElement(Printer.OPCODES[opcode], attrs);
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "name", "name", "", name);
-        attrs.addAttribute("", "desc", "desc", "", desc);
-        attrs.addAttribute("", "bsm", "bsm", "",
-                SAXClassAdapter.encode(bsm.toString()));
-        sa.addStart("INVOKEDYNAMIC", attrs);
-        for (int i = 0; i < bsmArgs.length; i++) {
-            sa.addElement("bsmArg", getConstantAttribute(bsmArgs[i]));
-        }
-        sa.addEnd("INVOKEDYNAMIC");
-    }
-
-    @Override
-    public final void visitJumpInsn(final int opcode, final Label label) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "label", "label", "", getLabel(label));
-        sa.addElement(Printer.OPCODES[opcode], attrs);
-    }
-
-    @Override
-    public final void visitLabel(final Label label) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "name", "name", "", getLabel(label));
-        sa.addElement("Label", attrs);
-    }
-
-    @Override
-    public final void visitLdcInsn(final Object cst) {
-        sa.addElement(Printer.OPCODES[Opcodes.LDC], getConstantAttribute(cst));
-    }
-
-    private static AttributesImpl getConstantAttribute(final Object cst) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "cst", "cst", "",
-                SAXClassAdapter.encode(cst.toString()));
-        attrs.addAttribute("", "desc", "desc", "",
-                Type.getDescriptor(cst.getClass()));
-        return attrs;
-    }
-
-    @Override
-    public final void visitIincInsn(final int var, final int increment) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "var", "var", "", Integer.toString(var));
-        attrs.addAttribute("", "inc", "inc", "", Integer.toString(increment));
-        sa.addElement(Printer.OPCODES[Opcodes.IINC], attrs);
-    }
-
-    @Override
-    public final void visitTableSwitchInsn(final int min, final int max,
-            final Label dflt, final Label... labels) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "min", "min", "", Integer.toString(min));
-        attrs.addAttribute("", "max", "max", "", Integer.toString(max));
-        attrs.addAttribute("", "dflt", "dflt", "", getLabel(dflt));
-        String o = Printer.OPCODES[Opcodes.TABLESWITCH];
-        sa.addStart(o, attrs);
-        for (int i = 0; i < labels.length; i++) {
-            AttributesImpl att2 = new AttributesImpl();
-            att2.addAttribute("", "name", "name", "", getLabel(labels[i]));
-            sa.addElement("label", att2);
-        }
-        sa.addEnd(o);
-    }
-
-    @Override
-    public final void visitLookupSwitchInsn(final Label dflt, final int[] keys,
-            final Label[] labels) {
-        AttributesImpl att = new AttributesImpl();
-        att.addAttribute("", "dflt", "dflt", "", getLabel(dflt));
-        String o = Printer.OPCODES[Opcodes.LOOKUPSWITCH];
-        sa.addStart(o, att);
-        for (int i = 0; i < labels.length; i++) {
-            AttributesImpl att2 = new AttributesImpl();
-            att2.addAttribute("", "name", "name", "", getLabel(labels[i]));
-            att2.addAttribute("", "key", "key", "", Integer.toString(keys[i]));
-            sa.addElement("label", att2);
-        }
-        sa.addEnd(o);
-    }
-
-    @Override
-    public final void visitMultiANewArrayInsn(final String desc, final int dims) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "desc", "desc", "", desc);
-        attrs.addAttribute("", "dims", "dims", "", Integer.toString(dims));
-        sa.addElement(Printer.OPCODES[Opcodes.MULTIANEWARRAY], attrs);
-    }
-
-    @Override
-    public final void visitTryCatchBlock(final Label start, final Label end,
-            final Label handler, final String type) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "start", "start", "", getLabel(start));
-        attrs.addAttribute("", "end", "end", "", getLabel(end));
-        attrs.addAttribute("", "handler", "handler", "", getLabel(handler));
-        if (type != null) {
-            attrs.addAttribute("", "type", "type", "", type);
-        }
-        sa.addElement("TryCatch", attrs);
-    }
-
-    @Override
-    public final void visitMaxs(final int maxStack, final int maxLocals) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "maxStack", "maxStack", "",
-                Integer.toString(maxStack));
-        attrs.addAttribute("", "maxLocals", "maxLocals", "",
-                Integer.toString(maxLocals));
-        sa.addElement("Max", attrs);
-
-        sa.addEnd("code");
-    }
-
-    @Override
-    public void visitLocalVariable(final String name, final String desc,
-            final String signature, final Label start, final Label end,
-            final int index) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "name", "name", "", name);
-        attrs.addAttribute("", "desc", "desc", "", desc);
-        if (signature != null) {
-            attrs.addAttribute("", "signature", "signature", "",
-                    SAXClassAdapter.encode(signature));
-        }
-        attrs.addAttribute("", "start", "start", "", getLabel(start));
-        attrs.addAttribute("", "end", "end", "", getLabel(end));
-        attrs.addAttribute("", "var", "var", "", Integer.toString(index));
-        sa.addElement("LocalVar", attrs);
-    }
-
-    @Override
-    public final void visitLineNumber(final int line, final Label start) {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "line", "line", "", Integer.toString(line));
-        attrs.addAttribute("", "start", "start", "", getLabel(start));
-        sa.addElement("LineNumber", attrs);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotationDefault() {
-        return new SAXAnnotationAdapter(sa, "annotationDefault", 0, null, null);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        return new SAXAnnotationAdapter(sa, "annotation", visible ? 1 : -1,
-                null, desc);
-    }
-
-    @Override
-    public AnnotationVisitor visitParameterAnnotation(final int parameter,
-            final String desc, final boolean visible) {
-        return new SAXAnnotationAdapter(sa, "parameterAnnotation", visible ? 1
-                : -1, parameter, desc);
-    }
-
-    @Override
-    public void visitEnd() {
-        sa.addEnd("method");
-    }
-
-    private final String getLabel(final Label label) {
-        String name = labelNames.get(label);
-        if (name == null) {
-            name = Integer.toString(labelNames.size());
-            labelNames.put(label, name);
-        }
-        return name;
-    }
-
-}
diff --git a/asm4/src/org/objectweb/asm/xml/SAXFieldAdapter.java b/asm4/src/org/objectweb/asm/xml/SAXFieldAdapter.java
deleted file mode 100644
index 5de41a8..0000000
--- a/asm4/src/org/objectweb/asm/xml/SAXFieldAdapter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
-import org.xml.sax.Attributes;
-
-/**
- * SAXFieldAdapter
- * 
- * @author Eugene Kuleshov
- */
-public final class SAXFieldAdapter extends FieldVisitor {
-
-    SAXAdapter sa;
-
-    public SAXFieldAdapter(final SAXAdapter sa, final Attributes att) {
-        super(Opcodes.ASM4);
-        this.sa = sa;
-        sa.addStart("field", att);
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        return new SAXAnnotationAdapter(sa, "annotation", visible ? 1 : -1,
-                null, desc);
-    }
-
-    @Override
-    public void visitEnd() {
-        sa.addEnd("field");
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/xml/asm-xml.dtd b/asm4/src/org/objectweb/asm/xml/asm-xml.dtd
deleted file mode 100644
index b862085..0000000
--- a/asm4/src/org/objectweb/asm/xml/asm-xml.dtd
+++ /dev/null
@@ -1,349 +0,0 @@
-<!--
-  ASM XML Adapter
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  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.
--->
-
-<!--
-  This DTD must be used to create XML documents to be processed by
-  org.objectweb.asm.xml.ASMContentHandler
--->
-
-<!--
-  Root element used to aggregate multiple classes into single document.
--->
-<!ELEMENT classes ( class+ )>
-
-<!--
-  Root element for a single class.
--->
-<!ELEMENT class ( interfaces, ( field | innerclass | method )*)>
-<!ATTLIST class access CDATA #REQUIRED>
-<!ATTLIST class name CDATA #REQUIRED>
-<!ATTLIST class parent CDATA #REQUIRED>
-<!ATTLIST class major CDATA #REQUIRED>
-<!ATTLIST class minor CDATA #REQUIRED>
-<!ATTLIST class source CDATA #IMPLIED>
-
-<!ELEMENT interfaces ( interface* )>
-<!ELEMENT interface EMPTY>
-<!ATTLIST interface name CDATA #REQUIRED>
-
-<!ELEMENT field EMPTY>
-<!ATTLIST field access CDATA #REQUIRED>
-<!ATTLIST field desc CDATA #REQUIRED>
-<!ATTLIST field name CDATA #REQUIRED>
-<!--
-  All characters out of interval 0x20 to 0x7f (inclusive) must
-  be encoded (\uXXXX) and character '\' must be replaced by "\\"
--->
-<!ATTLIST field value CDATA #IMPLIED>
-
-<!ELEMENT innerclass EMPTY>
-<!ATTLIST innerclass access CDATA #REQUIRED>
-<!ATTLIST innerclass innerName CDATA #IMPLIED>
-<!ATTLIST innerclass name CDATA #REQUIRED>
-<!ATTLIST innerclass outerName CDATA #IMPLIED>
-
-<!--
-  Root element for method definition.
--->
-<!ELEMENT method ( exceptions, code? )>
-<!ATTLIST method access CDATA #REQUIRED>
-<!ATTLIST method desc CDATA #REQUIRED>
-<!ATTLIST method name CDATA #REQUIRED>
-
-<!ELEMENT exceptions ( exception* )>
-<!ELEMENT exception EMPTY>
-<!ATTLIST exception name CDATA #REQUIRED>
-
-<!--
-  code element contains bytecode instructions and definitions for labels, line numbers, try/catch and max
--->
-<!ELEMENT code (( AALOAD | AASTORE | ACONST_NULL | ALOAD | ANEWARRAY | ARETURN | ARRAYLENGTH | ASTORE | ATHROW | BALOAD | BASTORE | BIPUSH | CALOAD | CASTORE | CHECKCAST | D2F | D2I | D2L | DADD | DALOAD | DASTORE | DCMPG | DCMPL | DCONST_0 | DCONST_1 | DDIV | DLOAD | DMUL | DNEG | DREM | DRETURN | DSTORE | DSUB | DUP | DUP2 | DUP2_X1 | DUP2_X2 | DUP_X1 | DUP_X2 | SWAP | F2D | F2I | F2L | FADD | FALOAD | FASTORE | FCMPG | FCMPL | FCONST_0 | FCONST_1 | FCONST_2 | FDIV | FLOAD | FMUL | FNEG | FREM | FRETURN | FSTORE | FSUB | GETFIELD | GETSTATIC | GOTO | I2B | I2C | I2D | I2F | I2L | I2S | IADD | IALOAD | IAND | IASTORE | ICONST_0 | ICONST_1 | ICONST_2 | ICONST_3 | ICONST_4 | ICONST_5 | ICONST_M1 | IDIV | IFEQ | IFGE | IFGT | IFLE | IFLT | IFNE | IFNONNULL | IFNULL | IF_ACMPEQ | IF_ACMPNE | IF_ICMPEQ | IF_ICMPGE | IF_ICMPGT | IF_ICMPLE | IF_ICMPLT | IF_ICMPNE | IINC | ILOAD | IMUL | INEG | INSTANCEOF | INVOKEINTERFACE | INVOKESPECIAL | INVOKESTATIC | INVOKEVIRTUAL | IOR | IREM | IRETURN | ISHL | ISHR | ISTORE | ISUB | IUSHR | IXOR | JSR | L2D | L2F | L2I | LADD | LALOAD | LAND | LASTORE | LCMP | LCONST_0 | LCONST_1 | LDC | LDIV | LLOAD | LMUL | LNEG | LOOKUPSWITCH | LOR | LREM | LRETURN | LSHL | LSHR | LSTORE | LSUB | LUSHR | LXOR | MONITORENTER | MONITOREXIT | MULTIANEWARRAY | NEW | NEWARRAY | NOP | POP | POP2 | PUTFIELD | PUTSTATIC | RET | RETURN | SALOAD | SASTORE | SIPUSH | TABLESWITCH | Label | LineNumber | TryCatch )*, Max)>
-
-<!ELEMENT Label EMPTY>
-<!ATTLIST Label name CDATA #REQUIRED>
-
-<!ELEMENT TryCatch EMPTY>
-<!ATTLIST TryCatch end CDATA #REQUIRED>
-<!ATTLIST TryCatch handler CDATA #REQUIRED>
-<!ATTLIST TryCatch start CDATA #REQUIRED>
-<!ATTLIST TryCatch type CDATA #IMPLIED>
-
-<!ELEMENT LineNumber EMPTY>
-<!ATTLIST LineNumber line CDATA #REQUIRED>
-<!ATTLIST LineNumber start CDATA #REQUIRED>
-
-<!ELEMENT Max EMPTY>
-<!ATTLIST Max maxLocals CDATA #REQUIRED>
-<!ATTLIST Max maxStack CDATA #REQUIRED>
-
-<!ELEMENT AALOAD EMPTY>
-<!ELEMENT AASTORE EMPTY>
-<!ELEMENT ACONST_NULL EMPTY>
-<!ELEMENT ALOAD EMPTY>
-<!ATTLIST ALOAD var CDATA #REQUIRED>
-<!ELEMENT ANEWARRAY EMPTY>
-<!ATTLIST ANEWARRAY desc CDATA #REQUIRED>
-<!ELEMENT ARETURN EMPTY>
-<!ELEMENT ARRAYLENGTH EMPTY>
-<!ELEMENT ASTORE EMPTY>
-<!ATTLIST ASTORE var CDATA #REQUIRED>
-<!ELEMENT ATHROW EMPTY>
-<!ELEMENT BALOAD EMPTY>
-<!ELEMENT BASTORE EMPTY>
-<!ELEMENT BIPUSH EMPTY>
-<!ATTLIST BIPUSH value CDATA #REQUIRED>
-<!ELEMENT CALOAD EMPTY>
-<!ELEMENT CASTORE EMPTY>
-<!ELEMENT CHECKCAST EMPTY>
-<!ATTLIST CHECKCAST desc CDATA #REQUIRED>
-<!ELEMENT D2F EMPTY>
-<!ELEMENT D2I EMPTY>
-<!ELEMENT D2L EMPTY>
-<!ELEMENT DADD EMPTY>
-<!ELEMENT DALOAD EMPTY>
-<!ELEMENT DASTORE EMPTY>
-<!ELEMENT DCMPG EMPTY>
-<!ELEMENT DCMPL EMPTY>
-<!ELEMENT DCONST_0 EMPTY>
-<!ELEMENT DCONST_1 EMPTY>
-<!ELEMENT DDIV EMPTY>
-<!ELEMENT DLOAD EMPTY>
-<!ATTLIST DLOAD var CDATA #REQUIRED>
-<!ELEMENT DMUL EMPTY>
-<!ELEMENT DNEG EMPTY>
-<!ELEMENT DREM EMPTY>
-<!ELEMENT DRETURN EMPTY>
-<!ELEMENT DSTORE EMPTY>
-<!ATTLIST DSTORE var CDATA #REQUIRED>
-<!ELEMENT DSUB EMPTY>
-<!ELEMENT DUP EMPTY>
-<!ELEMENT DUP2 EMPTY>
-<!ELEMENT DUP2_X1 EMPTY>
-<!ELEMENT DUP2_X2 EMPTY>
-<!ELEMENT DUP_X1 EMPTY>
-<!ELEMENT DUP_X2 EMPTY>
-<!ELEMENT SWAP EMPTY>
-<!ELEMENT F2D EMPTY>
-<!ELEMENT F2I EMPTY>
-<!ELEMENT F2L EMPTY>
-<!ELEMENT FADD EMPTY>
-<!ELEMENT FALOAD EMPTY>
-<!ELEMENT FASTORE EMPTY>
-<!ELEMENT FCMPG EMPTY>
-<!ELEMENT FCMPL EMPTY>
-<!ELEMENT FCONST_0 EMPTY>
-<!ELEMENT FCONST_1 EMPTY>
-<!ELEMENT FCONST_2 EMPTY>
-<!ELEMENT FDIV EMPTY>
-<!ELEMENT FLOAD EMPTY>
-<!ATTLIST FLOAD var CDATA #REQUIRED>
-<!ELEMENT FMUL EMPTY>
-<!ELEMENT FNEG EMPTY>
-<!ELEMENT FREM EMPTY>
-<!ELEMENT FRETURN EMPTY>
-<!ELEMENT FSTORE EMPTY>
-<!ATTLIST FSTORE var CDATA #REQUIRED>
-<!ELEMENT FSUB EMPTY>
-<!ELEMENT GETFIELD EMPTY>
-<!ATTLIST GETFIELD desc CDATA #REQUIRED>
-<!ATTLIST GETFIELD name CDATA #REQUIRED>
-<!ATTLIST GETFIELD owner CDATA #REQUIRED>
-<!ELEMENT GETSTATIC EMPTY>
-<!ATTLIST GETSTATIC desc CDATA #REQUIRED>
-<!ATTLIST GETSTATIC name CDATA #REQUIRED>
-<!ATTLIST GETSTATIC owner CDATA #REQUIRED>
-<!ELEMENT GOTO EMPTY>
-<!ATTLIST GOTO label CDATA #REQUIRED>
-<!ELEMENT I2B EMPTY>
-<!ELEMENT I2C EMPTY>
-<!ELEMENT I2D EMPTY>
-<!ELEMENT I2F EMPTY>
-<!ELEMENT I2L EMPTY>
-<!ELEMENT I2S EMPTY>
-<!ELEMENT IADD EMPTY>
-<!ELEMENT IALOAD EMPTY>
-<!ELEMENT IAND EMPTY>
-<!ELEMENT IASTORE EMPTY>
-<!ELEMENT ICONST_0 EMPTY>
-<!ELEMENT ICONST_1 EMPTY>
-<!ELEMENT ICONST_2 EMPTY>
-<!ELEMENT ICONST_3 EMPTY>
-<!ELEMENT ICONST_4 EMPTY>
-<!ELEMENT ICONST_5 EMPTY>
-<!ELEMENT ICONST_M1 EMPTY>
-<!ELEMENT IDIV EMPTY>
-<!ELEMENT IFEQ EMPTY>
-<!ATTLIST IFEQ label CDATA #REQUIRED>
-<!ELEMENT IFGE EMPTY>
-<!ATTLIST IFGE label CDATA #REQUIRED>
-<!ELEMENT IFGT EMPTY>
-<!ATTLIST IFGT label CDATA #REQUIRED>
-<!ELEMENT IFLE EMPTY>
-<!ATTLIST IFLE label CDATA #REQUIRED>
-<!ELEMENT IFLT EMPTY>
-<!ATTLIST IFLT label CDATA #REQUIRED>
-<!ELEMENT IFNE EMPTY>
-<!ATTLIST IFNE label CDATA #REQUIRED>
-<!ELEMENT IFNONNULL EMPTY>
-<!ATTLIST IFNONNULL label CDATA #REQUIRED>
-<!ELEMENT IFNULL EMPTY>
-<!ATTLIST IFNULL label CDATA #REQUIRED>
-<!ELEMENT IF_ACMPEQ EMPTY>
-<!ATTLIST IF_ACMPEQ label CDATA #REQUIRED>
-<!ELEMENT IF_ACMPNE EMPTY>
-<!ATTLIST IF_ACMPNE label CDATA #REQUIRED>
-<!ELEMENT IF_ICMPEQ EMPTY>
-<!ATTLIST IF_ICMPEQ label CDATA #REQUIRED>
-<!ELEMENT IF_ICMPGE EMPTY>
-<!ATTLIST IF_ICMPGE label CDATA #REQUIRED>
-<!ELEMENT IF_ICMPGT EMPTY>
-<!ATTLIST IF_ICMPGT label CDATA #REQUIRED>
-<!ELEMENT IF_ICMPLE EMPTY>
-<!ATTLIST IF_ICMPLE label CDATA #REQUIRED>
-<!ELEMENT IF_ICMPLT EMPTY>
-<!ATTLIST IF_ICMPLT label CDATA #REQUIRED>
-<!ELEMENT IF_ICMPNE EMPTY>
-<!ATTLIST IF_ICMPNE label CDATA #REQUIRED>
-<!ELEMENT IINC EMPTY>
-<!ATTLIST IINC inc CDATA #REQUIRED>
-<!ATTLIST IINC var CDATA #REQUIRED>
-<!ELEMENT ILOAD EMPTY>
-<!ATTLIST ILOAD var CDATA #REQUIRED>
-<!ELEMENT IMUL EMPTY>
-<!ELEMENT INEG EMPTY>
-<!ELEMENT INSTANCEOF EMPTY>
-<!ATTLIST INSTANCEOF desc CDATA #REQUIRED>
-<!ELEMENT INVOKEINTERFACE EMPTY>
-<!ATTLIST INVOKEINTERFACE desc CDATA #REQUIRED>
-<!ATTLIST INVOKEINTERFACE name CDATA #REQUIRED>
-<!ATTLIST INVOKEINTERFACE owner CDATA #REQUIRED>
-<!ELEMENT INVOKESPECIAL EMPTY>
-<!ATTLIST INVOKESPECIAL desc CDATA #REQUIRED>
-<!ATTLIST INVOKESPECIAL name CDATA #REQUIRED>
-<!ATTLIST INVOKESPECIAL owner CDATA #REQUIRED>
-<!ELEMENT INVOKESTATIC EMPTY>
-<!ATTLIST INVOKESTATIC desc CDATA #REQUIRED>
-<!ATTLIST INVOKESTATIC name CDATA #REQUIRED>
-<!ATTLIST INVOKESTATIC owner CDATA #REQUIRED>
-<!ELEMENT INVOKEVIRTUAL EMPTY>
-<!ATTLIST INVOKEVIRTUAL desc CDATA #REQUIRED>
-<!ATTLIST INVOKEVIRTUAL name CDATA #REQUIRED>
-<!ATTLIST INVOKEVIRTUAL owner CDATA #REQUIRED>
-<!ELEMENT INVOKEDYNAMIC ( bsmArgs+ )>
-<!ATTLIST INVOKEDYNAMIC desc CDATA #REQUIRED>
-<!ATTLIST INVOKEDYNAMIC name CDATA #REQUIRED>
-<!ATTLIST INVOKEDYNAMIC bsm CDATA #REQUIRED>
-<!ELEMENT bsmArgs EMPTY>
-<!ATTLIST bsmArgs cst CDATA #REQUIRED>
-<!ATTLIST bsmArgs desc CDATA #REQUIRED>
-<!ELEMENT IOR EMPTY>
-<!ELEMENT IREM EMPTY>
-<!ELEMENT IRETURN EMPTY>
-<!ELEMENT ISHL EMPTY>
-<!ELEMENT ISHR EMPTY>
-<!ELEMENT ISTORE EMPTY>
-<!ATTLIST ISTORE var CDATA #REQUIRED>
-<!ELEMENT ISUB EMPTY>
-<!ELEMENT IUSHR EMPTY>
-<!ELEMENT IXOR EMPTY>
-<!ELEMENT JSR EMPTY>
-<!ATTLIST JSR label CDATA #REQUIRED>
-<!ELEMENT L2D EMPTY>
-<!ELEMENT L2F EMPTY>
-<!ELEMENT L2I EMPTY>
-<!ELEMENT LADD EMPTY>
-<!ELEMENT LALOAD EMPTY>
-<!ELEMENT LAND EMPTY>
-<!ELEMENT LASTORE EMPTY>
-<!ELEMENT LCMP EMPTY>
-<!ELEMENT LCONST_0 EMPTY>
-<!ELEMENT LCONST_1 EMPTY>
-<!ELEMENT LDC EMPTY>
-<!--
-  All characters out of interval 0x20 to 0x7f (inclusive) must
-  be encoded (\uXXXX) and character '\' must be replaced by "\\"
--->
-<!ATTLIST LDC cst CDATA #REQUIRED>
-<!ATTLIST LDC desc CDATA #REQUIRED>
-<!ELEMENT LDIV EMPTY>
-<!ELEMENT LLOAD EMPTY>
-<!ATTLIST LLOAD var CDATA #REQUIRED>
-<!ELEMENT LMUL EMPTY>
-<!ELEMENT LNEG EMPTY>
-<!ELEMENT LOR EMPTY>
-<!ELEMENT LREM EMPTY>
-<!ELEMENT LRETURN EMPTY>
-<!ELEMENT LSHL EMPTY>
-<!ELEMENT LSHR EMPTY>
-<!ELEMENT LSTORE EMPTY>
-<!ATTLIST LSTORE var CDATA #REQUIRED>
-<!ELEMENT LSUB EMPTY>
-<!ELEMENT LUSHR EMPTY>
-<!ELEMENT LXOR EMPTY>
-<!ELEMENT MONITORENTER EMPTY>
-<!ELEMENT MONITOREXIT EMPTY>
-<!ELEMENT MULTIANEWARRAY EMPTY>
-<!ATTLIST MULTIANEWARRAY desc CDATA #REQUIRED>
-<!ATTLIST MULTIANEWARRAY dims CDATA #REQUIRED>
-<!ELEMENT NEW EMPTY>
-<!ATTLIST NEW desc CDATA #REQUIRED>
-<!ELEMENT NEWARRAY EMPTY>
-<!ATTLIST NEWARRAY value CDATA #REQUIRED>
-<!ELEMENT NOP EMPTY>
-<!ELEMENT POP EMPTY>
-<!ELEMENT POP2 EMPTY>
-<!ELEMENT PUTFIELD EMPTY>
-<!ATTLIST PUTFIELD desc CDATA #REQUIRED>
-<!ATTLIST PUTFIELD name CDATA #REQUIRED>
-<!ATTLIST PUTFIELD owner CDATA #REQUIRED>
-<!ELEMENT PUTSTATIC EMPTY>
-<!ATTLIST PUTSTATIC desc CDATA #REQUIRED>
-<!ATTLIST PUTSTATIC name CDATA #REQUIRED>
-<!ATTLIST PUTSTATIC owner CDATA #REQUIRED>
-<!ELEMENT RET EMPTY>
-<!ATTLIST RET var CDATA #REQUIRED>
-<!ELEMENT RETURN EMPTY>
-<!ELEMENT SALOAD EMPTY>
-<!ELEMENT SASTORE EMPTY>
-<!ELEMENT SIPUSH EMPTY>
-<!ATTLIST SIPUSH value CDATA #REQUIRED>
-
-<!ELEMENT LOOKUPSWITCH ( label+ )>
-<!ATTLIST LOOKUPSWITCH dflt CDATA #REQUIRED>
-
-<!ELEMENT TABLESWITCH ( label+ )>
-<!ATTLIST TABLESWITCH dflt CDATA #REQUIRED>
-<!ATTLIST TABLESWITCH max CDATA #REQUIRED>
-<!ATTLIST TABLESWITCH min CDATA #REQUIRED>
-
-<!ELEMENT label EMPTY>
-<!ATTLIST label key CDATA #IMPLIED>
-<!ATTLIST label name CDATA #REQUIRED>
-
diff --git a/asm4/src/org/objectweb/asm/xml/package.html b/asm4/src/org/objectweb/asm/xml/package.html
deleted file mode 100644
index d7bbe66..0000000
--- a/asm4/src/org/objectweb/asm/xml/package.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<html>
-<!--
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
--->
-<body>
-Provides <a href="http://sax.sourceforge.net/">SAX 2.0</a> adapters for ASM
-visitors to convert classes to and from XML.
-These adapters can be chained with other SAX compliant content handlers and
-filters, eg. XSLT or XQuery engines. This package is bundled as
-a separate <tt>asm-xml.jar</tt> library and requires <tt>asm.jar</tt>.
-<p>
-<tt>ASMContentHandler</tt> and <tt>SAXClassAdapter/SAXCodeAdapter</tt>
-are using <a href="asm-xml.dtd">asm-xml.dtd</a>.
-Here is the example of bytecode to bytecode XSLT transformation.
-
-<pre>
-    SAXTransformerFactory saxtf = ( SAXTransformerFactory) TransformerFactory.newInstance();
-    Templates templates = saxtf.newTemplates( xsltSource);
-
-    TransformerHandler handler = saxtf.newTransformerHandler( templates);
-    handler.setResult( new SAXResult( new ASMContentHandler( outputStream, computeMax)));
-
-    ClassReader cr = new ClassReader( bytecode);
-    cr.accept( new SAXClassAdapter( handler, cr.getVersion(), false), false);
-</pre>
-
-See JAXP and SAX documentation for more detils.
-
-<p>
-There are few illustrations of the bytecode transformation with XSLT in
-examples directory. The following XSLT procesors has been tested.
-
-<blockquote>
-<table border="1" cellspacing="0" cellpadding="3">
-<tr>
-<th>Engine</td>
-<th>javax.xml.transform.TransformerFactory property</td>
-</tr>
-
-<tr>
-<td>jd.xslt</td>
-<td>jd.xml.xslt.trax.TransformerFactoryImpl</td>
-</tr>
-
-<tr>
-<td>Saxon</td>
-<td>net.sf.saxon.TransformerFactoryImpl</td>
-</tr>
-
-<tr>
-<td>Caucho</td>
-<td>com.caucho.xsl.Xsl</td>
-</tr>
-
-<tr>
-<td>Xalan interpeter</td>
-<td>org.apache.xalan.processor.TransformerFactory</td>
-</tr>
-
-<tr>
-<td>Xalan xsltc</td>
-<td>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</td>
-</tr>
-</table>
-</blockquote>
-
-@since ASM 1.4.3
-
-</body>
-</html>
diff --git a/asm4/test/ASM.sig b/asm4/test/ASM.sig
deleted file mode 100644
index 5ce8979..0000000
--- a/asm4/test/ASM.sig
+++ /dev/null
@@ -1,2044 +0,0 @@
-#Signature file v4.1

-#Version 4.0

-

-CLSS public abstract interface java.io.Serializable

-

-CLSS public java.lang.Exception

-cons protected <init>(java.lang.String,java.lang.Throwable,boolean,boolean)

-cons public <init>()

-cons public <init>(java.lang.String)

-cons public <init>(java.lang.String,java.lang.Throwable)

-cons public <init>(java.lang.Throwable)

-supr java.lang.Throwable

-hfds serialVersionUID

-

-CLSS public java.lang.Object

-cons public <init>()

-meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException

-meth protected void finalize() throws java.lang.Throwable

-meth public boolean equals(java.lang.Object)

-meth public final java.lang.Class<?> getClass()

-meth public final void notify()

-meth public final void notifyAll()

-meth public final void wait() throws java.lang.InterruptedException

-meth public final void wait(long) throws java.lang.InterruptedException

-meth public final void wait(long,int) throws java.lang.InterruptedException

-meth public int hashCode()

-meth public java.lang.String toString()

-

-CLSS public java.lang.Throwable

-cons protected <init>(java.lang.String,java.lang.Throwable,boolean,boolean)

-cons public <init>()

-cons public <init>(java.lang.String)

-cons public <init>(java.lang.String,java.lang.Throwable)

-cons public <init>(java.lang.Throwable)

-intf java.io.Serializable

-meth public final java.lang.Throwable[] getSuppressed()

-meth public final void addSuppressed(java.lang.Throwable)

-meth public java.lang.StackTraceElement[] getStackTrace()

-meth public java.lang.String getLocalizedMessage()

-meth public java.lang.String getMessage()

-meth public java.lang.String toString()

-meth public java.lang.Throwable fillInStackTrace()

-meth public java.lang.Throwable getCause()

-meth public java.lang.Throwable initCause(java.lang.Throwable)

-meth public void printStackTrace()

-meth public void printStackTrace(java.io.PrintStream)

-meth public void printStackTrace(java.io.PrintWriter)

-meth public void setStackTrace(java.lang.StackTraceElement[])

-supr java.lang.Object

-hfds CAUSE_CAPTION,EMPTY_THROWABLE_ARRAY,NULL_CAUSE_MESSAGE,SELF_SUPPRESSION_MESSAGE,SUPPRESSED_CAPTION,SUPPRESSED_SENTINEL,UNASSIGNED_STACK,backtrace,cause,detailMessage,serialVersionUID,stackTrace,suppressedExceptions

-hcls PrintStreamOrWriter,SentinelHolder,WrappedPrintStream,WrappedPrintWriter

-

-CLSS public abstract org.objectweb.asm.AnnotationVisitor

-cons public <init>(int)

-cons public <init>(int,org.objectweb.asm.AnnotationVisitor)

-fld protected final int api

-fld protected org.objectweb.asm.AnnotationVisitor av

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitArray(java.lang.String)

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitEnd()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.Attribute

-cons protected <init>(java.lang.String)

-fld public final java.lang.String type

-meth protected org.objectweb.asm.Attribute read(org.objectweb.asm.ClassReader,int,int,char[],int,org.objectweb.asm.Label[])

-meth protected org.objectweb.asm.ByteVector write(org.objectweb.asm.ClassWriter,byte[],int,int,int)

-meth protected org.objectweb.asm.Label[] getLabels()

-meth public boolean isCodeAttribute()

-meth public boolean isUnknown()

-supr java.lang.Object

-hfds a,b

-

-CLSS public org.objectweb.asm.ByteVector

-cons public <init>()

-cons public <init>(int)

-meth public org.objectweb.asm.ByteVector putByte(int)

-meth public org.objectweb.asm.ByteVector putByteArray(byte[],int,int)

-meth public org.objectweb.asm.ByteVector putInt(int)

-meth public org.objectweb.asm.ByteVector putLong(long)

-meth public org.objectweb.asm.ByteVector putShort(int)

-meth public org.objectweb.asm.ByteVector putUTF8(java.lang.String)

-supr java.lang.Object

-hfds a,b

-

-CLSS public org.objectweb.asm.ClassReader

-cons public <init>(byte[])

-cons public <init>(byte[],int,int)

-cons public <init>(java.io.InputStream) throws java.io.IOException

-cons public <init>(java.lang.String) throws java.io.IOException

-fld public final byte[] b

-fld public final int header

-fld public final static int EXPAND_FRAMES = 8

-fld public final static int SKIP_CODE = 1

-fld public final static int SKIP_DEBUG = 2

-fld public final static int SKIP_FRAMES = 4

-meth protected org.objectweb.asm.Label readLabel(int,org.objectweb.asm.Label[])

-meth public int getAccess()

-meth public int getItem(int)

-meth public int getItemCount()

-meth public int getMaxStringLength()

-meth public int readByte(int)

-meth public int readInt(int)

-meth public int readUnsignedShort(int)

-meth public java.lang.Object readConst(int,char[])

-meth public java.lang.String getClassName()

-meth public java.lang.String getSuperName()

-meth public java.lang.String readClass(int,char[])

-meth public java.lang.String readUTF8(int,char[])

-meth public java.lang.String[] getInterfaces()

-meth public long readLong(int)

-meth public short readShort(int)

-meth public void accept(org.objectweb.asm.ClassVisitor,int)

-meth public void accept(org.objectweb.asm.ClassVisitor,org.objectweb.asm.Attribute[],int)

-supr java.lang.Object

-hfds a,c,d

-

-CLSS public abstract org.objectweb.asm.ClassVisitor

-cons public <init>(int)

-cons public <init>(int,org.objectweb.asm.ClassVisitor)

-fld protected final int api

-fld protected org.objectweb.asm.ClassVisitor cv

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.ClassWriter

-cons public <init>(int)

-cons public <init>(org.objectweb.asm.ClassReader,int)

-fld public final static int COMPUTE_FRAMES = 2

-fld public final static int COMPUTE_MAXS = 1

-meth protected java.lang.String getCommonSuperClass(java.lang.String,java.lang.String)

-meth public !varargs int newInvokeDynamic(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public byte[] toByteArray()

-meth public final org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public final org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public final org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public final void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public final void visitAttribute(org.objectweb.asm.Attribute)

-meth public final void visitEnd()

-meth public final void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public final void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public final void visitSource(java.lang.String,java.lang.String)

-meth public int newClass(java.lang.String)

-meth public int newConst(java.lang.Object)

-meth public int newField(java.lang.String,java.lang.String,java.lang.String)

-meth public int newHandle(int,java.lang.String,java.lang.String,java.lang.String)

-meth public int newMethod(java.lang.String,java.lang.String,java.lang.String,boolean)

-meth public int newMethodType(java.lang.String)

-meth public int newNameType(java.lang.String,java.lang.String)

-meth public int newUTF8(java.lang.String)

-supr org.objectweb.asm.ClassVisitor

-hfds A,B,C,D,E,G,H,I,J,K,L,M,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

-

-CLSS public abstract org.objectweb.asm.FieldVisitor

-cons public <init>(int)

-cons public <init>(int,org.objectweb.asm.FieldVisitor)

-fld protected final int api

-fld protected org.objectweb.asm.FieldVisitor fv

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-supr java.lang.Object

-

-CLSS public final org.objectweb.asm.Handle

-cons public <init>(int,java.lang.String,java.lang.String,java.lang.String)

-meth public boolean equals(java.lang.Object)

-meth public int getTag()

-meth public int hashCode()

-meth public java.lang.String getDesc()

-meth public java.lang.String getName()

-meth public java.lang.String getOwner()

-meth public java.lang.String toString()

-supr java.lang.Object

-hfds a,b,c,d

-

-CLSS public org.objectweb.asm.Label

-cons public <init>()

-fld public java.lang.Object info

-meth public int getOffset()

-meth public java.lang.String toString()

-supr java.lang.Object

-hfds a,b,c,d,e,f,g,h,i,j,k

-

-CLSS public abstract org.objectweb.asm.MethodVisitor

-cons public <init>(int)

-cons public <init>(int,org.objectweb.asm.MethodVisitor)

-fld protected final int api

-fld protected org.objectweb.asm.MethodVisitor mv

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()

-meth public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int,java.lang.String,boolean)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitCode()

-meth public void visitEnd()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLineNumber(int,org.objectweb.asm.Label)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr java.lang.Object

-

-CLSS public abstract interface org.objectweb.asm.Opcodes

-fld public final static int AALOAD = 50

-fld public final static int AASTORE = 83

-fld public final static int ACC_ABSTRACT = 1024

-fld public final static int ACC_ANNOTATION = 8192

-fld public final static int ACC_BRIDGE = 64

-fld public final static int ACC_DEPRECATED = 131072

-fld public final static int ACC_ENUM = 16384

-fld public final static int ACC_FINAL = 16

-fld public final static int ACC_INTERFACE = 512

-fld public final static int ACC_NATIVE = 256

-fld public final static int ACC_PRIVATE = 2

-fld public final static int ACC_PROTECTED = 4

-fld public final static int ACC_PUBLIC = 1

-fld public final static int ACC_STATIC = 8

-fld public final static int ACC_STRICT = 2048

-fld public final static int ACC_SUPER = 32

-fld public final static int ACC_SYNCHRONIZED = 32

-fld public final static int ACC_SYNTHETIC = 4096

-fld public final static int ACC_TRANSIENT = 128

-fld public final static int ACC_VARARGS = 128

-fld public final static int ACC_VOLATILE = 64

-fld public final static int ACONST_NULL = 1

-fld public final static int ALOAD = 25

-fld public final static int ANEWARRAY = 189

-fld public final static int ARETURN = 176

-fld public final static int ARRAYLENGTH = 190

-fld public final static int ASM4 = 262144

-fld public final static int ASTORE = 58

-fld public final static int ATHROW = 191

-fld public final static int BALOAD = 51

-fld public final static int BASTORE = 84

-fld public final static int BIPUSH = 16

-fld public final static int CALOAD = 52

-fld public final static int CASTORE = 85

-fld public final static int CHECKCAST = 192

-fld public final static int D2F = 144

-fld public final static int D2I = 142

-fld public final static int D2L = 143

-fld public final static int DADD = 99

-fld public final static int DALOAD = 49

-fld public final static int DASTORE = 82

-fld public final static int DCMPG = 152

-fld public final static int DCMPL = 151

-fld public final static int DCONST_0 = 14

-fld public final static int DCONST_1 = 15

-fld public final static int DDIV = 111

-fld public final static int DLOAD = 24

-fld public final static int DMUL = 107

-fld public final static int DNEG = 119

-fld public final static int DREM = 115

-fld public final static int DRETURN = 175

-fld public final static int DSTORE = 57

-fld public final static int DSUB = 103

-fld public final static int DUP = 89

-fld public final static int DUP2 = 92

-fld public final static int DUP2_X1 = 93

-fld public final static int DUP2_X2 = 94

-fld public final static int DUP_X1 = 90

-fld public final static int DUP_X2 = 91

-fld public final static int F2D = 141

-fld public final static int F2I = 139

-fld public final static int F2L = 140

-fld public final static int FADD = 98

-fld public final static int FALOAD = 48

-fld public final static int FASTORE = 81

-fld public final static int FCMPG = 150

-fld public final static int FCMPL = 149

-fld public final static int FCONST_0 = 11

-fld public final static int FCONST_1 = 12

-fld public final static int FCONST_2 = 13

-fld public final static int FDIV = 110

-fld public final static int FLOAD = 23

-fld public final static int FMUL = 106

-fld public final static int FNEG = 118

-fld public final static int FREM = 114

-fld public final static int FRETURN = 174

-fld public final static int FSTORE = 56

-fld public final static int FSUB = 102

-fld public final static int F_APPEND = 1

-fld public final static int F_CHOP = 2

-fld public final static int F_FULL = 0

-fld public final static int F_NEW = -1

-fld public final static int F_SAME = 3

-fld public final static int F_SAME1 = 4

-fld public final static int GETFIELD = 180

-fld public final static int GETSTATIC = 178

-fld public final static int GOTO = 167

-fld public final static int H_GETFIELD = 1

-fld public final static int H_GETSTATIC = 2

-fld public final static int H_INVOKEINTERFACE = 9

-fld public final static int H_INVOKESPECIAL = 7

-fld public final static int H_INVOKESTATIC = 6

-fld public final static int H_INVOKEVIRTUAL = 5

-fld public final static int H_NEWINVOKESPECIAL = 8

-fld public final static int H_PUTFIELD = 3

-fld public final static int H_PUTSTATIC = 4

-fld public final static int I2B = 145

-fld public final static int I2C = 146

-fld public final static int I2D = 135

-fld public final static int I2F = 134

-fld public final static int I2L = 133

-fld public final static int I2S = 147

-fld public final static int IADD = 96

-fld public final static int IALOAD = 46

-fld public final static int IAND = 126

-fld public final static int IASTORE = 79

-fld public final static int ICONST_0 = 3

-fld public final static int ICONST_1 = 4

-fld public final static int ICONST_2 = 5

-fld public final static int ICONST_3 = 6

-fld public final static int ICONST_4 = 7

-fld public final static int ICONST_5 = 8

-fld public final static int ICONST_M1 = 2

-fld public final static int IDIV = 108

-fld public final static int IFEQ = 153

-fld public final static int IFGE = 156

-fld public final static int IFGT = 157

-fld public final static int IFLE = 158

-fld public final static int IFLT = 155

-fld public final static int IFNE = 154

-fld public final static int IFNONNULL = 199

-fld public final static int IFNULL = 198

-fld public final static int IF_ACMPEQ = 165

-fld public final static int IF_ACMPNE = 166

-fld public final static int IF_ICMPEQ = 159

-fld public final static int IF_ICMPGE = 162

-fld public final static int IF_ICMPGT = 163

-fld public final static int IF_ICMPLE = 164

-fld public final static int IF_ICMPLT = 161

-fld public final static int IF_ICMPNE = 160

-fld public final static int IINC = 132

-fld public final static int ILOAD = 21

-fld public final static int IMUL = 104

-fld public final static int INEG = 116

-fld public final static int INSTANCEOF = 193

-fld public final static int INVOKEDYNAMIC = 186

-fld public final static int INVOKEINTERFACE = 185

-fld public final static int INVOKESPECIAL = 183

-fld public final static int INVOKESTATIC = 184

-fld public final static int INVOKEVIRTUAL = 182

-fld public final static int IOR = 128

-fld public final static int IREM = 112

-fld public final static int IRETURN = 172

-fld public final static int ISHL = 120

-fld public final static int ISHR = 122

-fld public final static int ISTORE = 54

-fld public final static int ISUB = 100

-fld public final static int IUSHR = 124

-fld public final static int IXOR = 130

-fld public final static int JSR = 168

-fld public final static int L2D = 138

-fld public final static int L2F = 137

-fld public final static int L2I = 136

-fld public final static int LADD = 97

-fld public final static int LALOAD = 47

-fld public final static int LAND = 127

-fld public final static int LASTORE = 80

-fld public final static int LCMP = 148

-fld public final static int LCONST_0 = 9

-fld public final static int LCONST_1 = 10

-fld public final static int LDC = 18

-fld public final static int LDIV = 109

-fld public final static int LLOAD = 22

-fld public final static int LMUL = 105

-fld public final static int LNEG = 117

-fld public final static int LOOKUPSWITCH = 171

-fld public final static int LOR = 129

-fld public final static int LREM = 113

-fld public final static int LRETURN = 173

-fld public final static int LSHL = 121

-fld public final static int LSHR = 123

-fld public final static int LSTORE = 55

-fld public final static int LSUB = 101

-fld public final static int LUSHR = 125

-fld public final static int LXOR = 131

-fld public final static int MONITORENTER = 194

-fld public final static int MONITOREXIT = 195

-fld public final static int MULTIANEWARRAY = 197

-fld public final static int NEW = 187

-fld public final static int NEWARRAY = 188

-fld public final static int NOP = 0

-fld public final static int POP = 87

-fld public final static int POP2 = 88

-fld public final static int PUTFIELD = 181

-fld public final static int PUTSTATIC = 179

-fld public final static int RET = 169

-fld public final static int RETURN = 177

-fld public final static int SALOAD = 53

-fld public final static int SASTORE = 86

-fld public final static int SIPUSH = 17

-fld public final static int SWAP = 95

-fld public final static int TABLESWITCH = 170

-fld public final static int T_BOOLEAN = 4

-fld public final static int T_BYTE = 8

-fld public final static int T_CHAR = 5

-fld public final static int T_DOUBLE = 7

-fld public final static int T_FLOAT = 6

-fld public final static int T_INT = 10

-fld public final static int T_LONG = 11

-fld public final static int T_SHORT = 9

-fld public final static int V1_1 = 196653

-fld public final static int V1_2 = 46

-fld public final static int V1_3 = 47

-fld public final static int V1_4 = 48

-fld public final static int V1_5 = 49

-fld public final static int V1_6 = 50

-fld public final static int V1_7 = 51

-fld public final static java.lang.Integer DOUBLE

-fld public final static java.lang.Integer FLOAT

-fld public final static java.lang.Integer INTEGER

-fld public final static java.lang.Integer LONG

-fld public final static java.lang.Integer NULL

-fld public final static java.lang.Integer TOP

-fld public final static java.lang.Integer UNINITIALIZED_THIS

-

-CLSS public org.objectweb.asm.Type

-fld public final static int ARRAY = 9

-fld public final static int BOOLEAN = 1

-fld public final static int BYTE = 3

-fld public final static int CHAR = 2

-fld public final static int DOUBLE = 8

-fld public final static int FLOAT = 6

-fld public final static int INT = 5

-fld public final static int LONG = 7

-fld public final static int METHOD = 11

-fld public final static int OBJECT = 10

-fld public final static int SHORT = 4

-fld public final static int VOID = 0

-fld public final static org.objectweb.asm.Type BOOLEAN_TYPE

-fld public final static org.objectweb.asm.Type BYTE_TYPE

-fld public final static org.objectweb.asm.Type CHAR_TYPE

-fld public final static org.objectweb.asm.Type DOUBLE_TYPE

-fld public final static org.objectweb.asm.Type FLOAT_TYPE

-fld public final static org.objectweb.asm.Type INT_TYPE

-fld public final static org.objectweb.asm.Type LONG_TYPE

-fld public final static org.objectweb.asm.Type SHORT_TYPE

-fld public final static org.objectweb.asm.Type VOID_TYPE

-meth public !varargs static java.lang.String getMethodDescriptor(org.objectweb.asm.Type,org.objectweb.asm.Type[])

-meth public !varargs static org.objectweb.asm.Type getMethodType(org.objectweb.asm.Type,org.objectweb.asm.Type[])

-meth public boolean equals(java.lang.Object)

-meth public int getArgumentsAndReturnSizes()

-meth public int getDimensions()

-meth public int getOpcode(int)

-meth public int getSize()

-meth public int getSort()

-meth public int hashCode()

-meth public java.lang.String getClassName()

-meth public java.lang.String getDescriptor()

-meth public java.lang.String getInternalName()

-meth public java.lang.String toString()

-meth public org.objectweb.asm.Type getElementType()

-meth public org.objectweb.asm.Type getReturnType()

-meth public org.objectweb.asm.Type[] getArgumentTypes()

-meth public static int getArgumentsAndReturnSizes(java.lang.String)

-meth public static java.lang.String getConstructorDescriptor(java.lang.reflect.Constructor)

-meth public static java.lang.String getDescriptor(java.lang.Class)

-meth public static java.lang.String getInternalName(java.lang.Class)

-meth public static java.lang.String getMethodDescriptor(java.lang.reflect.Method)

-meth public static org.objectweb.asm.Type getMethodType(java.lang.String)

-meth public static org.objectweb.asm.Type getObjectType(java.lang.String)

-meth public static org.objectweb.asm.Type getReturnType(java.lang.String)

-meth public static org.objectweb.asm.Type getReturnType(java.lang.reflect.Method)

-meth public static org.objectweb.asm.Type getType(java.lang.Class)

-meth public static org.objectweb.asm.Type getType(java.lang.String)

-meth public static org.objectweb.asm.Type getType(java.lang.reflect.Constructor)

-meth public static org.objectweb.asm.Type getType(java.lang.reflect.Method)

-meth public static org.objectweb.asm.Type[] getArgumentTypes(java.lang.String)

-meth public static org.objectweb.asm.Type[] getArgumentTypes(java.lang.reflect.Method)

-supr java.lang.Object

-hfds a,b,c,d

-

-CLSS public abstract org.objectweb.asm.commons.AdviceAdapter

-cons protected <init>(int,org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String)

-fld protected int methodAccess

-fld protected java.lang.String methodDesc

-intf org.objectweb.asm.Opcodes

-meth protected void onMethodEnter()

-meth protected void onMethodExit(int)

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public void visitCode()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.commons.GeneratorAdapter

-hfds OTHER,THIS,branches,constructor,stackFrame,superInitialized

-

-CLSS public org.objectweb.asm.commons.AnalyzerAdapter

-cons protected <init>(int,java.lang.String,int,java.lang.String,java.lang.String,org.objectweb.asm.MethodVisitor)

-cons public <init>(java.lang.String,int,java.lang.String,java.lang.String,org.objectweb.asm.MethodVisitor)

-fld public java.util.List locals

-fld public java.util.List stack

-fld public java.util.Map uninitializedTypes

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.MethodVisitor

-hfds labels,maxLocals,maxStack,owner

-

-CLSS public org.objectweb.asm.commons.CodeSizeEvaluator

-cons protected <init>(int,org.objectweb.asm.MethodVisitor)

-cons public <init>(org.objectweb.asm.MethodVisitor)

-intf org.objectweb.asm.Opcodes

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public int getMaxSize()

-meth public int getMinSize()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.MethodVisitor

-hfds maxSize,minSize

-

-CLSS public org.objectweb.asm.commons.GeneratorAdapter

-cons protected <init>(int,org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String)

-cons public <init>(int,org.objectweb.asm.commons.Method,java.lang.String,org.objectweb.asm.Type[],org.objectweb.asm.ClassVisitor)

-cons public <init>(int,org.objectweb.asm.commons.Method,org.objectweb.asm.MethodVisitor)

-cons public <init>(org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String)

-fld public final static int ADD = 96

-fld public final static int AND = 126

-fld public final static int DIV = 108

-fld public final static int EQ = 153

-fld public final static int GE = 156

-fld public final static int GT = 157

-fld public final static int LE = 158

-fld public final static int LT = 155

-fld public final static int MUL = 104

-fld public final static int NE = 154

-fld public final static int NEG = 116

-fld public final static int OR = 128

-fld public final static int REM = 112

-fld public final static int SHL = 120

-fld public final static int SHR = 122

-fld public final static int SUB = 100

-fld public final static int USHR = 124

-fld public final static int XOR = 130

-meth protected void setLocalType(int,org.objectweb.asm.Type)

-meth public !varargs void invokeDynamic(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public org.objectweb.asm.Label mark()

-meth public org.objectweb.asm.Label newLabel()

-meth public org.objectweb.asm.Type getLocalType(int)

-meth public void arrayLength()

-meth public void arrayLoad(org.objectweb.asm.Type)

-meth public void arrayStore(org.objectweb.asm.Type)

-meth public void box(org.objectweb.asm.Type)

-meth public void cast(org.objectweb.asm.Type,org.objectweb.asm.Type)

-meth public void catchException(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Type)

-meth public void checkCast(org.objectweb.asm.Type)

-meth public void dup()

-meth public void dup2()

-meth public void dup2X1()

-meth public void dup2X2()

-meth public void dupX1()

-meth public void dupX2()

-meth public void endMethod()

-meth public void getField(org.objectweb.asm.Type,java.lang.String,org.objectweb.asm.Type)

-meth public void getStatic(org.objectweb.asm.Type,java.lang.String,org.objectweb.asm.Type)

-meth public void goTo(org.objectweb.asm.Label)

-meth public void ifCmp(org.objectweb.asm.Type,int,org.objectweb.asm.Label)

-meth public void ifICmp(int,org.objectweb.asm.Label)

-meth public void ifNonNull(org.objectweb.asm.Label)

-meth public void ifNull(org.objectweb.asm.Label)

-meth public void ifZCmp(int,org.objectweb.asm.Label)

-meth public void iinc(int,int)

-meth public void instanceOf(org.objectweb.asm.Type)

-meth public void invokeConstructor(org.objectweb.asm.Type,org.objectweb.asm.commons.Method)

-meth public void invokeInterface(org.objectweb.asm.Type,org.objectweb.asm.commons.Method)

-meth public void invokeStatic(org.objectweb.asm.Type,org.objectweb.asm.commons.Method)

-meth public void invokeVirtual(org.objectweb.asm.Type,org.objectweb.asm.commons.Method)

-meth public void loadArg(int)

-meth public void loadArgArray()

-meth public void loadArgs()

-meth public void loadArgs(int,int)

-meth public void loadLocal(int)

-meth public void loadLocal(int,org.objectweb.asm.Type)

-meth public void loadThis()

-meth public void mark(org.objectweb.asm.Label)

-meth public void math(int,org.objectweb.asm.Type)

-meth public void monitorEnter()

-meth public void monitorExit()

-meth public void newArray(org.objectweb.asm.Type)

-meth public void newInstance(org.objectweb.asm.Type)

-meth public void not()

-meth public void pop()

-meth public void pop2()

-meth public void push(boolean)

-meth public void push(double)

-meth public void push(float)

-meth public void push(int)

-meth public void push(java.lang.String)

-meth public void push(long)

-meth public void push(org.objectweb.asm.Handle)

-meth public void push(org.objectweb.asm.Type)

-meth public void putField(org.objectweb.asm.Type,java.lang.String,org.objectweb.asm.Type)

-meth public void putStatic(org.objectweb.asm.Type,java.lang.String,org.objectweb.asm.Type)

-meth public void ret(int)

-meth public void returnValue()

-meth public void storeArg(int)

-meth public void storeLocal(int)

-meth public void storeLocal(int,org.objectweb.asm.Type)

-meth public void swap()

-meth public void swap(org.objectweb.asm.Type,org.objectweb.asm.Type)

-meth public void tableSwitch(int[],org.objectweb.asm.commons.TableSwitchGenerator)

-meth public void tableSwitch(int[],org.objectweb.asm.commons.TableSwitchGenerator,boolean)

-meth public void throwException()

-meth public void throwException(org.objectweb.asm.Type,java.lang.String)

-meth public void unbox(org.objectweb.asm.Type)

-meth public void valueOf(org.objectweb.asm.Type)

-supr org.objectweb.asm.commons.LocalVariablesSorter

-hfds BOOLEAN_TYPE,BOOLEAN_VALUE,BYTE_TYPE,CHARACTER_TYPE,CHAR_VALUE,CLDESC,DOUBLE_TYPE,DOUBLE_VALUE,FLOAT_TYPE,FLOAT_VALUE,INTEGER_TYPE,INT_VALUE,LONG_TYPE,LONG_VALUE,NUMBER_TYPE,OBJECT_TYPE,SHORT_TYPE,access,argumentTypes,localTypes,returnType

-

-CLSS public org.objectweb.asm.commons.InstructionAdapter

-cons protected <init>(int,org.objectweb.asm.MethodVisitor)

-cons public <init>(org.objectweb.asm.MethodVisitor)

-fld public final static org.objectweb.asm.Type OBJECT_TYPE

-meth public !varargs void tableswitch(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public void aconst(java.lang.Object)

-meth public void add(org.objectweb.asm.Type)

-meth public void aload(org.objectweb.asm.Type)

-meth public void and(org.objectweb.asm.Type)

-meth public void anew(org.objectweb.asm.Type)

-meth public void areturn(org.objectweb.asm.Type)

-meth public void arraylength()

-meth public void astore(org.objectweb.asm.Type)

-meth public void athrow()

-meth public void cast(org.objectweb.asm.Type,org.objectweb.asm.Type)

-meth public void checkcast(org.objectweb.asm.Type)

-meth public void cmpg(org.objectweb.asm.Type)

-meth public void cmpl(org.objectweb.asm.Type)

-meth public void dconst(double)

-meth public void div(org.objectweb.asm.Type)

-meth public void dup()

-meth public void dup2()

-meth public void dup2X1()

-meth public void dup2X2()

-meth public void dupX1()

-meth public void dupX2()

-meth public void fconst(float)

-meth public void getfield(java.lang.String,java.lang.String,java.lang.String)

-meth public void getstatic(java.lang.String,java.lang.String,java.lang.String)

-meth public void goTo(org.objectweb.asm.Label)

-meth public void hconst(org.objectweb.asm.Handle)

-meth public void iconst(int)

-meth public void ifacmpeq(org.objectweb.asm.Label)

-meth public void ifacmpne(org.objectweb.asm.Label)

-meth public void ifeq(org.objectweb.asm.Label)

-meth public void ifge(org.objectweb.asm.Label)

-meth public void ifgt(org.objectweb.asm.Label)

-meth public void ificmpeq(org.objectweb.asm.Label)

-meth public void ificmpge(org.objectweb.asm.Label)

-meth public void ificmpgt(org.objectweb.asm.Label)

-meth public void ificmple(org.objectweb.asm.Label)

-meth public void ificmplt(org.objectweb.asm.Label)

-meth public void ificmpne(org.objectweb.asm.Label)

-meth public void ifle(org.objectweb.asm.Label)

-meth public void iflt(org.objectweb.asm.Label)

-meth public void ifne(org.objectweb.asm.Label)

-meth public void ifnonnull(org.objectweb.asm.Label)

-meth public void ifnull(org.objectweb.asm.Label)

-meth public void iinc(int,int)

-meth public void instanceOf(org.objectweb.asm.Type)

-meth public void invokedynamic(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public void invokeinterface(java.lang.String,java.lang.String,java.lang.String)

-meth public void invokespecial(java.lang.String,java.lang.String,java.lang.String)

-meth public void invokestatic(java.lang.String,java.lang.String,java.lang.String)

-meth public void invokevirtual(java.lang.String,java.lang.String,java.lang.String)

-meth public void jsr(org.objectweb.asm.Label)

-meth public void lcmp()

-meth public void lconst(long)

-meth public void load(int,org.objectweb.asm.Type)

-meth public void lookupswitch(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void mark(org.objectweb.asm.Label)

-meth public void monitorenter()

-meth public void monitorexit()

-meth public void mul(org.objectweb.asm.Type)

-meth public void multianewarray(java.lang.String,int)

-meth public void neg(org.objectweb.asm.Type)

-meth public void newarray(org.objectweb.asm.Type)

-meth public void nop()

-meth public void or(org.objectweb.asm.Type)

-meth public void pop()

-meth public void pop2()

-meth public void putfield(java.lang.String,java.lang.String,java.lang.String)

-meth public void putstatic(java.lang.String,java.lang.String,java.lang.String)

-meth public void rem(org.objectweb.asm.Type)

-meth public void ret(int)

-meth public void shl(org.objectweb.asm.Type)

-meth public void shr(org.objectweb.asm.Type)

-meth public void store(int,org.objectweb.asm.Type)

-meth public void sub(org.objectweb.asm.Type)

-meth public void swap()

-meth public void tconst(org.objectweb.asm.Type)

-meth public void ushr(org.objectweb.asm.Type)

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-meth public void xor(org.objectweb.asm.Type)

-supr org.objectweb.asm.MethodVisitor

-

-CLSS public org.objectweb.asm.commons.JSRInlinerAdapter

-cons protected <init>(int,org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-cons public <init>(org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-intf org.objectweb.asm.Opcodes

-meth public void visitEnd()

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-supr org.objectweb.asm.tree.MethodNode

-hfds dualCitizens,mainSubroutine,subroutineHeads

-

-CLSS public org.objectweb.asm.commons.LocalVariablesSorter

-cons protected <init>(int,int,java.lang.String,org.objectweb.asm.MethodVisitor)

-cons public <init>(int,java.lang.String,org.objectweb.asm.MethodVisitor)

-fld protected final int firstLocal

-fld protected int nextLocal

-meth protected int newLocalMapping(org.objectweb.asm.Type)

-meth protected void setLocalType(int,org.objectweb.asm.Type)

-meth public int newLocal(org.objectweb.asm.Type)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitMaxs(int,int)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.MethodVisitor

-hfds OBJECT_TYPE,changed,mapping,newLocals

-

-CLSS public org.objectweb.asm.commons.Method

-cons public <init>(java.lang.String,java.lang.String)

-cons public <init>(java.lang.String,org.objectweb.asm.Type,org.objectweb.asm.Type[])

-meth public boolean equals(java.lang.Object)

-meth public int hashCode()

-meth public java.lang.String getDescriptor()

-meth public java.lang.String getName()

-meth public java.lang.String toString()

-meth public org.objectweb.asm.Type getReturnType()

-meth public org.objectweb.asm.Type[] getArgumentTypes()

-meth public static org.objectweb.asm.commons.Method getMethod(java.lang.String)

-meth public static org.objectweb.asm.commons.Method getMethod(java.lang.String,boolean)

-meth public static org.objectweb.asm.commons.Method getMethod(java.lang.reflect.Constructor)

-meth public static org.objectweb.asm.commons.Method getMethod(java.lang.reflect.Method)

-supr java.lang.Object

-hfds DESCRIPTORS,desc,name

-

-CLSS public abstract org.objectweb.asm.commons.Remapper

-cons public <init>()

-meth protected org.objectweb.asm.signature.SignatureVisitor createRemappingSignatureAdapter(org.objectweb.asm.signature.SignatureVisitor)

-meth public java.lang.Object mapValue(java.lang.Object)

-meth public java.lang.String map(java.lang.String)

-meth public java.lang.String mapDesc(java.lang.String)

-meth public java.lang.String mapFieldName(java.lang.String,java.lang.String,java.lang.String)

-meth public java.lang.String mapInvokeDynamicMethodName(java.lang.String,java.lang.String)

-meth public java.lang.String mapMethodDesc(java.lang.String)

-meth public java.lang.String mapMethodName(java.lang.String,java.lang.String,java.lang.String)

-meth public java.lang.String mapSignature(java.lang.String,boolean)

-meth public java.lang.String mapType(java.lang.String)

-meth public java.lang.String[] mapTypes(java.lang.String[])

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.commons.RemappingAnnotationAdapter

-cons protected <init>(int,org.objectweb.asm.AnnotationVisitor,org.objectweb.asm.commons.Remapper)

-cons public <init>(org.objectweb.asm.AnnotationVisitor,org.objectweb.asm.commons.Remapper)

-fld protected final org.objectweb.asm.commons.Remapper remapper

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitArray(java.lang.String)

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.AnnotationVisitor

-

-CLSS public org.objectweb.asm.commons.RemappingClassAdapter

-cons protected <init>(int,org.objectweb.asm.ClassVisitor,org.objectweb.asm.commons.Remapper)

-cons public <init>(org.objectweb.asm.ClassVisitor,org.objectweb.asm.commons.Remapper)

-fld protected final org.objectweb.asm.commons.Remapper remapper

-fld protected java.lang.String className

-meth protected org.objectweb.asm.AnnotationVisitor createRemappingAnnotationAdapter(org.objectweb.asm.AnnotationVisitor)

-meth protected org.objectweb.asm.FieldVisitor createRemappingFieldAdapter(org.objectweb.asm.FieldVisitor)

-meth protected org.objectweb.asm.MethodVisitor createRemappingMethodAdapter(int,java.lang.String,org.objectweb.asm.MethodVisitor)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.ClassVisitor

-

-CLSS public org.objectweb.asm.commons.RemappingFieldAdapter

-cons protected <init>(int,org.objectweb.asm.FieldVisitor,org.objectweb.asm.commons.Remapper)

-cons public <init>(org.objectweb.asm.FieldVisitor,org.objectweb.asm.commons.Remapper)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-supr org.objectweb.asm.FieldVisitor

-hfds remapper

-

-CLSS public org.objectweb.asm.commons.RemappingMethodAdapter

-cons protected <init>(int,int,java.lang.String,org.objectweb.asm.MethodVisitor,org.objectweb.asm.commons.Remapper)

-cons public <init>(int,java.lang.String,org.objectweb.asm.MethodVisitor,org.objectweb.asm.commons.Remapper)

-fld protected final org.objectweb.asm.commons.Remapper remapper

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()

-meth public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int,java.lang.String,boolean)

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-supr org.objectweb.asm.commons.LocalVariablesSorter

-

-CLSS public org.objectweb.asm.commons.RemappingSignatureAdapter

-cons protected <init>(int,org.objectweb.asm.signature.SignatureVisitor,org.objectweb.asm.commons.Remapper)

-cons public <init>(org.objectweb.asm.signature.SignatureVisitor,org.objectweb.asm.commons.Remapper)

-meth public org.objectweb.asm.signature.SignatureVisitor visitArrayType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitClassBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitExceptionType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterface()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterfaceBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitParameterType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitReturnType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitSuperclass()

-meth public org.objectweb.asm.signature.SignatureVisitor visitTypeArgument(char)

-meth public void visitBaseType(char)

-meth public void visitClassType(java.lang.String)

-meth public void visitEnd()

-meth public void visitFormalTypeParameter(java.lang.String)

-meth public void visitInnerClassType(java.lang.String)

-meth public void visitTypeArgument()

-meth public void visitTypeVariable(java.lang.String)

-supr org.objectweb.asm.signature.SignatureVisitor

-hfds className,remapper,v

-

-CLSS public org.objectweb.asm.commons.SerialVersionUIDAdder

-cons protected <init>(int,org.objectweb.asm.ClassVisitor)

-cons public <init>(org.objectweb.asm.ClassVisitor)

-meth protected byte[] computeSHAdigest(byte[])

-meth protected long computeSVUID() throws java.io.IOException

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitEnd()

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-supr org.objectweb.asm.ClassVisitor

-hfds access,computeSVUID,hasSVUID,hasStaticInitializer,interfaces,name,svuidConstructors,svuidFields,svuidMethods

-

-CLSS public org.objectweb.asm.commons.SimpleRemapper

-cons public <init>(java.lang.String,java.lang.String)

-cons public <init>(java.util.Map)

-meth public java.lang.String map(java.lang.String)

-meth public java.lang.String mapFieldName(java.lang.String,java.lang.String,java.lang.String)

-meth public java.lang.String mapMethodName(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.commons.Remapper

-hfds mapping

-

-CLSS public org.objectweb.asm.commons.StaticInitMerger

-cons protected <init>(int,java.lang.String,org.objectweb.asm.ClassVisitor)

-cons public <init>(java.lang.String,org.objectweb.asm.ClassVisitor)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitEnd()

-supr org.objectweb.asm.ClassVisitor

-hfds clinit,counter,name,prefix

-

-CLSS public abstract interface org.objectweb.asm.commons.TableSwitchGenerator

-meth public abstract void generateCase(int,org.objectweb.asm.Label)

-meth public abstract void generateDefault()

-

-CLSS public org.objectweb.asm.commons.TryCatchBlockSorter

-cons protected <init>(int,org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-cons public <init>(org.objectweb.asm.MethodVisitor,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitEnd()

-supr org.objectweb.asm.tree.MethodNode

-

-CLSS public org.objectweb.asm.signature.SignatureReader

-cons public <init>(java.lang.String)

-meth public void accept(org.objectweb.asm.signature.SignatureVisitor)

-meth public void acceptType(org.objectweb.asm.signature.SignatureVisitor)

-supr java.lang.Object

-hfds a

-

-CLSS public abstract org.objectweb.asm.signature.SignatureVisitor

-cons public <init>(int)

-fld protected final int api

-fld public final static char EXTENDS = '+'

-fld public final static char INSTANCEOF = '='

-fld public final static char SUPER = '-'

-meth public org.objectweb.asm.signature.SignatureVisitor visitArrayType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitClassBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitExceptionType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterface()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterfaceBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitParameterType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitReturnType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitSuperclass()

-meth public org.objectweb.asm.signature.SignatureVisitor visitTypeArgument(char)

-meth public void visitBaseType(char)

-meth public void visitClassType(java.lang.String)

-meth public void visitEnd()

-meth public void visitFormalTypeParameter(java.lang.String)

-meth public void visitInnerClassType(java.lang.String)

-meth public void visitTypeArgument()

-meth public void visitTypeVariable(java.lang.String)

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.signature.SignatureWriter

-cons public <init>()

-meth public java.lang.String toString()

-meth public org.objectweb.asm.signature.SignatureVisitor visitArrayType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitClassBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitExceptionType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterface()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterfaceBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitParameterType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitReturnType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitSuperclass()

-meth public org.objectweb.asm.signature.SignatureVisitor visitTypeArgument(char)

-meth public void visitBaseType(char)

-meth public void visitClassType(java.lang.String)

-meth public void visitEnd()

-meth public void visitFormalTypeParameter(java.lang.String)

-meth public void visitInnerClassType(java.lang.String)

-meth public void visitTypeArgument()

-meth public void visitTypeVariable(java.lang.String)

-supr org.objectweb.asm.signature.SignatureVisitor

-hfds a,b,c,d

-

-CLSS public abstract org.objectweb.asm.tree.AbstractInsnNode

-cons protected <init>(int)

-fld protected int opcode

-fld public final static int FIELD_INSN = 4

-fld public final static int FRAME = 14

-fld public final static int IINC_INSN = 10

-fld public final static int INSN = 0

-fld public final static int INT_INSN = 1

-fld public final static int INVOKE_DYNAMIC_INSN = 6

-fld public final static int JUMP_INSN = 7

-fld public final static int LABEL = 8

-fld public final static int LDC_INSN = 9

-fld public final static int LINE = 15

-fld public final static int LOOKUPSWITCH_INSN = 12

-fld public final static int METHOD_INSN = 5

-fld public final static int MULTIANEWARRAY_INSN = 13

-fld public final static int TABLESWITCH_INSN = 11

-fld public final static int TYPE_INSN = 3

-fld public final static int VAR_INSN = 2

-meth public abstract int getType()

-meth public abstract org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public abstract void accept(org.objectweb.asm.MethodVisitor)

-meth public int getOpcode()

-meth public org.objectweb.asm.tree.AbstractInsnNode getNext()

-meth public org.objectweb.asm.tree.AbstractInsnNode getPrevious()

-supr java.lang.Object

-hfds index,next,prev

-

-CLSS public org.objectweb.asm.tree.AnnotationNode

-cons public <init>(int,java.lang.String)

-cons public <init>(java.lang.String)

-fld public java.lang.String desc

-fld public java.util.List values

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitArray(java.lang.String)

-meth public void accept(org.objectweb.asm.AnnotationVisitor)

-meth public void check(int)

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitEnd()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.AnnotationVisitor

-

-CLSS public org.objectweb.asm.tree.ClassNode

-cons public <init>()

-cons public <init>(int)

-fld public int access

-fld public int version

-fld public java.lang.String name

-fld public java.lang.String outerClass

-fld public java.lang.String outerMethod

-fld public java.lang.String outerMethodDesc

-fld public java.lang.String signature

-fld public java.lang.String sourceDebug

-fld public java.lang.String sourceFile

-fld public java.lang.String superName

-fld public java.util.List attrs

-fld public java.util.List fields

-fld public java.util.List innerClasses

-fld public java.util.List interfaces

-fld public java.util.List invisibleAnnotations

-fld public java.util.List methods

-fld public java.util.List visibleAnnotations

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void accept(org.objectweb.asm.ClassVisitor)

-meth public void check(int)

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-supr org.objectweb.asm.ClassVisitor

-

-CLSS public org.objectweb.asm.tree.FieldInsnNode

-cons public <init>(int,java.lang.String,java.lang.String,java.lang.String)

-fld public java.lang.String desc

-fld public java.lang.String name

-fld public java.lang.String owner

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void setOpcode(int)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.FieldNode

-cons public <init>(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-cons public <init>(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-fld public int access

-fld public java.lang.Object value

-fld public java.lang.String desc

-fld public java.lang.String name

-fld public java.lang.String signature

-fld public java.util.List attrs

-fld public java.util.List invisibleAnnotations

-fld public java.util.List visibleAnnotations

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public void accept(org.objectweb.asm.ClassVisitor)

-meth public void check(int)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-supr org.objectweb.asm.FieldVisitor

-

-CLSS public org.objectweb.asm.tree.FrameNode

-cons public <init>(int,int,java.lang.Object[],int,java.lang.Object[])

-fld public int type

-fld public java.util.List local

-fld public java.util.List stack

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.IincInsnNode

-cons public <init>(int,int)

-fld public int incr

-fld public int var

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.InnerClassNode

-cons public <init>(java.lang.String,java.lang.String,java.lang.String,int)

-fld public int access

-fld public java.lang.String innerName

-fld public java.lang.String name

-fld public java.lang.String outerName

-meth public void accept(org.objectweb.asm.ClassVisitor)

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.tree.InsnList

-cons public <init>()

-meth public boolean contains(org.objectweb.asm.tree.AbstractInsnNode)

-meth public int indexOf(org.objectweb.asm.tree.AbstractInsnNode)

-meth public int size()

-meth public java.util.ListIterator iterator()

-meth public java.util.ListIterator iterator(int)

-meth public org.objectweb.asm.tree.AbstractInsnNode get(int)

-meth public org.objectweb.asm.tree.AbstractInsnNode getFirst()

-meth public org.objectweb.asm.tree.AbstractInsnNode getLast()

-meth public org.objectweb.asm.tree.AbstractInsnNode[] toArray()

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void add(org.objectweb.asm.tree.AbstractInsnNode)

-meth public void add(org.objectweb.asm.tree.InsnList)

-meth public void clear()

-meth public void insert(org.objectweb.asm.tree.AbstractInsnNode)

-meth public void insert(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.AbstractInsnNode)

-meth public void insert(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.InsnList)

-meth public void insert(org.objectweb.asm.tree.InsnList)

-meth public void insertBefore(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.AbstractInsnNode)

-meth public void insertBefore(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.InsnList)

-meth public void remove(org.objectweb.asm.tree.AbstractInsnNode)

-meth public void resetLabels()

-meth public void set(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.AbstractInsnNode)

-supr java.lang.Object

-hfds cache,first,last,size

-

-CLSS public org.objectweb.asm.tree.InsnNode

-cons public <init>(int)

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.IntInsnNode

-cons public <init>(int,int)

-fld public int operand

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void setOpcode(int)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.InvokeDynamicInsnNode

-cons public !varargs <init>(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-fld public java.lang.Object[] bsmArgs

-fld public java.lang.String desc

-fld public java.lang.String name

-fld public org.objectweb.asm.Handle bsm

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.JumpInsnNode

-cons public <init>(int,org.objectweb.asm.tree.LabelNode)

-fld public org.objectweb.asm.tree.LabelNode label

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void setOpcode(int)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.LabelNode

-cons public <init>()

-cons public <init>(org.objectweb.asm.Label)

-meth public int getType()

-meth public org.objectweb.asm.Label getLabel()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void resetLabel()

-supr org.objectweb.asm.tree.AbstractInsnNode

-hfds label

-

-CLSS public org.objectweb.asm.tree.LdcInsnNode

-cons public <init>(java.lang.Object)

-fld public java.lang.Object cst

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.LineNumberNode

-cons public <init>(int,org.objectweb.asm.tree.LabelNode)

-fld public int line

-fld public org.objectweb.asm.tree.LabelNode start

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.LocalVariableNode

-cons public <init>(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.tree.LabelNode,org.objectweb.asm.tree.LabelNode,int)

-fld public int index

-fld public java.lang.String desc

-fld public java.lang.String name

-fld public java.lang.String signature

-fld public org.objectweb.asm.tree.LabelNode end

-fld public org.objectweb.asm.tree.LabelNode start

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.tree.LookupSwitchInsnNode

-cons public <init>(org.objectweb.asm.tree.LabelNode,int[],org.objectweb.asm.tree.LabelNode[])

-fld public java.util.List keys

-fld public java.util.List labels

-fld public org.objectweb.asm.tree.LabelNode dflt

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.MethodInsnNode

-cons public <init>(int,java.lang.String,java.lang.String,java.lang.String)

-fld public java.lang.String desc

-fld public java.lang.String name

-fld public java.lang.String owner

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void setOpcode(int)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.MethodNode

-cons public <init>()

-cons public <init>(int)

-cons public <init>(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-cons public <init>(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-fld public int access

-fld public int maxLocals

-fld public int maxStack

-fld public java.lang.Object annotationDefault

-fld public java.lang.String desc

-fld public java.lang.String name

-fld public java.lang.String signature

-fld public java.util.List attrs

-fld public java.util.List exceptions

-fld public java.util.List invisibleAnnotations

-fld public java.util.List localVariables

-fld public java.util.List tryCatchBlocks

-fld public java.util.List visibleAnnotations

-fld public java.util.List[] invisibleParameterAnnotations

-fld public java.util.List[] visibleParameterAnnotations

-fld public org.objectweb.asm.tree.InsnList instructions

-meth protected org.objectweb.asm.tree.LabelNode getLabelNode(org.objectweb.asm.Label)

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()

-meth public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int,java.lang.String,boolean)

-meth public void accept(org.objectweb.asm.ClassVisitor)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void check(int)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitCode()

-meth public void visitEnd()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLineNumber(int,org.objectweb.asm.Label)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.MethodVisitor

-hfds visited

-

-CLSS public org.objectweb.asm.tree.MultiANewArrayInsnNode

-cons public <init>(java.lang.String,int)

-fld public int dims

-fld public java.lang.String desc

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.TableSwitchInsnNode

-cons public !varargs <init>(int,int,org.objectweb.asm.tree.LabelNode,org.objectweb.asm.tree.LabelNode[])

-fld public int max

-fld public int min

-fld public java.util.List labels

-fld public org.objectweb.asm.tree.LabelNode dflt

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.TryCatchBlockNode

-cons public <init>(org.objectweb.asm.tree.LabelNode,org.objectweb.asm.tree.LabelNode,org.objectweb.asm.tree.LabelNode,java.lang.String)

-fld public java.lang.String type

-fld public org.objectweb.asm.tree.LabelNode end

-fld public org.objectweb.asm.tree.LabelNode handler

-fld public org.objectweb.asm.tree.LabelNode start

-meth public void accept(org.objectweb.asm.MethodVisitor)

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.tree.TypeInsnNode

-cons public <init>(int,java.lang.String)

-fld public java.lang.String desc

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void setOpcode(int)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.VarInsnNode

-cons public <init>(int,int)

-fld public int var

-meth public int getType()

-meth public org.objectweb.asm.tree.AbstractInsnNode clone(java.util.Map)

-meth public void accept(org.objectweb.asm.MethodVisitor)

-meth public void setOpcode(int)

-supr org.objectweb.asm.tree.AbstractInsnNode

-

-CLSS public org.objectweb.asm.tree.analysis.Analyzer

-cons public <init>(org.objectweb.asm.tree.analysis.Interpreter)

-intf org.objectweb.asm.Opcodes

-meth protected boolean newControlFlowExceptionEdge(int,int)

-meth protected boolean newControlFlowExceptionEdge(int,org.objectweb.asm.tree.TryCatchBlockNode)

-meth protected org.objectweb.asm.tree.analysis.Frame newFrame(int,int)

-meth protected org.objectweb.asm.tree.analysis.Frame newFrame(org.objectweb.asm.tree.analysis.Frame)

-meth protected void init(java.lang.String,org.objectweb.asm.tree.MethodNode) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth protected void newControlFlowEdge(int,int)

-meth public java.util.List getHandlers(int)

-meth public org.objectweb.asm.tree.analysis.Frame[] analyze(java.lang.String,org.objectweb.asm.tree.MethodNode) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Frame[] getFrames()

-supr java.lang.Object

-hfds frames,handlers,insns,interpreter,n,queue,queued,subroutines,top

-

-CLSS public org.objectweb.asm.tree.analysis.AnalyzerException

-cons public <init>(org.objectweb.asm.tree.AbstractInsnNode,java.lang.String)

-cons public <init>(org.objectweb.asm.tree.AbstractInsnNode,java.lang.String,java.lang.Object,org.objectweb.asm.tree.analysis.Value)

-cons public <init>(org.objectweb.asm.tree.AbstractInsnNode,java.lang.String,java.lang.Throwable)

-fld public final org.objectweb.asm.tree.AbstractInsnNode node

-supr java.lang.Exception

-

-CLSS public org.objectweb.asm.tree.analysis.BasicInterpreter

-cons protected <init>(int)

-cons public <init>()

-intf org.objectweb.asm.Opcodes

-meth public org.objectweb.asm.tree.analysis.BasicValue binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue merge(org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue)

-meth public org.objectweb.asm.tree.analysis.BasicValue naryOperation(org.objectweb.asm.tree.AbstractInsnNode,java.util.List) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue newOperation(org.objectweb.asm.tree.AbstractInsnNode) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue newValue(org.objectweb.asm.Type)

-meth public org.objectweb.asm.tree.analysis.BasicValue ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value merge(org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value)

-meth public org.objectweb.asm.tree.analysis.Value ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-supr org.objectweb.asm.tree.analysis.Interpreter

-

-CLSS public org.objectweb.asm.tree.analysis.BasicValue

-cons public <init>(org.objectweb.asm.Type)

-fld public final static org.objectweb.asm.tree.analysis.BasicValue DOUBLE_VALUE

-fld public final static org.objectweb.asm.tree.analysis.BasicValue FLOAT_VALUE

-fld public final static org.objectweb.asm.tree.analysis.BasicValue INT_VALUE

-fld public final static org.objectweb.asm.tree.analysis.BasicValue LONG_VALUE

-fld public final static org.objectweb.asm.tree.analysis.BasicValue REFERENCE_VALUE

-fld public final static org.objectweb.asm.tree.analysis.BasicValue RETURNADDRESS_VALUE

-fld public final static org.objectweb.asm.tree.analysis.BasicValue UNINITIALIZED_VALUE

-intf org.objectweb.asm.tree.analysis.Value

-meth public boolean equals(java.lang.Object)

-meth public boolean isReference()

-meth public int getSize()

-meth public int hashCode()

-meth public java.lang.String toString()

-meth public org.objectweb.asm.Type getType()

-supr java.lang.Object

-hfds type

-

-CLSS public org.objectweb.asm.tree.analysis.BasicVerifier

-cons protected <init>(int)

-cons public <init>()

-meth protected boolean isArrayValue(org.objectweb.asm.tree.analysis.BasicValue)

-meth protected boolean isSubTypeOf(org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue)

-meth protected org.objectweb.asm.tree.analysis.BasicValue getElementValue(org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-supr org.objectweb.asm.tree.analysis.BasicInterpreter

-

-CLSS public org.objectweb.asm.tree.analysis.Frame

-cons public <init>(int,int)

-cons public <init>(org.objectweb.asm.tree.analysis.Frame)

-meth public boolean merge(org.objectweb.asm.tree.analysis.Frame,boolean[])

-meth public boolean merge(org.objectweb.asm.tree.analysis.Frame,org.objectweb.asm.tree.analysis.Interpreter) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public int getLocals()

-meth public int getStackSize()

-meth public java.lang.String toString()

-meth public org.objectweb.asm.tree.analysis.Frame init(org.objectweb.asm.tree.analysis.Frame)

-meth public org.objectweb.asm.tree.analysis.Value getLocal(int)

-meth public org.objectweb.asm.tree.analysis.Value getStack(int)

-meth public org.objectweb.asm.tree.analysis.Value pop()

-meth public void clearStack()

-meth public void execute(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Interpreter) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public void push(org.objectweb.asm.tree.analysis.Value)

-meth public void setLocal(int,org.objectweb.asm.tree.analysis.Value)

-meth public void setReturn(org.objectweb.asm.tree.analysis.Value)

-supr java.lang.Object

-hfds locals,returnValue,top,values

-

-CLSS public abstract org.objectweb.asm.tree.analysis.Interpreter

-cons protected <init>(int)

-fld protected final int api

-meth public abstract org.objectweb.asm.tree.analysis.Value binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public abstract org.objectweb.asm.tree.analysis.Value copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public abstract org.objectweb.asm.tree.analysis.Value merge(org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value)

-meth public abstract org.objectweb.asm.tree.analysis.Value naryOperation(org.objectweb.asm.tree.AbstractInsnNode,java.util.List) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public abstract org.objectweb.asm.tree.analysis.Value newOperation(org.objectweb.asm.tree.AbstractInsnNode) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public abstract org.objectweb.asm.tree.analysis.Value newValue(org.objectweb.asm.Type)

-meth public abstract org.objectweb.asm.tree.analysis.Value ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public abstract org.objectweb.asm.tree.analysis.Value unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public abstract void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-supr java.lang.Object

-

-CLSS public org.objectweb.asm.tree.analysis.SimpleVerifier

-cons protected <init>(int,org.objectweb.asm.Type,org.objectweb.asm.Type,java.util.List,boolean)

-cons public <init>()

-cons public <init>(org.objectweb.asm.Type,org.objectweb.asm.Type,boolean)

-cons public <init>(org.objectweb.asm.Type,org.objectweb.asm.Type,java.util.List,boolean)

-meth protected boolean isArrayValue(org.objectweb.asm.tree.analysis.BasicValue)

-meth protected boolean isAssignableFrom(org.objectweb.asm.Type,org.objectweb.asm.Type)

-meth protected boolean isInterface(org.objectweb.asm.Type)

-meth protected boolean isSubTypeOf(org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue)

-meth protected java.lang.Class getClass(org.objectweb.asm.Type)

-meth protected org.objectweb.asm.Type getSuperClass(org.objectweb.asm.Type)

-meth protected org.objectweb.asm.tree.analysis.BasicValue getElementValue(org.objectweb.asm.tree.analysis.BasicValue) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.BasicValue merge(org.objectweb.asm.tree.analysis.BasicValue,org.objectweb.asm.tree.analysis.BasicValue)

-meth public org.objectweb.asm.tree.analysis.Value merge(org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value)

-meth public void setClassLoader(java.lang.ClassLoader)

-supr org.objectweb.asm.tree.analysis.BasicVerifier

-hfds class$java$lang$Object,currentClass,currentClassInterfaces,currentSuperClass,isInterface,loader

-

-CLSS public org.objectweb.asm.tree.analysis.SourceInterpreter

-cons protected <init>(int)

-cons public <init>()

-intf org.objectweb.asm.Opcodes

-meth public org.objectweb.asm.tree.analysis.SourceValue binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.SourceValue,org.objectweb.asm.tree.analysis.SourceValue)

-meth public org.objectweb.asm.tree.analysis.SourceValue copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.SourceValue)

-meth public org.objectweb.asm.tree.analysis.SourceValue merge(org.objectweb.asm.tree.analysis.SourceValue,org.objectweb.asm.tree.analysis.SourceValue)

-meth public org.objectweb.asm.tree.analysis.SourceValue naryOperation(org.objectweb.asm.tree.AbstractInsnNode,java.util.List)

-meth public org.objectweb.asm.tree.analysis.SourceValue newOperation(org.objectweb.asm.tree.AbstractInsnNode)

-meth public org.objectweb.asm.tree.analysis.SourceValue newValue(org.objectweb.asm.Type)

-meth public org.objectweb.asm.tree.analysis.SourceValue ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.SourceValue,org.objectweb.asm.tree.analysis.SourceValue,org.objectweb.asm.tree.analysis.SourceValue)

-meth public org.objectweb.asm.tree.analysis.SourceValue unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.SourceValue)

-meth public org.objectweb.asm.tree.analysis.Value binaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value copyOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value merge(org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value)

-meth public org.objectweb.asm.tree.analysis.Value ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public org.objectweb.asm.tree.analysis.Value unaryOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-meth public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.SourceValue,org.objectweb.asm.tree.analysis.SourceValue)

-meth public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode,org.objectweb.asm.tree.analysis.Value,org.objectweb.asm.tree.analysis.Value) throws org.objectweb.asm.tree.analysis.AnalyzerException

-supr org.objectweb.asm.tree.analysis.Interpreter

-

-CLSS public org.objectweb.asm.tree.analysis.SourceValue

-cons public <init>(int)

-cons public <init>(int,java.util.Set)

-cons public <init>(int,org.objectweb.asm.tree.AbstractInsnNode)

-fld public final int size

-fld public final java.util.Set insns

-intf org.objectweb.asm.tree.analysis.Value

-meth public boolean equals(java.lang.Object)

-meth public int getSize()

-meth public int hashCode()

-supr java.lang.Object

-

-CLSS public abstract interface org.objectweb.asm.tree.analysis.Value

-meth public abstract int getSize()

-

-CLSS public abstract interface org.objectweb.asm.util.ASMifiable

-meth public abstract void asmify(java.lang.StringBuffer,java.lang.String,java.util.Map)

-

-CLSS public org.objectweb.asm.util.ASMifier

-cons protected <init>(int,java.lang.String,int)

-cons public <init>()

-fld protected final int id

-fld protected final java.lang.String name

-fld protected java.util.Map labelNames

-meth protected org.objectweb.asm.util.ASMifier createASMifier(java.lang.String,int)

-meth protected void appendConstant(java.lang.Object)

-meth protected void appendLabel(org.objectweb.asm.Label)

-meth protected void declareLabel(org.objectweb.asm.Label)

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public org.objectweb.asm.util.ASMifier visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.ASMifier visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.util.ASMifier visitAnnotationDefault()

-meth public org.objectweb.asm.util.ASMifier visitArray(java.lang.String)

-meth public org.objectweb.asm.util.ASMifier visitClassAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.ASMifier visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.util.ASMifier visitFieldAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.ASMifier visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public org.objectweb.asm.util.ASMifier visitMethodAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.ASMifier visitParameterAnnotation(int,java.lang.String,boolean)

-meth public static void main(java.lang.String[]) throws java.lang.Exception

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitAnnotationEnd()

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitClassAttribute(org.objectweb.asm.Attribute)

-meth public void visitClassEnd()

-meth public void visitCode()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFieldAttribute(org.objectweb.asm.Attribute)

-meth public void visitFieldEnd()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLineNumber(int,org.objectweb.asm.Label)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodAttribute(org.objectweb.asm.Attribute)

-meth public void visitMethodEnd()

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.util.Printer

-

-CLSS public org.objectweb.asm.util.CheckAnnotationAdapter

-cons public <init>(org.objectweb.asm.AnnotationVisitor)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitArray(java.lang.String)

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitEnd()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.AnnotationVisitor

-hfds end,named

-

-CLSS public org.objectweb.asm.util.CheckClassAdapter

-cons protected <init>(int,org.objectweb.asm.ClassVisitor,boolean)

-cons public <init>(org.objectweb.asm.ClassVisitor)

-cons public <init>(org.objectweb.asm.ClassVisitor,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public static void main(java.lang.String[]) throws java.lang.Exception

-meth public static void verify(org.objectweb.asm.ClassReader,boolean,java.io.PrintWriter)

-meth public static void verify(org.objectweb.asm.ClassReader,java.lang.ClassLoader,boolean,java.io.PrintWriter)

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-supr org.objectweb.asm.ClassVisitor

-hfds checkDataFlow,end,labels,outer,source,start,version

-

-CLSS public org.objectweb.asm.util.CheckFieldAdapter

-cons protected <init>(int,org.objectweb.asm.FieldVisitor)

-cons public <init>(org.objectweb.asm.FieldVisitor)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-supr org.objectweb.asm.FieldVisitor

-hfds end

-

-CLSS public org.objectweb.asm.util.CheckMethodAdapter

-cons protected <init>(int,org.objectweb.asm.MethodVisitor,java.util.Map)

-cons public <init>(int,java.lang.String,java.lang.String,org.objectweb.asm.MethodVisitor,java.util.Map)

-cons public <init>(org.objectweb.asm.MethodVisitor)

-cons public <init>(org.objectweb.asm.MethodVisitor,java.util.Map)

-fld public int version

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()

-meth public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int,java.lang.String,boolean)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitCode()

-meth public void visitEnd()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLineNumber(int,org.objectweb.asm.Label)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.MethodVisitor

-hfds TYPE,class$org$objectweb$asm$Label,endCode,endMethod,handlers,insnCount,labelStatusField,labels,startCode,usedLabels

-

-CLSS public org.objectweb.asm.util.CheckSignatureAdapter

-cons protected <init>(int,int,org.objectweb.asm.signature.SignatureVisitor)

-cons public <init>(int,org.objectweb.asm.signature.SignatureVisitor)

-fld public final static int CLASS_SIGNATURE = 0

-fld public final static int METHOD_SIGNATURE = 1

-fld public final static int TYPE_SIGNATURE = 2

-meth public org.objectweb.asm.signature.SignatureVisitor visitArrayType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitClassBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitExceptionType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterface()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterfaceBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitParameterType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitReturnType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitSuperclass()

-meth public org.objectweb.asm.signature.SignatureVisitor visitTypeArgument(char)

-meth public void visitBaseType(char)

-meth public void visitClassType(java.lang.String)

-meth public void visitEnd()

-meth public void visitFormalTypeParameter(java.lang.String)

-meth public void visitInnerClassType(java.lang.String)

-meth public void visitTypeArgument()

-meth public void visitTypeVariable(java.lang.String)

-supr org.objectweb.asm.signature.SignatureVisitor

-hfds canBeVoid,state,sv,type

-

-CLSS public abstract org.objectweb.asm.util.Printer

-cons protected <init>(int)

-fld protected final int api

-fld protected final java.lang.StringBuffer buf

-fld public final java.util.List text

-fld public final static java.lang.String[] HANDLE_TAG

-fld public final static java.lang.String[] OPCODES

-fld public final static java.lang.String[] TYPES

-meth public abstract !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public abstract !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public abstract org.objectweb.asm.util.Printer visitAnnotation(java.lang.String,java.lang.String)

-meth public abstract org.objectweb.asm.util.Printer visitAnnotationDefault()

-meth public abstract org.objectweb.asm.util.Printer visitArray(java.lang.String)

-meth public abstract org.objectweb.asm.util.Printer visitClassAnnotation(java.lang.String,boolean)

-meth public abstract org.objectweb.asm.util.Printer visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public abstract org.objectweb.asm.util.Printer visitFieldAnnotation(java.lang.String,boolean)

-meth public abstract org.objectweb.asm.util.Printer visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public abstract org.objectweb.asm.util.Printer visitMethodAnnotation(java.lang.String,boolean)

-meth public abstract org.objectweb.asm.util.Printer visitParameterAnnotation(int,java.lang.String,boolean)

-meth public abstract void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public abstract void visit(java.lang.String,java.lang.Object)

-meth public abstract void visitAnnotationEnd()

-meth public abstract void visitClassAttribute(org.objectweb.asm.Attribute)

-meth public abstract void visitClassEnd()

-meth public abstract void visitCode()

-meth public abstract void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-meth public abstract void visitFieldAttribute(org.objectweb.asm.Attribute)

-meth public abstract void visitFieldEnd()

-meth public abstract void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public abstract void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public abstract void visitIincInsn(int,int)

-meth public abstract void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public abstract void visitInsn(int)

-meth public abstract void visitIntInsn(int,int)

-meth public abstract void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public abstract void visitLabel(org.objectweb.asm.Label)

-meth public abstract void visitLdcInsn(java.lang.Object)

-meth public abstract void visitLineNumber(int,org.objectweb.asm.Label)

-meth public abstract void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public abstract void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public abstract void visitMaxs(int,int)

-meth public abstract void visitMethodAttribute(org.objectweb.asm.Attribute)

-meth public abstract void visitMethodEnd()

-meth public abstract void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public abstract void visitMultiANewArrayInsn(java.lang.String,int)

-meth public abstract void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public abstract void visitSource(java.lang.String,java.lang.String)

-meth public abstract void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public abstract void visitTypeInsn(int,java.lang.String)

-meth public abstract void visitVarInsn(int,int)

-meth public java.util.List getText()

-meth public static void appendString(java.lang.StringBuffer,java.lang.String)

-meth public void print(java.io.PrintWriter)

-supr java.lang.Object

-

-CLSS public abstract interface org.objectweb.asm.util.Textifiable

-meth public abstract void textify(java.lang.StringBuffer,java.util.Map)

-

-CLSS public org.objectweb.asm.util.Textifier

-cons protected <init>(int)

-cons public <init>()

-fld protected java.lang.String ltab

-fld protected java.lang.String tab

-fld protected java.lang.String tab2

-fld protected java.lang.String tab3

-fld protected java.util.Map labelNames

-fld public final static int CLASS_DECLARATION = 7

-fld public final static int CLASS_SIGNATURE = 5

-fld public final static int FIELD_DESCRIPTOR = 1

-fld public final static int FIELD_SIGNATURE = 2

-fld public final static int HANDLE_DESCRIPTOR = 9

-fld public final static int INTERNAL_NAME = 0

-fld public final static int METHOD_DESCRIPTOR = 3

-fld public final static int METHOD_SIGNATURE = 4

-fld public final static int PARAMETERS_DECLARATION = 8

-fld public final static int TYPE_DECLARATION = 6

-meth protected org.objectweb.asm.util.Textifier createTextifier()

-meth protected void appendDescriptor(int,java.lang.String)

-meth protected void appendHandle(org.objectweb.asm.Handle)

-meth protected void appendLabel(org.objectweb.asm.Label)

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public org.objectweb.asm.util.Textifier visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.Textifier visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.util.Textifier visitAnnotationDefault()

-meth public org.objectweb.asm.util.Textifier visitArray(java.lang.String)

-meth public org.objectweb.asm.util.Textifier visitClassAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.Textifier visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.util.Textifier visitFieldAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.Textifier visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public org.objectweb.asm.util.Textifier visitMethodAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.util.Textifier visitParameterAnnotation(int,java.lang.String,boolean)

-meth public static void main(java.lang.String[]) throws java.lang.Exception

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitAnnotationEnd()

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitClassAttribute(org.objectweb.asm.Attribute)

-meth public void visitClassEnd()

-meth public void visitCode()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFieldAttribute(org.objectweb.asm.Attribute)

-meth public void visitFieldEnd()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLineNumber(int,org.objectweb.asm.Label)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodAttribute(org.objectweb.asm.Attribute)

-meth public void visitMethodEnd()

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.util.Printer

-hfds valueNumber

-

-CLSS public final org.objectweb.asm.util.TraceAnnotationVisitor

-cons public <init>(org.objectweb.asm.AnnotationVisitor,org.objectweb.asm.util.Printer)

-cons public <init>(org.objectweb.asm.util.Printer)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitArray(java.lang.String)

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitEnd()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.AnnotationVisitor

-hfds p

-

-CLSS public final org.objectweb.asm.util.TraceClassVisitor

-cons public <init>(java.io.PrintWriter)

-cons public <init>(org.objectweb.asm.ClassVisitor,java.io.PrintWriter)

-cons public <init>(org.objectweb.asm.ClassVisitor,org.objectweb.asm.util.Printer,java.io.PrintWriter)

-fld public final org.objectweb.asm.util.Printer p

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-meth public void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-supr org.objectweb.asm.ClassVisitor

-hfds pw

-

-CLSS public final org.objectweb.asm.util.TraceFieldVisitor

-cons public <init>(org.objectweb.asm.FieldVisitor,org.objectweb.asm.util.Printer)

-cons public <init>(org.objectweb.asm.util.Printer)

-fld public final org.objectweb.asm.util.Printer p

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitEnd()

-supr org.objectweb.asm.FieldVisitor

-

-CLSS public final org.objectweb.asm.util.TraceMethodVisitor

-cons public <init>(org.objectweb.asm.MethodVisitor,org.objectweb.asm.util.Printer)

-cons public <init>(org.objectweb.asm.util.Printer)

-fld public final org.objectweb.asm.util.Printer p

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public !varargs void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()

-meth public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int,java.lang.String,boolean)

-meth public void visitAttribute(org.objectweb.asm.Attribute)

-meth public void visitCode()

-meth public void visitEnd()

-meth public void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitIincInsn(int,int)

-meth public void visitInsn(int)

-meth public void visitIntInsn(int,int)

-meth public void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public void visitLabel(org.objectweb.asm.Label)

-meth public void visitLdcInsn(java.lang.Object)

-meth public void visitLineNumber(int,org.objectweb.asm.Label)

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-meth public void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public void visitMaxs(int,int)

-meth public void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public void visitMultiANewArrayInsn(java.lang.String,int)

-meth public void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public void visitTypeInsn(int,java.lang.String)

-meth public void visitVarInsn(int,int)

-supr org.objectweb.asm.MethodVisitor

-

-CLSS public final org.objectweb.asm.util.TraceSignatureVisitor

-cons public <init>(int)

-meth public java.lang.String getDeclaration()

-meth public java.lang.String getExceptions()

-meth public java.lang.String getReturnType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitArrayType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitClassBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitExceptionType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterface()

-meth public org.objectweb.asm.signature.SignatureVisitor visitInterfaceBound()

-meth public org.objectweb.asm.signature.SignatureVisitor visitParameterType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitReturnType()

-meth public org.objectweb.asm.signature.SignatureVisitor visitSuperclass()

-meth public org.objectweb.asm.signature.SignatureVisitor visitTypeArgument(char)

-meth public void visitBaseType(char)

-meth public void visitClassType(java.lang.String)

-meth public void visitEnd()

-meth public void visitFormalTypeParameter(java.lang.String)

-meth public void visitInnerClassType(java.lang.String)

-meth public void visitTypeArgument()

-meth public void visitTypeVariable(java.lang.String)

-supr org.objectweb.asm.signature.SignatureVisitor

-hfds argumentStack,arrayStack,declaration,exceptions,isInterface,returnType,seenFormalParameter,seenInterface,seenInterfaceBound,seenParameter,separator

-

-CLSS public org.objectweb.asm.xml.ASMContentHandler

-cons public <init>(org.objectweb.asm.ClassVisitor)

-fld protected java.util.Map labels

-fld protected org.objectweb.asm.ClassVisitor cv

-intf org.objectweb.asm.Opcodes

-meth public final void endElement(java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public final void startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes) throws org.xml.sax.SAXException

-supr org.xml.sax.helpers.DefaultHandler

-hfds BASE,OPCODES,RULES,TYPES,match,stack

-

-CLSS public abstract org.objectweb.asm.xml.ASMContentHandler$Rule

-cons protected <init>(org.objectweb.asm.xml.ASMContentHandler)

-meth protected final int getAccess(java.lang.String)

-meth protected final java.lang.Object getValue(java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth protected final org.objectweb.asm.Label getLabel(java.lang.Object)

-meth protected final org.objectweb.asm.MethodVisitor getCodeVisitor()

-meth public void begin(java.lang.String,org.xml.sax.Attributes) throws org.xml.sax.SAXException

-meth public void end(java.lang.String)

-supr java.lang.Object

-hfds class$org$objectweb$asm$Handle,class$org$objectweb$asm$Type,this$0

-

-CLSS public org.objectweb.asm.xml.Processor

-cons public <init>(int,int,java.io.InputStream,java.io.OutputStream,javax.xml.transform.Source)

-fld public final static int BYTECODE = 1

-fld public final static int MULTI_XML = 2

-fld public final static int SINGLE_XML = 3

-meth protected void update(java.lang.Object,int)

-meth public int process() throws java.io.IOException,javax.xml.transform.TransformerException,org.xml.sax.SAXException

-meth public static void main(java.lang.String[]) throws java.lang.Exception

-supr java.lang.Object

-hfds SINGLE_XML_NAME,inRepresentation,input,n,outRepresentation,output,xslt

-

-CLSS public org.objectweb.asm.xml.SAXAdapter

-cons protected <init>(org.xml.sax.ContentHandler)

-meth protected final void addElement(java.lang.String,org.xml.sax.Attributes)

-meth protected final void addEnd(java.lang.String)

-meth protected final void addStart(java.lang.String,org.xml.sax.Attributes)

-meth protected org.xml.sax.ContentHandler getContentHandler()

-meth protected void addDocumentEnd()

-meth protected void addDocumentStart()

-supr java.lang.Object

-hfds h

-

-CLSS public final org.objectweb.asm.xml.SAXAnnotationAdapter

-cons protected <init>(int,org.objectweb.asm.xml.SAXAdapter,java.lang.String,int,java.lang.String,java.lang.String,int)

-cons public <init>(org.objectweb.asm.xml.SAXAdapter,java.lang.String,int,int,java.lang.String)

-cons public <init>(org.objectweb.asm.xml.SAXAdapter,java.lang.String,int,java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,java.lang.String)

-meth public org.objectweb.asm.AnnotationVisitor visitArray(java.lang.String)

-meth public void visit(java.lang.String,java.lang.Object)

-meth public void visitEnd()

-meth public void visitEnum(java.lang.String,java.lang.String,java.lang.String)

-supr org.objectweb.asm.AnnotationVisitor

-hfds elementName,sa

-

-CLSS public final org.objectweb.asm.xml.SAXClassAdapter

-cons public <init>(org.xml.sax.ContentHandler,boolean)

-meth public final void visitEnd()

-meth public final void visitInnerClass(java.lang.String,java.lang.String,java.lang.String,int)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.FieldVisitor visitField(int,java.lang.String,java.lang.String,java.lang.String,java.lang.Object)

-meth public org.objectweb.asm.MethodVisitor visitMethod(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visit(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[])

-meth public void visitOuterClass(java.lang.String,java.lang.String,java.lang.String)

-meth public void visitSource(java.lang.String,java.lang.String)

-supr org.objectweb.asm.ClassVisitor

-hfds sa,singleDocument

-

-CLSS public final org.objectweb.asm.xml.SAXCodeAdapter

-cons public <init>(org.objectweb.asm.xml.SAXAdapter,int)

-meth public !varargs final void visitTableSwitchInsn(int,int,org.objectweb.asm.Label,org.objectweb.asm.Label[])

-meth public !varargs void visitInvokeDynamicInsn(java.lang.String,java.lang.String,org.objectweb.asm.Handle,java.lang.Object[])

-meth public final void visitCode()

-meth public final void visitFieldInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public final void visitIincInsn(int,int)

-meth public final void visitInsn(int)

-meth public final void visitIntInsn(int,int)

-meth public final void visitJumpInsn(int,org.objectweb.asm.Label)

-meth public final void visitLabel(org.objectweb.asm.Label)

-meth public final void visitLdcInsn(java.lang.Object)

-meth public final void visitLineNumber(int,org.objectweb.asm.Label)

-meth public final void visitLookupSwitchInsn(org.objectweb.asm.Label,int[],org.objectweb.asm.Label[])

-meth public final void visitMaxs(int,int)

-meth public final void visitMethodInsn(int,java.lang.String,java.lang.String,java.lang.String)

-meth public final void visitMultiANewArrayInsn(java.lang.String,int)

-meth public final void visitTryCatchBlock(org.objectweb.asm.Label,org.objectweb.asm.Label,org.objectweb.asm.Label,java.lang.String)

-meth public final void visitTypeInsn(int,java.lang.String)

-meth public final void visitVarInsn(int,int)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()

-meth public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int,java.lang.String,boolean)

-meth public void visitEnd()

-meth public void visitFrame(int,int,java.lang.Object[],int,java.lang.Object[])

-meth public void visitLocalVariable(java.lang.String,java.lang.String,java.lang.String,org.objectweb.asm.Label,org.objectweb.asm.Label,int)

-supr org.objectweb.asm.MethodVisitor

-hfds TYPES,labelNames,sa

-

-CLSS public final org.objectweb.asm.xml.SAXFieldAdapter

-cons public <init>(org.objectweb.asm.xml.SAXAdapter,org.xml.sax.Attributes)

-meth public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String,boolean)

-meth public void visitEnd()

-supr org.objectweb.asm.FieldVisitor

-hfds sa

-

-CLSS public abstract interface org.xml.sax.ContentHandler

-meth public abstract void characters(char[],int,int) throws org.xml.sax.SAXException

-meth public abstract void endDocument() throws org.xml.sax.SAXException

-meth public abstract void endElement(java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public abstract void endPrefixMapping(java.lang.String) throws org.xml.sax.SAXException

-meth public abstract void ignorableWhitespace(char[],int,int) throws org.xml.sax.SAXException

-meth public abstract void processingInstruction(java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public abstract void setDocumentLocator(org.xml.sax.Locator)

-meth public abstract void skippedEntity(java.lang.String) throws org.xml.sax.SAXException

-meth public abstract void startDocument() throws org.xml.sax.SAXException

-meth public abstract void startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes) throws org.xml.sax.SAXException

-meth public abstract void startPrefixMapping(java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-

-CLSS public abstract interface org.xml.sax.DTDHandler

-meth public abstract void notationDecl(java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public abstract void unparsedEntityDecl(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-

-CLSS public abstract interface org.xml.sax.EntityResolver

-meth public abstract org.xml.sax.InputSource resolveEntity(java.lang.String,java.lang.String) throws java.io.IOException,org.xml.sax.SAXException

-

-CLSS public abstract interface org.xml.sax.ErrorHandler

-meth public abstract void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException

-meth public abstract void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException

-meth public abstract void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException

-

-CLSS public org.xml.sax.helpers.DefaultHandler

-cons public <init>()

-intf org.xml.sax.ContentHandler

-intf org.xml.sax.DTDHandler

-intf org.xml.sax.EntityResolver

-intf org.xml.sax.ErrorHandler

-meth public org.xml.sax.InputSource resolveEntity(java.lang.String,java.lang.String) throws java.io.IOException,org.xml.sax.SAXException

-meth public void characters(char[],int,int) throws org.xml.sax.SAXException

-meth public void endDocument() throws org.xml.sax.SAXException

-meth public void endElement(java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public void endPrefixMapping(java.lang.String) throws org.xml.sax.SAXException

-meth public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException

-meth public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException

-meth public void ignorableWhitespace(char[],int,int) throws org.xml.sax.SAXException

-meth public void notationDecl(java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public void processingInstruction(java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public void setDocumentLocator(org.xml.sax.Locator)

-meth public void skippedEntity(java.lang.String) throws org.xml.sax.SAXException

-meth public void startDocument() throws org.xml.sax.SAXException

-meth public void startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes) throws org.xml.sax.SAXException

-meth public void startPrefixMapping(java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public void unparsedEntityDecl(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException

-meth public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException

-supr java.lang.Object

-

diff --git a/asm4/test/README.txt b/asm4/test/README.txt
deleted file mode 100644
index 148aa52..0000000
--- a/asm4/test/README.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* 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.
-*******************************************************************************
-
-This directory contains the tests of the product. 
-It contains(*) the following items:
-
-- lib: external libraries required to run the tests
-- conform: conformance tests (unit tests)
-- deviance: deviance tests (unit tests)
-- thread: multi-threading tests (unit tests)
-- stress: stress tests
-- perf: performance tests
-
-Each sub directory contains:
-- the source of the tests, with package struture if there is one,
-- the xml descriptors to launch test suites. An xml desriptor describes
-  the execution of a test suite. The default task is called on this file.
-
-(*) some items may not be present, depending on the product.
\ No newline at end of file
diff --git a/asm4/test/build.xml b/asm4/test/build.xml
deleted file mode 100644
index 5c5aa10..0000000
--- a/asm4/test/build.xml
+++ /dev/null
@@ -1,249 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="test" default="test">
-
-  <!-- ==================================== -->
-  <!-- ======== PROPERTY DEFINITION ======= -->
-  <!-- ==================================== -->
-
-  <property name="test.conform"   value="${test}/conform"/>
-  <property name="test.perf"      value="${test}/perf"/>
-
-  <target name="properties">
-    <condition property="asm.test.class" value="">
-      <not><isset property="asm.test.class"/></not>
-    </condition>
-
-    <condition property="java5">
-      <available classname="java.lang.annotation.Annotation"/> 
-    </condition>
-    
-    <condition property="test-all">
-      <and>
-        <not><isset property="test.type"/></not>
-        <not><isset property="test.group"/></not>
-      </and>
-    </condition>
-
-    <condition property="test-conform">
-      <or>
-        <equals arg1="${test.type}" arg2="conform"/>
-        <isset property="test-all"/>
-      </or>  
-    </condition>
-
-    <condition property="test-perf">
-      <or>
-        <equals arg1="${test.type}" arg2="perf"/>
-        <isset property="test-all"/>
-      </or>  
-    </condition>
-
-    <condition property="test.paths.configured">
-      <and>
-        <isset property="bcel.path"/>
-        <isset property="aspectj.path"/>
-        <isset property="serp.path"/>
-        <isset property="javassist.path"/>
-        <isset property="janino.path"/>
-        <isset property="cobertura.path"/>
-        <isset property="cobertura.runtime.path"/>
-        <isset property="kawa.runtime.path"/>
-        <isset property="csg-bytecode.runtime.path"/>
-        <isset property="cojen.runtime.path"/>
-        <isset property="jbet.runtime.path"/>
-        <isset property="jclasslib.runtime.path"/>
-        <isset property="jiapi.runtime.path"/>
-        <isset property="rhino.runtime.path"/>
-      </and>
-    </condition>
-  </target>
-
-  <!-- ================================== -->
-  <!-- ========  INITIALIZATION   ======= -->
-  <!-- ================================== -->
-  
-  <target name="check" unless="test.paths.configured">
-    <echo message="The 'build.properties' file must be configured"/>
-    <fail/>
-  </target>
-  
-  <target name="init" depends="properties,check">  
-    <mkdir dir="${out.test}"/>
-    <mkdir dir="${out.test}/cases"/>
-    <mkdir dir="${out.test}/reports"/>
-    <path id="test.classpath">
-      <pathelement location="${out.build}/tmp"/>
-      <pathelement location="${out.test}"/>
-      <pathelement path="${bcel.path}"/>
-      <pathelement path="${aspectj.path}"/>
-      <pathelement path="${serp.path}"/>  
-      <pathelement path="${javassist.path}"/>
-      <pathelement path="${janino.path}"/>
-      <pathelement path="${cobertura.runtime.path}"/>
-      <pathelement path="${kawa.runtime.path}"/>
-      <pathelement path="${csg-bytecode.runtime.path}"/>
-      <pathelement path="${cojen.runtime.path}"/>
-      <pathelement path="${jbet.runtime.path}"/>
-      <pathelement path="${jclasslib.runtime.path}"/>
-      <pathelement path="${jiapi.runtime.path}"/>
-      <pathelement path="${rhino.runtime.path}"/>
-    </path>
-  </target>
-  
-  <!-- ==================================== -->
-  <!-- =========== COMPILATION ============ -->
-  <!-- ==================================== -->
-
-  <target name="compile.test.conform" depends="init">
-    <javac srcdir="${test.conform}" destdir="${out.test}"
-    	source="1.5" target="1.5"
-        debug="on" debuglevel="lines,vars,source">
-      <classpath refid="test.classpath"/>
-      <include name="**/*.java"/>
-    </javac>
-    <delete dir="${out.test}/cases"/>
-    <java classname="org.objectweb.asm.test.cases.Generator">
-      <classpath>
-        <pathelement location="${out.build}"/>
-        <pathelement location="${out.test}"/>
-      </classpath>
-      <arg value="${out.test}/cases"/>
-    </java>
-  </target>
-
-  <target name="compile.test.perf" depends="init">
-    <javac srcdir="${test.perf}" destdir="${out.test}" debug="on" source="1.5" target="1.5">
-      <classpath refid="test.classpath"/>
-      <include name="**/*.java"/>
-      <exclude name="**/xml/*.java"/>
-    </javac>
-  </target>
-
-  <target name="compile" depends="compile.test.conform,compile.test.perf"/>
-
-  <!-- ============================= -->
-  <!-- =========== TEST ============ -->
-  <!-- ============================= -->
-
-  <target name="testConform" depends="compile" if="test-conform">
-    <ant antfile="${test.conform}/adviceadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/analyzeradapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/annotations.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/asmifier.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/basicinterpreter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/basicverifier.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/checkclassadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/checksignatureadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classnode.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classreader.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classwriter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classwritercomputeframes.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classwritercomputeframesdeadcode.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classwritercomputemaxs.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classwritercopypool.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/classwriterresizeinsns.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/codesizeevaluator.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/gasmifier.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/jsrinlineradapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/localvariablessorter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/localvariablessorter2.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/remappingadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/remappingadapter2.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/saxadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/signaturewriter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/simpleverifier.xml" inheritRefs="true"/>    
-    <ant antfile="${test.conform}/sourceinterpreter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/staticinitmerger.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/svuidadder.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/traceclassadapter.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/unit.xml" inheritRefs="true"/>
-    <ant antfile="${test.conform}/verifyclass.xml" inheritRefs="true"/>
-  </target>
-
-  <target name="testPerf" depends="compile" if="test-perf">
-    <ant antfile="${test.perf}/all.xml" inheritRefs="true"/>
-    <ant antfile="${test.perf}/gen.xml" inheritRefs="true"/>
-    <ant antfile="${test.perf}/mem.xml" inheritRefs="true"/>
-  </target>
-
-  <target name="testGroup" depends="compile" if="test.group">
-    <ant antfile="test/${test.group}.xml" inheritRefs="true"/>
-  </target>
-
-  <target name="test" depends="testConform,testPerf,testGroup">
-    <!--junitreport todir="${out.test}/reports">
-      <fileset dir="${out.test}/reports">
-        <include name="TEST-*.xml"/>
-      </fileset>
-      <report todir="${out.test}/reports"/>
-    </junitreport-->
-  </target>
-
-  <!-- ================================== -->
-  <!-- =====  BINARY COMPATIBILITY   ==== -->
-  <!-- ================================== -->
-  
-  <target name="sigtest-setup">
-    <java classname="com.sun.tdk.signaturetest.Setup">
-      <classpath>
-        <pathelement location="${test}/lib/sigtestdev.jar"/>
-      </classpath>
-      <arg value="-apiversion"/>
-      <arg value="${product.artifact}"/>
-      <arg value="-static"/>
-      <arg value="-classpath"/>
-      <arg value="${java.home}/lib/rt.jar;${out.dist}/lib/all/asm-all-${product.artifact}.jar"/>
-      <arg value="-package"/>
-      <arg value="org.objectweb.asm"/>
-      <arg value="-filename"/>
-      <arg value="${test}/ASM.sig"/>
-    </java>
-  </target>
-
-  <target name="sigtest">
-    <taskdef name="atest" classname="com.sun.tdk.signaturetest.ant.ATest" 
-        classpath="${test}/lib/sigtestdev.jar"/>
-    <atest filename="${test}/ASM.sig"
-        apiversion="${product.artifact}"
-        backward="true" 
-        binary="true"
-        failonerror="true">	
-      <package name="org.objectweb.asm"/>
-      <classpath>
-        <pathelement location="${java.home}/lib/rt.jar"/>
-        <pathelement location="${out.dist}/lib/all/asm-all-${product.artifact}.jar"/>
-      </classpath>
-    </atest>
-  </target>
-  
-</project>
diff --git a/asm4/test/conform/adviceadapter.xml b/asm4/test/conform/adviceadapter.xml
deleted file mode 100644
index 3b166c6..0000000
--- a/asm4/test/conform/adviceadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/AdviceAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/analyzeradapter.xml b/asm4/test/conform/analyzeradapter.xml
deleted file mode 100644
index 315532d..0000000
--- a/asm4/test/conform/analyzeradapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/AnalyzerAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/annotations.xml b/asm4/test/conform/annotations.xml
deleted file mode 100644
index 791ac99..0000000
--- a/asm4/test/conform/annotations.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/AnnotationsTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/asmifier.xml b/asm4/test/conform/asmifier.xml
deleted file mode 100644
index c81ae14..0000000
--- a/asm4/test/conform/asmifier.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <condition property="testclasses" value="${asm.test.class}">
-      <not><equals arg1="${asm.test.class}" arg2=""/></not>
-    </condition>
-    <condition property="testclasses" value="java.lang">
-      <equals arg1="${asm.test.class}" arg2=""/>
-    </condition>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ASMifierTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${testclasses}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/basicinterpreter.xml b/asm4/test/conform/basicinterpreter.xml
deleted file mode 100644
index 22944f4..0000000
--- a/asm4/test/conform/basicinterpreter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/BasicInterpreterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/basicverifier.xml b/asm4/test/conform/basicverifier.xml
deleted file mode 100644
index c5d0de2..0000000
--- a/asm4/test/conform/basicverifier.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/BasicVerifierTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/checkclassadapter.xml b/asm4/test/conform/checkclassadapter.xml
deleted file mode 100644
index 03d43a7..0000000
--- a/asm4/test/conform/checkclassadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/CheckClassAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/checksignatureadapter.xml b/asm4/test/conform/checksignatureadapter.xml
deleted file mode 100644
index f4504f7..0000000
--- a/asm4/test/conform/checksignatureadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/CheckSignatureAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classadapter.xml b/asm4/test/conform/classadapter.xml
deleted file mode 100644
index e7958ca..0000000
--- a/asm4/test/conform/classadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classnode.xml b/asm4/test/conform/classnode.xml
deleted file mode 100644
index 48fe5c5..0000000
--- a/asm4/test/conform/classnode.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassNodeTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classreader.xml b/asm4/test/conform/classreader.xml
deleted file mode 100644
index ef28f0e..0000000
--- a/asm4/test/conform/classreader.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassReaderTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classwriter.xml b/asm4/test/conform/classwriter.xml
deleted file mode 100644
index 2fb2fce..0000000
--- a/asm4/test/conform/classwriter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassWriterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classwritercomputeframes.xml b/asm4/test/conform/classwritercomputeframes.xml
deleted file mode 100644
index 5a0869d..0000000
--- a/asm4/test/conform/classwritercomputeframes.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <property name="agent.jar" value="computeframes-agent.jar" />
-
-  <target name="test.normal" unless="coverage">
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/build">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.ClassWriterComputeFramesTest"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.ClassWriterComputeFramesTest" 
-            fork="yes" 
-            todir="${out.test}/reports"
-            outfile="TEST-org.objectweb.asm.ClassWriterComputeFramesTest-1">
-      </test>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Dparts=2"/>
-      <jvmarg value="-Dpart=0"/>
-      <jvmarg value="-Xverify:all"/>
-    </junit>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.ClassWriterComputeFramesTest" 
-            fork="yes" 
-            todir="${out.test}/reports"
-            outfile="TEST-org.objectweb.asm.ClassWriterComputeFramesTest-2">
-      </test>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Dparts=2"/>
-      <jvmarg value="-Dpart=1"/>
-      <jvmarg value="-Xverify:all"/>
-    </junit>
-  </target>
-
-  <target name="test.coverage" if="coverage">
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/instr">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.ClassWriterComputeFramesTest"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassWriterComputeFramesTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Xbootclasspath/p:${cobertura.runtime.path}"/>
-    </junit>
-  </target>
-
-  <target name="test" depends="test.normal,test.coverage"/>
-
-</project>
diff --git a/asm4/test/conform/classwritercomputeframesdeadcode.xml b/asm4/test/conform/classwritercomputeframesdeadcode.xml
deleted file mode 100644
index f282d40..0000000
--- a/asm4/test/conform/classwritercomputeframesdeadcode.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <property name="agent.jar" value="computeframesdeadcode-agent.jar" />
-
-  <target name="test.normal" unless="coverage">
-    <condition property="testclasses" value="${asm.test.class}">
-      <not><equals arg1="${asm.test.class}" arg2=""/></not>
-    </condition>
-    <condition property="testclasses" value="javax">
-      <equals arg1="${asm.test.class}" arg2=""/>
-    </condition>
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/build">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.ClassWriterComputeFramesDeadCodeTest"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.ClassWriterComputeFramesDeadCodeTest" 
-            fork="yes" 
-            todir="${out.test}/reports"
-            outfile="TEST-org.objectweb.asm.ClassWriterComputeFramesDeadCodeTest">
-      </test>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${testclasses}"/>
-      <jvmarg value="-Xverify:all"/>
-    </junit>
-  </target>
-
-  <target name="test.coverage" if="coverage">
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/instr">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.ClassWriterComputeFramesDeadCodeTest"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassWriterComputeFramesDeadCodeTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Xbootclasspath/p:${cobertura.runtime.path}"/>
-    </junit>
-  </target>
-
-  <target name="test" depends="test.normal,test.coverage"/>
-
-</project>
diff --git a/asm4/test/conform/classwritercomputemaxs.xml b/asm4/test/conform/classwritercomputemaxs.xml
deleted file mode 100644
index 96988c5..0000000
--- a/asm4/test/conform/classwritercomputemaxs.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassWriterComputeMaxsTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classwritercopypool.xml b/asm4/test/conform/classwritercopypool.xml
deleted file mode 100644
index 0d940f8..0000000
--- a/asm4/test/conform/classwritercopypool.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassWriterCopyPoolTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/classwriterresizeinsns.xml b/asm4/test/conform/classwriterresizeinsns.xml
deleted file mode 100644
index 5aaa854..0000000
--- a/asm4/test/conform/classwriterresizeinsns.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <property name="agent.jar" value="resizeinsns-agent.jar" />
-
-  <target name="test.normal" unless="coverage">
-    <condition property="testclasses" value="${asm.test.class}">
-      <not><equals arg1="${asm.test.class}" arg2=""/></not>
-    </condition>
-    <condition property="testclasses" value="com.sun.corba">
-      <equals arg1="${asm.test.class}" arg2=""/>
-    </condition>
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/build">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.ClassWriterResizeInsnsTest"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.ClassWriterResizeInsnsTest" 
-            fork="yes" 
-            todir="${out.test}/reports"
-            outfile="TEST-org.objectweb.asm.ClassWriterResizeInsnsTest">
-      </test>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${testclasses}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${testclasses}"/>
-      <jvmarg value="-Xverify:all"/>
-    </junit>
-  </target>
-
-  <target name="test.coverage" if="coverage">
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/instr">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.ClassWriterResizeInsnsTest"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/ClassWriterResizeInsnsTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Xbootclasspath/p:${cobertura.runtime.path}"/>
-    </junit>
-  </target>
-
-  <target name="test" depends="test.normal,test.coverage"/>
-
-</project>
diff --git a/asm4/test/conform/codesizeevaluator.xml b/asm4/test/conform/codesizeevaluator.xml
deleted file mode 100644
index 935fa38..0000000
--- a/asm4/test/conform/codesizeevaluator.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/CodeSizeEvaluatorTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/gasmifier.xml b/asm4/test/conform/gasmifier.xml
deleted file mode 100644
index b29b5ed..0000000
--- a/asm4/test/conform/gasmifier.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <condition property="testclasses" value="${asm.test.class}">
-      <not><equals arg1="${asm.test.class}" arg2=""/></not>
-    </condition>
-    <condition property="testclasses" value="java.lang">
-      <equals arg1="${asm.test.class}" arg2=""/>
-    </condition>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/GASMifierTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${testclasses}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/jsrinlineradapter.xml b/asm4/test/conform/jsrinlineradapter.xml
deleted file mode 100644
index 661d86b..0000000
--- a/asm4/test/conform/jsrinlineradapter.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/JSRInlinerAdapterTest.java"/>
-          <include name="**/JSRInlinerAdapterUnitTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/localvariablessorter.xml b/asm4/test/conform/localvariablessorter.xml
deleted file mode 100644
index a9bf2d3..0000000
--- a/asm4/test/conform/localvariablessorter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/LocalVariablesSorterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/localvariablessorter2.xml b/asm4/test/conform/localvariablessorter2.xml
deleted file mode 100644
index 4ff89d6..0000000
--- a/asm4/test/conform/localvariablessorter2.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <property name="agent.jar" value="localvariablessorter2-agent.jar" />
-
-  <target name="test.normal" unless="coverage">
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/build">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.commons.LocalVariablesSorterTest2"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.commons.LocalVariablesSorterTest2" 
-          fork="yes" 
-          todir="${out.test}/reports"
-          outfile="TEST-org.objectweb.asm.commons.LocalVariablesSorterTest2-1">
-      </test>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Dparts=2"/>
-      <jvmarg value="-Dpart=0"/>
-      <jvmarg value="-Xverify:all"/>
-    </junit>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.commons.LocalVariablesSorterTest2" 
-          fork="yes" 
-          todir="${out.test}/reports"
-          outfile="TEST-org.objectweb.asm.commons.LocalVariablesSorterTest2-2">
-      </test>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Dparts=2"/>
-      <jvmarg value="-Dpart=1"/>
-      <jvmarg value="-Xverify:all"/>
-    </junit>
-  </target>
-
-  <target name="test.coverage" if="coverage">
-    <jar jarfile="${out.test}/${agent.jar}">
-      <fileset dir="${out}/instr">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <fileset dir="${out}/test">
-        <include name="org/objectweb/asm/**/*.class"/>
-      </fileset>
-      <manifest>
-        <attribute name="Premain-Class" value="org.objectweb.asm.commons.LocalVariablesSorterTest2"/>
-      </manifest>
-    </jar>
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/LocalVariablesSorterTest2.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-javaagent:${out.test}/${agent.jar}=${asm.test.class}"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Xbootclasspath/p:${cobertura.runtime.path}"/>
-    </junit>
-  </target>
-
-  <target name="test" depends="test.normal,test.coverage"/>
-
-</project>
diff --git a/asm4/test/conform/org/objectweb/asm/AbstractTest.java b/asm4/test/conform/org/objectweb/asm/AbstractTest.java
deleted file mode 100644
index ba32aee..0000000
--- a/asm4/test/conform/org/objectweb/asm/AbstractTest.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.ListIterator;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.LabelNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * Super class for test suites based on a jar file.
- * 
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public abstract class AbstractTest extends TestCase {
-
-    protected String n;
-
-    protected InputStream is;
-
-    public AbstractTest() {
-        super("test");
-    }
-
-    protected void init(final String n, final InputStream is) {
-        this.n = n;
-        this.is = is;
-    }
-
-    protected TestSuite getSuite() throws Exception {
-        TestSuite suite = new TestSuite(getClass().getName());
-        String files = System.getProperty("asm.test") + ",";
-        String clazz = System.getProperty("asm.test.class");
-        String partcount = System.getProperty("parts");
-        String partid = System.getProperty("part");
-        int parts = partcount == null ? 1 : Integer.parseInt(partcount);
-        int part = partid == null ? 0 : Integer.parseInt(partid);
-        int id = 0;
-        while (files.indexOf(',') != -1) {
-            String file = files.substring(0, files.indexOf(','));
-            files = files.substring(files.indexOf(',') + 1);
-            File f = new File(file);
-            if (f.isDirectory()) {
-                scanDirectory("", f, suite, clazz);
-            } else {
-                ZipFile zip = new ZipFile(file);
-                Enumeration<? extends ZipEntry> entries = zip.entries();
-                while (entries.hasMoreElements()) {
-                    ZipEntry e = entries.nextElement();
-                    String n = e.getName();
-                    String p = n.replace('/', '.');
-                    if (n.endsWith(".class")
-                            && (clazz == null || p.indexOf(clazz) != -1)) {
-                        n = p.substring(0, p.length() - 6);
-                        if (id % parts == part) {
-                            InputStream is = zip.getInputStream(e);
-                            AbstractTest t = getClass().newInstance();
-                            t.init(n, is);
-                            suite.addTest(t);
-                        }
-                        ++id;
-                    }
-                }
-            }
-        }
-        return suite;
-    }
-
-    private void scanDirectory(final String path, final File f,
-            final TestSuite suite, final String clazz) throws Exception {
-        File[] fs = f.listFiles();
-        for (int i = 0; i < fs.length; ++i) {
-            String n = fs[i].getName();
-            String qn = path.length() == 0 ? n : path + "." + n;
-            if (fs[i].isDirectory()) {
-                scanDirectory(qn, fs[i], suite, clazz);
-            } else if (qn.endsWith(".class") && !qn.startsWith("invalid.")) {
-                if (clazz == null || qn.startsWith("pkg.")
-                        || qn.indexOf(clazz) != -1) {
-                    qn = qn.substring(0, qn.length() - 6);
-                    InputStream is = new FileInputStream(fs[i]);
-                    AbstractTest t = getClass().newInstance();
-                    t.init(qn, is);
-                    suite.addTest(t);
-                }
-            }
-        }
-    }
-
-    public abstract void test() throws Exception;
-
-    public void assertEquals(final ClassReader cr1, final ClassReader cr2)
-            throws Exception {
-        assertEquals(cr1, cr2, null, null);
-    }
-
-    public void assertEquals(final ClassReader cr1, final ClassReader cr2,
-            final ClassVisitor filter1, final ClassVisitor filter2)
-            throws Exception {
-        if (!Arrays.equals(cr1.b, cr2.b)) {
-            StringWriter sw1 = new StringWriter();
-            StringWriter sw2 = new StringWriter();
-            ClassVisitor cv1 = new TraceClassVisitor(new PrintWriter(sw1));
-            ClassVisitor cv2 = new TraceClassVisitor(new PrintWriter(sw2));
-            if (filter1 != null) {
-                filter1.cv = cv1;
-            }
-            if (filter2 != null) {
-                filter2.cv = cv2;
-            }
-            cr1.accept(filter1 == null ? cv1 : filter1, 0);
-            cr2.accept(filter2 == null ? cv2 : filter2, 0);
-            String s1 = sw1.toString();
-            String s2 = sw2.toString();
-            try {
-                assertEquals("different data", s1, s2);
-            } catch (Throwable e) {
-                /*
-                 * ClassReader may introduce unused labels in the code, due to
-                 * the way uninitialized frame types are handled (false
-                 * positives may occur, see the doc of ClassReader). These
-                 * unused labels may differ before / after a transformation, but
-                 * this does not change the method code itself. Thus, if a
-                 * difference occurs, we retry a comparison, this time by
-                 * removing the unused labels first (we do not do this in the
-                 * first place because it is costly).
-                 */
-                sw1 = new StringWriter();
-                sw2 = new StringWriter();
-                cv1 = new RemoveUnusedLabelsAdapter(new TraceClassVisitor(
-                        new PrintWriter(sw1)));
-                cv2 = new RemoveUnusedLabelsAdapter(new TraceClassVisitor(
-                        new PrintWriter(sw2)));
-                if (filter1 != null) {
-                    filter1.cv = cv1;
-                }
-                if (filter2 != null) {
-                    filter2.cv = cv2;
-                }
-                cr1.accept(filter1 == null ? cv1 : filter1, 0);
-                cr2.accept(filter2 == null ? cv2 : filter2, 0);
-                s1 = sw1.toString();
-                s2 = sw2.toString();
-                assertEquals("different data", s1, s2);
-            }
-        }
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + ": " + n;
-    }
-
-    public static class VerifierTest extends TestCase {
-
-        public VerifierTest() {
-            super("testVerifier");
-        }
-
-        public void testVerifier() throws Exception {
-            try {
-                Class.forName("invalid.Invalid", true, getClass()
-                        .getClassLoader());
-                fail("The new JDK 7 verifier does not trigger!");
-            } catch (VerifyError ve) {
-                // This is expected since the class is invalid.
-                ve.printStackTrace();
-            }
-        }
-    }
-
-    static class RemoveUnusedLabelsAdapter extends ClassVisitor {
-
-        public RemoveUnusedLabelsAdapter(ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(int access, String name, String desc,
-                String signature, String[] exceptions) {
-            return new MethodNode(access, name, desc, signature, exceptions) {
-
-                /**
-                 * The labels used in this method.
-                 */
-                Set<LabelNode> usedLabels = new HashSet<LabelNode>();
-
-                @Override
-                public void visitLabel(final Label label) {
-                    instructions.add(super.getLabelNode(label));
-                }
-
-                @Override
-                public void visitEnd() {
-                    // removes unused labels
-                    ListIterator<AbstractInsnNode> i = instructions.iterator();
-                    while (i.hasNext()) {
-                        AbstractInsnNode n = i.next();
-                        if (n instanceof LabelNode && !usedLabels.contains(n)) {
-                            i.remove();
-                        }
-                    }
-                    // visits the transformed code
-                    accept(cv);
-                }
-
-                @Override
-                protected LabelNode getLabelNode(final Label l) {
-                    LabelNode n = super.getLabelNode(l);
-                    usedLabels.add(n);
-                    return n;
-                }
-            };
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/AnnotationsTest.java b/asm4/test/conform/org/objectweb/asm/AnnotationsTest.java
deleted file mode 100644
index 8a2e92e..0000000
--- a/asm4/test/conform/org/objectweb/asm/AnnotationsTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestSuite;
-
-/**
- * Annotations tests.
- * 
- * @author Eric Bruneton
- */
-public class AnnotationsTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new AnnotationsTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw1 = new ClassWriter(0);
-        ClassWriter cw2 = new ClassWriter(0);
-        cr.accept(new RemoveAnnotationsAdapter1(cw1), 0);
-        cr.accept(new RemoveAnnotationsAdapter2(cw2), 0);
-        assertEquals(new ClassReader(cw2.toByteArray()),
-                new ClassReader(cw1.toByteArray()));
-    }
-
-    static class EmptyAnnotationVisitor extends AnnotationVisitor {
-
-        public EmptyAnnotationVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(String name, String desc) {
-            return this;
-        }
-
-        @Override
-        public AnnotationVisitor visitArray(String name) {
-            return this;
-        }
-    }
-
-    static class RemoveAnnotationsAdapter1 extends ClassVisitor {
-
-        public RemoveAnnotationsAdapter1(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String desc,
-                final boolean visible) {
-            return new EmptyAnnotationVisitor();
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            return new MethodVisitor(Opcodes.ASM4, cv.visitMethod(access, name,
-                    desc, signature, exceptions)) {
-
-                @Override
-                public AnnotationVisitor visitAnnotationDefault() {
-                    return new EmptyAnnotationVisitor();
-                }
-
-                @Override
-                public AnnotationVisitor visitAnnotation(String desc,
-                        boolean visible) {
-                    return new EmptyAnnotationVisitor();
-                }
-
-                @Override
-                public AnnotationVisitor visitParameterAnnotation(
-                        int parameter, String desc, boolean visible) {
-                    return new EmptyAnnotationVisitor();
-                }
-            };
-        }
-    }
-
-    static class RemoveAnnotationsAdapter2 extends ClassVisitor {
-
-        public RemoveAnnotationsAdapter2(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String desc,
-                final boolean visible) {
-            return null;
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            return new MethodVisitor(Opcodes.ASM4, cv.visitMethod(access, name,
-                    desc, signature, exceptions)) {
-
-                @Override
-                public AnnotationVisitor visitAnnotationDefault() {
-                    return null;
-                }
-
-                @Override
-                public AnnotationVisitor visitAnnotation(String desc,
-                        boolean visible) {
-                    return null;
-                }
-
-                @Override
-                public AnnotationVisitor visitParameterAnnotation(
-                        int parameter, String desc, boolean visible) {
-                    return null;
-                }
-            };
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/AttributeUnitTest.java b/asm4/test/conform/org/objectweb/asm/AttributeUnitTest.java
deleted file mode 100644
index ee74d4a..0000000
--- a/asm4/test/conform/org/objectweb/asm/AttributeUnitTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestCase;
-
-/**
- * Attribute unit tests.
- * 
- * @author Eric Bruneton
- */
-public class AttributeUnitTest extends TestCase {
-
-    public void testUnknown() {
-        assertTrue(new Attribute("Comment").isUnknown());
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassAdapterTest.java b/asm4/test/conform/org/objectweb/asm/ClassAdapterTest.java
deleted file mode 100644
index 3963c4b..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassAdapterTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestSuite;
-
-/**
- * ClassVisitor tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassAdapterTest extends AbstractTest {
-
-    private final static TestClassLoader LOADER = new TestClassLoader();
-
-    public static TestSuite suite() throws Exception {
-        return new ClassAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-
-            @Override
-            public FieldVisitor visitField(int access, String name,
-                    String desc, String signature, Object value) {
-                return new FieldVisitor(Opcodes.ASM4, super.visitField(access,
-                        name, desc, signature, value)) {
-                    @Override
-                    public AnnotationVisitor visitAnnotation(String desc,
-                            boolean visible) {
-                        return new AnnotationAdapter(super.visitAnnotation(
-                                desc, visible));
-                    }
-                };
-            }
-
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                return new MethodVisitor(Opcodes.ASM4, super.visitMethod(
-                        access, name, desc, signature, exceptions)) {
-                    @Override
-                    public AnnotationVisitor visitAnnotationDefault() {
-                        return new AnnotationAdapter(super
-                                .visitAnnotationDefault());
-                    }
-
-                    @Override
-                    public AnnotationVisitor visitAnnotation(String desc,
-                            boolean visible) {
-                        return new AnnotationAdapter(super.visitAnnotation(
-                                desc, visible));
-                    }
-
-                    @Override
-                    public AnnotationVisitor visitParameterAnnotation(
-                            int parameter, String desc, boolean visible) {
-                        return new AnnotationAdapter(super
-                                .visitParameterAnnotation(parameter, desc,
-                                        visible));
-                    }
-                };
-            }
-        }, 0);
-        byte[] b = cw.toByteArray();
-        try {
-            LOADER.defineClass(n, b);
-        } catch (ClassFormatError cfe) {
-            fail(cfe.getMessage());
-        } catch (Throwable ignored) {
-        }
-    }
-
-    static class AnnotationAdapter extends AnnotationVisitor {
-
-        public AnnotationAdapter(final AnnotationVisitor av) {
-            super(Opcodes.ASM4, av);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(String name, String desc) {
-            return new AnnotationAdapter(super.visitAnnotation(name, desc));
-        }
-
-        @Override
-        public AnnotationVisitor visitArray(String name) {
-            return new AnnotationAdapter(super.visitArray(name));
-        }
-    }
-
-    // ------------------------------------------------------------------------
-
-    static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassReaderTest.java b/asm4/test/conform/org/objectweb/asm/ClassReaderTest.java
deleted file mode 100644
index 212dba4..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassReaderTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestSuite;
-
-/**
- * ClassReader tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassReaderTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new ClassReaderTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        new ClassReader(is).accept(new ClassVisitor(Opcodes.ASM4) {
-
-            AnnotationVisitor av = new AnnotationVisitor(Opcodes.ASM4) {
-
-                @Override
-                public AnnotationVisitor visitAnnotation(String name,
-                        String desc) {
-                    return this;
-                }
-
-                @Override
-                public AnnotationVisitor visitArray(String name) {
-                    return this;
-                }
-            };
-
-            @Override
-            public AnnotationVisitor visitAnnotation(String desc,
-                    boolean visible) {
-                return av;
-            }
-
-            @Override
-            public FieldVisitor visitField(int access, String name,
-                    String desc, String signature, Object value) {
-                return new FieldVisitor(Opcodes.ASM4) {
-
-                    @Override
-                    public AnnotationVisitor visitAnnotation(String desc,
-                            boolean visible) {
-                        return av;
-                    }
-                };
-            }
-
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                return new MethodVisitor(Opcodes.ASM4) {
-
-                    @Override
-                    public AnnotationVisitor visitAnnotationDefault() {
-                        return av;
-                    }
-
-                    @Override
-                    public AnnotationVisitor visitAnnotation(String desc,
-                            boolean visible) {
-                        return av;
-                    }
-
-                    @Override
-                    public AnnotationVisitor visitParameterAnnotation(
-                            int parameter, String desc, boolean visible) {
-                        return av;
-                    }
-                };
-            }
-        }, 0);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassReaderUnitTest.java b/asm4/test/conform/org/objectweb/asm/ClassReaderUnitTest.java
deleted file mode 100644
index 5f1c1ad..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassReaderUnitTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import junit.framework.TestCase;
-
-/**
- * ClassReader unit tests.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ClassReaderUnitTest extends TestCase implements Opcodes {
-
-    public void testIllegalConstructorArgument() {
-        try {
-            new ClassReader((InputStream) null);
-            fail();
-        } catch (IOException e) {
-        }
-    }
-
-    public void testGetItem() throws IOException {
-        ClassReader cr = new ClassReader(getClass().getName());
-        int item = cr.getItem(1);
-        assertTrue(item >= 10);
-        assertTrue(item < cr.header);
-    }
-
-    public void testReadByte() throws IOException {
-        ClassReader cr = new ClassReader(getClass().getName());
-        assertEquals(cr.b[0] & 0xFF, cr.readByte(0));
-    }
-
-    public void testGetAccess() throws Exception {
-        String name = getClass().getName();
-        assertEquals(Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER, new ClassReader(
-                name).getAccess());
-    }
-
-    public void testGetClassName() throws Exception {
-        String name = getClass().getName();
-        assertEquals(name.replace('.', '/'),
-                new ClassReader(name).getClassName());
-    }
-
-    public void testGetSuperName() throws Exception {
-        assertEquals(TestCase.class.getName().replace('.', '/'),
-                new ClassReader(getClass().getName()).getSuperName());
-        assertEquals(null,
-                new ClassReader(Object.class.getName()).getSuperName());
-    }
-
-    public void testGetInterfaces() throws Exception {
-        String[] interfaces = new ClassReader(getClass().getName())
-                .getInterfaces();
-        assertNotNull(interfaces);
-        assertEquals(1, interfaces.length);
-        assertEquals(Opcodes.class.getName().replace('.', '/'), interfaces[0]);
-
-        interfaces = new ClassReader(Opcodes.class.getName()).getInterfaces();
-        assertNotNull(interfaces);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeFramesDeadCodeTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterComputeFramesDeadCodeTest.java
deleted file mode 100644
index 4efbddc..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeFramesDeadCodeTest.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/***

- * ASM tests

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * 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.

- */

-package org.objectweb.asm;

-

-import java.io.PrintWriter;

-import java.lang.instrument.ClassFileTransformer;

-import java.lang.instrument.IllegalClassFormatException;

-import java.lang.instrument.Instrumentation;

-import java.security.ProtectionDomain;

-import java.util.Random;

-

-import org.objectweb.asm.util.TraceClassVisitor;

-

-import junit.framework.TestSuite;

-

-/**

- * ClassWriter tests.

- * 

- * @author Eric Bruneton

- */

-public class ClassWriterComputeFramesDeadCodeTest extends AbstractTest {

-

-    public static void premain(final String agentArgs,

-            final Instrumentation inst) {

-        inst.addTransformer(new ClassFileTransformer() {

-            public byte[] transform(final ClassLoader loader,

-                    final String className, final Class<?> classBeingRedefined,

-                    final ProtectionDomain domain, final byte[] classFileBuffer)

-                    throws IllegalClassFormatException {

-                String n = className.replace('/', '.');

-                if (n.indexOf("javax") == -1 || n.startsWith("invalid.")) {

-                    return null;

-                }

-                if (agentArgs.length() == 0 || n.indexOf(agentArgs) != -1) {

-                    return transformClass(n, classFileBuffer);

-                } else {

-                    return null;

-                }

-            }

-        });

-    }

-

-    static byte[] transformClass(final String n, final byte[] clazz) {

-        ClassReader cr = new ClassReader(clazz);

-        ClassWriter cw = new ComputeClassWriter(ClassWriter.COMPUTE_FRAMES);

-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {

-

-            private String className;

-

-            @Override

-            public void visit(final int version, final int access,

-                    final String name, final String signature,

-                    final String superName, final String[] interfaces) {

-                className = name;

-                // Set V1_7 version to prevent fallback to old verifier.

-                super.visit((version & 0xFFFF) < Opcodes.V1_7 ? Opcodes.V1_7

-                        : version, access, name, signature, superName,

-                        interfaces);

-            }

-

-            @Override

-            public MethodVisitor visitMethod(int access, String name,

-                    String desc, String signature, String[] exceptions) {

-                int seed = (className + "." + name + desc).hashCode();

-                return new MethodDeadCodeInserter(seed, super.visitMethod(

-                        access, name, desc, signature, exceptions));

-            }

-

-        }, ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG);

-        byte[] b = cw.toByteArray();

-        if (n.equals("javax.imageio.ImageIO"))

-            new ClassReader(b).accept(new TraceClassVisitor(new PrintWriter(

-                    System.err)), 0);

-

-        return b;

-    }

-

-    public static TestSuite suite() throws Exception {

-        TestSuite suite = new ClassWriterComputeFramesDeadCodeTest().getSuite();

-        suite.addTest(new VerifierTest());

-        return suite;

-    }

-

-    @Override

-    public void test() throws Exception {

-        try {

-            Class.forName(n, true, getClass().getClassLoader());

-        } catch (NoClassDefFoundError ncdfe) {

-            // ignored

-        } catch (UnsatisfiedLinkError ule) {

-            // ignored

-        } catch (ClassFormatError cfe) {

-            fail(cfe.getMessage());

-        } catch (VerifyError ve) {

-            // String s = n.replace('.', '/') + ".class";

-            // InputStream is =

-            // getClass().getClassLoader().getResourceAsStream(s);

-            // ClassReader cr = new ClassReader(is);

-            // byte[] b = transformClass("", cr.b);

-            // StringWriter sw1 = new StringWriter();

-            // StringWriter sw2 = new StringWriter();

-            // sw2.write(ve.toString() + "\n");

-            // ClassVisitor cv1 = new TraceClassVisitor(new PrintWriter(sw1));

-            // ClassVisitor cv2 = new TraceClassVisitor(new PrintWriter(sw2));

-            // cr.accept(cv1, 0);

-            // new ClassReader(b).accept(cv2, 0);

-            // String s1 = sw1.toString();

-            // String s2 = sw2.toString();

-            // assertEquals("different data", s1, s2);

-            fail(ve.getMessage());

-        }

-    }

-}

-

-class MethodDeadCodeInserter extends MethodVisitor implements Opcodes {

-

-    private Random r;

-

-    public MethodDeadCodeInserter(int seed, final MethodVisitor mv) {

-        super(ASM4, mv);

-        r = new Random(seed);

-    }

-

-    @Override

-    public void visitInsn(int opcode) {

-        super.visitInsn(opcode);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitIntInsn(int opcode, int operand) {

-        super.visitIntInsn(opcode, operand);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitVarInsn(int opcode, int var) {

-        super.visitVarInsn(opcode, var);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitTypeInsn(int opcode, String type) {

-        super.visitTypeInsn(opcode, type);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitFieldInsn(int opcode, String owner, String name,

-            String desc) {

-        super.visitFieldInsn(opcode, owner, name, desc);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitMethodInsn(int opcode, String owner, String name,

-            String desc) {

-        super.visitMethodInsn(opcode, owner, name, desc);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,

-            Object... bsmArgs) {

-        super.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitJumpInsn(int opcode, Label label) {

-        super.visitJumpInsn(opcode, label);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitLdcInsn(Object cst) {

-        super.visitLdcInsn(cst);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitIincInsn(int var, int increment) {

-        super.visitIincInsn(var, increment);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitTableSwitchInsn(int min, int max, Label dflt,

-            Label... labels) {

-        super.visitTableSwitchInsn(min, max, dflt, labels);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {

-        super.visitLookupSwitchInsn(dflt, keys, labels);

-        insertDeadcode();

-    }

-

-    @Override

-    public void visitMultiANewArrayInsn(String desc, int dims) {

-        super.visitMultiANewArrayInsn(desc, dims);

-        insertDeadcode();

-    }

-

-    private void insertDeadcode() {

-        // inserts dead code once every 50 instructions in average

-        if (r.nextFloat() < 1.0 / 50.0) {

-            Label end = new Label();

-            mv.visitJumpInsn(Opcodes.GOTO, end);

-            mv.visitLdcInsn("DEAD CODE");

-            mv.visitLabel(end);

-        }

-    }

-}

diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeFramesTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterComputeFramesTest.java
deleted file mode 100644
index 573aa1a..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeFramesTest.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.IllegalClassFormatException;
-import java.lang.instrument.Instrumentation;
-import java.security.ProtectionDomain;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * ClassWriter tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriterComputeFramesTest extends AbstractTest {
-
-    public static void premain(final String agentArgs,
-            final Instrumentation inst) {
-        inst.addTransformer(new ClassFileTransformer() {
-            public byte[] transform(final ClassLoader loader,
-                    final String className, final Class<?> classBeingRedefined,
-                    final ProtectionDomain domain, final byte[] classFileBuffer)
-                    throws IllegalClassFormatException {
-                String n = className.replace('/', '.');
-                if (n.indexOf("junit") != -1 || n.startsWith("invalid.")) {
-                    return null;
-                }
-                if (agentArgs.length() == 0 || n.indexOf(agentArgs) != -1) {
-                    return transformClass(n, classFileBuffer);
-                } else {
-                    return null;
-                }
-            }
-        });
-    }
-
-    static byte[] transformClass(final String n, final byte[] clazz) {
-        ClassReader cr = new ClassReader(clazz);
-        ClassWriter cw = new ComputeClassWriter(ClassWriter.COMPUTE_FRAMES);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-
-            @Override
-            public void visit(final int version, final int access,
-                    final String name, final String signature,
-                    final String superName, final String[] interfaces) {
-                // Set V1_7 version to prevent fallback to old verifier.
-                super.visit((version & 0xFFFF) < Opcodes.V1_7 ? Opcodes.V1_7
-                        : version, access, name, signature, superName,
-                        interfaces);
-            }
-
-        }, ClassReader.SKIP_FRAMES);
-        return cw.toByteArray();
-    }
-
-    public static TestSuite suite() throws Exception {
-        TestSuite suite = new ClassWriterComputeFramesTest().getSuite();
-        suite.addTest(new VerifierTest());
-        return suite;
-    }
-
-    @Override
-    public void test() throws Exception {
-        try {
-            Class.forName(n, true, getClass().getClassLoader());
-        } catch (NoClassDefFoundError ncdfe) {
-            // ignored
-        } catch (UnsatisfiedLinkError ule) {
-            // ignored
-        } catch (ClassFormatError cfe) {
-            fail(cfe.getMessage());
-        } catch (VerifyError ve) {
-            String s = n.replace('.', '/') + ".class";
-            InputStream is = getClass().getClassLoader().getResourceAsStream(s);
-            ClassReader cr = new ClassReader(is);
-            byte[] b = transformClass("", cr.b);
-            StringWriter sw1 = new StringWriter();
-            StringWriter sw2 = new StringWriter();
-            sw2.write(ve.toString() + "\n");
-            ClassVisitor cv1 = new TraceClassVisitor(new PrintWriter(sw1));
-            ClassVisitor cv2 = new TraceClassVisitor(new PrintWriter(sw2));
-            cr.accept(cv1, 0);
-            new ClassReader(b).accept(cv2, 0);
-            String s1 = sw1.toString();
-            String s2 = sw2.toString();
-            assertEquals("different data", s1, s2);
-        }
-    }
-}
-
-/**
- * A ClassWriter that computes the common super class of two classes without
- * actually loading them with a ClassLoader.
- * 
- * @author Eric Bruneton
- */
-class ComputeClassWriter extends ClassWriter {
-
-    private ClassLoader l = getClass().getClassLoader();
-
-    public ComputeClassWriter(final int flags) {
-        super(flags);
-    }
-
-    @Override
-    protected String getCommonSuperClass(final String type1, final String type2) {
-        try {
-            ClassReader info1 = typeInfo(type1);
-            ClassReader info2 = typeInfo(type2);
-            if ((info1.getAccess() & Opcodes.ACC_INTERFACE) != 0) {
-                if (typeImplements(type2, info2, type1)) {
-                    return type1;
-                }
-                if ((info2.getAccess() & Opcodes.ACC_INTERFACE) != 0) {
-                    if (typeImplements(type1, info1, type2)) {
-                        return type2;
-                    }
-                }
-                return "java/lang/Object";
-            }
-            if ((info2.getAccess() & Opcodes.ACC_INTERFACE) != 0) {
-                if (typeImplements(type1, info1, type2)) {
-                    return type2;
-                } else {
-                    return "java/lang/Object";
-                }
-            }
-            StringBuilder b1 = typeAncestors(type1, info1);
-            StringBuilder b2 = typeAncestors(type2, info2);
-            String result = "java/lang/Object";
-            int end1 = b1.length();
-            int end2 = b2.length();
-            while (true) {
-                int start1 = b1.lastIndexOf(";", end1 - 1);
-                int start2 = b2.lastIndexOf(";", end2 - 1);
-                if (start1 != -1 && start2 != -1
-                        && end1 - start1 == end2 - start2) {
-                    String p1 = b1.substring(start1 + 1, end1);
-                    String p2 = b2.substring(start2 + 1, end2);
-                    if (p1.equals(p2)) {
-                        result = p1;
-                        end1 = start1;
-                        end2 = start2;
-                    } else {
-                        return result;
-                    }
-                } else {
-                    return result;
-                }
-            }
-        } catch (IOException e) {
-            throw new RuntimeException(e.toString());
-        }
-    }
-
-    /**
-     * Returns the internal names of the ancestor classes of the given type.
-     * 
-     * @param type
-     *            the internal name of a class or interface.
-     * @param info
-     *            the ClassReader corresponding to 'type'.
-     * @return a StringBuilder containing the ancestor classes of 'type',
-     *         separated by ';'. The returned string has the following format:
-     *         ";type1;type2 ... ;typeN", where type1 is 'type', and typeN is a
-     *         direct subclass of Object. If 'type' is Object, the returned
-     *         string is empty.
-     * @throws IOException
-     *             if the bytecode of 'type' or of some of its ancestor class
-     *             cannot be loaded.
-     */
-    private StringBuilder typeAncestors(String type, ClassReader info)
-            throws IOException {
-        StringBuilder b = new StringBuilder();
-        while (!"java/lang/Object".equals(type)) {
-            b.append(';').append(type);
-            type = info.getSuperName();
-            info = typeInfo(type);
-        }
-        return b;
-    }
-
-    /**
-     * Returns true if the given type implements the given interface.
-     * 
-     * @param type
-     *            the internal name of a class or interface.
-     * @param info
-     *            the ClassReader corresponding to 'type'.
-     * @param itf
-     *            the internal name of a interface.
-     * @return true if 'type' implements directly or indirectly 'itf'
-     * @throws IOException
-     *             if the bytecode of 'type' or of some of its ancestor class
-     *             cannot be loaded.
-     */
-    private boolean typeImplements(String type, ClassReader info, String itf)
-            throws IOException {
-        while (!"java/lang/Object".equals(type)) {
-            String[] itfs = info.getInterfaces();
-            for (int i = 0; i < itfs.length; ++i) {
-                if (itfs[i].equals(itf)) {
-                    return true;
-                }
-            }
-            for (int i = 0; i < itfs.length; ++i) {
-                if (typeImplements(itfs[i], typeInfo(itfs[i]), itf)) {
-                    return true;
-                }
-            }
-            type = info.getSuperName();
-            info = typeInfo(type);
-        }
-        return false;
-    }
-
-    /**
-     * Returns a ClassReader corresponding to the given class or interface.
-     * 
-     * @param type
-     *            the internal name of a class or interface.
-     * @return the ClassReader corresponding to 'type'.
-     * @throws IOException
-     *             if the bytecode of 'type' cannot be loaded.
-     */
-    private ClassReader typeInfo(final String type) throws IOException {
-        InputStream is = l.getResourceAsStream(type + ".class");
-        try {
-            return new ClassReader(is);
-        } finally {
-            is.close();
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeMaxsTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterComputeMaxsTest.java
deleted file mode 100644
index 79ba0a4..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeMaxsTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestSuite;
-
-/**
- * ClassWriter tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriterComputeMaxsTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new ClassWriterComputeMaxsTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cr.accept(cw, 0);
-        // computed maxStack and maxLocals may differ from original class
-        // assertEquals(cr, new ClassReader(cw.toByteArray()));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeMaxsUnitTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterComputeMaxsUnitTest.java
deleted file mode 100644
index edca835..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterComputeMaxsUnitTest.java
+++ /dev/null
@@ -1,963 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import junit.framework.TestCase;
-
-/**
- * ClassWriter unit tests for COMPUTE_MAXS option with JSR instructions.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriterComputeMaxsUnitTest extends TestCase {
-
-    private Field successors;
-
-    private Field successor;
-
-    private Field succ;
-
-    private Field next;
-
-    protected ClassWriter cw;
-
-    protected MethodVisitor mv;
-
-    private Label start;
-
-    @Override
-    protected void setUp() throws Exception {
-        Class<?> lClass = Label.class;
-        Class<?> eClass = Edge.class;
-        try {
-            successors = lClass.getDeclaredField("successors");
-            successor = lClass.getDeclaredField("successor");
-            succ = eClass.getDeclaredField("successor");
-            next = eClass.getDeclaredField("next");
-        } catch (RuntimeException exception) {
-            String f = "src/org/objectweb/asm/optimizer/shrink.properties";
-            Properties p = new Properties();
-            FileInputStream is = new FileInputStream(f);
-            try {
-                p.load(is);
-            } finally {
-                is.close();
-            }
-            String l = Type.getInternalName(lClass) + ".";
-            String e = Type.getInternalName(eClass) + ".";
-            successors = lClass.getDeclaredField(p
-                    .getProperty(l + "successors"));
-            successor = lClass.getDeclaredField(p.getProperty(l + "successor"));
-            succ = eClass.getDeclaredField(p.getProperty(e + "successor"));
-            next = eClass.getDeclaredField(p.getProperty(e + "next"));
-        }
-        cw = new ClassWriter(isComputeMaxs() ? ClassWriter.COMPUTE_MAXS : 0);
-        cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "C", null,
-                "java/lang/Object", null);
-        mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(Opcodes.ALOAD, 0);
-        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",
-                "()V");
-        mv.visitInsn(Opcodes.RETURN);
-        mv.visitMaxs(1, 1);
-        mv.visitEnd();
-        mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "m", "()V", null, null);
-        mv.visitCode();
-        start = new Label();
-        LABEL(start);
-    }
-
-    protected boolean isComputeMaxs() {
-        return true;
-    }
-
-    private void NOP() {
-        mv.visitInsn(Opcodes.NOP);
-    }
-
-    private void PUSH() {
-        mv.visitInsn(Opcodes.ICONST_0);
-    }
-
-    private void ICONST_0() {
-        mv.visitInsn(Opcodes.ICONST_0);
-    }
-
-    private void ISTORE(final int var) {
-        mv.visitVarInsn(Opcodes.ISTORE, var);
-    }
-
-    private void ALOAD(final int var) {
-        mv.visitVarInsn(Opcodes.ALOAD, var);
-    }
-
-    private void ILOAD(final int var) {
-        mv.visitVarInsn(Opcodes.ILOAD, var);
-    }
-
-    private void ASTORE(final int var) {
-        mv.visitVarInsn(Opcodes.ASTORE, var);
-    }
-
-    private void RET(final int var) {
-        mv.visitVarInsn(Opcodes.RET, var);
-    }
-
-    private void ATHROW() {
-        mv.visitInsn(Opcodes.ATHROW);
-    }
-
-    private void ACONST_NULL() {
-        mv.visitInsn(Opcodes.ACONST_NULL);
-    }
-
-    private void RETURN() {
-        mv.visitInsn(Opcodes.RETURN);
-    }
-
-    private void LABEL(final Label l) {
-        mv.visitLabel(l);
-    }
-
-    private void IINC(final int var, final int amnt) {
-        mv.visitIincInsn(var, amnt);
-    }
-
-    private void GOTO(final Label l) {
-        mv.visitJumpInsn(Opcodes.GOTO, l);
-    }
-
-    private void JSR(final Label l) {
-        mv.visitJumpInsn(Opcodes.JSR, l);
-    }
-
-    private void IFNONNULL(final Label l) {
-        mv.visitJumpInsn(Opcodes.IFNONNULL, l);
-    }
-
-    private void IFNE(final Label l) {
-        mv.visitJumpInsn(Opcodes.IFNE, l);
-    }
-
-    private void TRYCATCH(final Label start, final Label end,
-            final Label handler) {
-        mv.visitTryCatchBlock(start, end, handler, null);
-    }
-
-    protected void assertMaxs(final int maxStack, final int maxLocals) {
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        cw.visitEnd();
-        byte[] b = cw.toByteArray();
-        ClassReader cr = new ClassReader(b);
-        cr.accept(new ClassVisitor(Opcodes.ASM4) {
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                if (name.equals("m")) {
-                    return new MethodVisitor(Opcodes.ASM4) {
-                        @Override
-                        public void visitMaxs(final int realMaxStack,
-                                final int realMaxLocals) {
-                            assertEquals("maxStack", maxStack, realMaxStack);
-                            assertEquals("maxLocals", maxLocals, realMaxLocals);
-                        }
-                    };
-                } else {
-                    return null;
-                }
-            }
-        }, 0);
-
-        try {
-            TestClassLoader loader = new TestClassLoader();
-            Class<?> c = loader.defineClass("C", b);
-            c.newInstance();
-        } catch (Throwable t) {
-            fail(t.getMessage());
-        }
-    }
-
-    protected void assertGraph(final String graph) {
-        Map<String, Set<String>> expected = new HashMap<String, Set<String>>();
-        Properties p = new Properties();
-        try {
-            p.load(new ByteArrayInputStream(graph.getBytes()));
-        } catch (Exception e) {
-            fail();
-        }
-        Iterator<Map.Entry<Object, Object>> i = p.entrySet().iterator();
-        while (i.hasNext()) {
-            Map.Entry<Object, Object> entry = i.next();
-            String key = (String) entry.getKey();
-            String value = (String) entry.getValue();
-            StringTokenizer st = new StringTokenizer(value, ",");
-            Set<String> s = new HashSet<String>();
-            while (st.hasMoreTokens()) {
-                s.add(st.nextToken());
-            }
-            expected.put(key, s);
-        }
-
-        Map<String, Set<String>> actual = new HashMap<String, Set<String>>();
-        try {
-            Label l = start;
-            while (l != null) {
-                String key = "N" + l.getOffset();
-                Set<String> value = new HashSet<String>();
-                Edge e = (Edge) successors.get(l);
-                while (e != null) {
-                    value.add("N" + ((Label) succ.get(e)).getOffset());
-                    e = (Edge) next.get(e);
-                }
-                actual.put(key, value);
-                l = (Label) successor.get(l);
-            }
-        } catch (IllegalAccessException e) {
-            fail();
-        }
-
-        assertEquals(expected, actual);
-    }
-
-    protected static class TestClassLoader extends ClassLoader {
-
-        public TestClassLoader() {
-        }
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-
-    /**
-     * Tests a method which has the most basic <code>try{}finally</code> form
-     * imaginable:
-     * 
-     * <pre>
-     * public void a() {
-     *     int a = 0;
-     *     try {
-     *         a++;
-     *     } finally {
-     *         a--;
-     *     }
-     * }
-     * </pre>
-     */
-    public void testBasic() {
-        Label L0 = new Label();
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-        Label L4 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        /* L0: body of try block */
-        LABEL(L0); // N2
-        IINC(1, 1);
-        GOTO(L1);
-
-        /* L2: exception handler */
-        LABEL(L2); // N8
-        ASTORE(3);
-        JSR(L3);
-        ALOAD(3); // N12
-        ATHROW();
-
-        /* L3: subroutine */
-        LABEL(L3); // N14
-        ASTORE(2);
-        IINC(1, -1);
-        PUSH();
-        PUSH();
-        RET(2);
-
-        /* L1: non-exceptional exit from try block */
-        LABEL(L1); // N22
-        JSR(L3);
-        PUSH(); // N25
-        PUSH();
-        LABEL(L4); // N27
-        RETURN();
-
-        TRYCATCH(L0, L2, L2);
-        TRYCATCH(L1, L4, L2);
-
-        assertMaxs(4, 4);
-        assertGraph("N0=N2\n" + "N2=N22,N8\n" + "N8=N14,N12\n" + "N12=\n"
-                + "N14=N12,N25\n" + "N22=N14,N25,N8\n" + "N25=N27,N8\n"
-                + "N27=\n");
-    }
-
-    /**
-     * Tests a method which has an if/else-if w/in the finally clause:
-     * 
-     * <pre>
-     * public void a() {
-     *     int a = 0;
-     *     try {
-     *         a++;
-     *     } finally {
-     *         if (a == 0)
-     *             a += 2;
-     *         else
-     *             a += 3;
-     *     }
-     * }
-     * </pre>
-     */
-    public void testIfElseInFinally() {
-        Label L0 = new Label();
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-        Label L4 = new Label();
-        Label L5 = new Label();
-        Label L6 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        /* L0: body of try block */
-        LABEL(L0); // N2
-        IINC(1, 1);
-        GOTO(L1);
-
-        /* L2: exception handler */
-        LABEL(L2); // N8
-        ASTORE(3);
-        JSR(L3);
-        PUSH(); // N12
-        PUSH();
-        ALOAD(3);
-        ATHROW();
-
-        /* L3: subroutine */
-        LABEL(L3); // N16
-        ASTORE(2);
-        PUSH();
-        PUSH();
-        ILOAD(1);
-        IFNE(L4);
-        IINC(1, 2);
-        GOTO(L5);
-
-        LABEL(L4); // N29
-        IINC(1, 3);
-
-        LABEL(L5); // N32 common exit
-        RET(2);
-
-        /* L1: non-exceptional exit from try block */
-        LABEL(L1); // N34
-        JSR(L3);
-        LABEL(L6); // N37
-        RETURN();
-
-        TRYCATCH(L0, L2, L2);
-        TRYCATCH(L1, L6, L2);
-
-        assertMaxs(5, 4);
-        assertGraph("N0=N2\n" + "N2=N34,N8\n" + "N8=N16,N12\n" + "N12=\n"
-                + "N16=N29,N32\n" + "N29=N32\n" + "N32=N37,N12\n"
-                + "N34=N16,N37,N8\n" + "N37=\n");
-
-    }
-
-    /**
-     * Tests a simple nested finally:
-     * 
-     * <pre>
-     * public void a1() {
-     *     int a = 0;
-     *     try {
-     *         a += 1;
-     *     } finally {
-     *         try {
-     *             a += 2;
-     *         } finally {
-     *             a += 3;
-     *         }
-     *     }
-     * }
-     * </pre>
-     */
-    public void testSimpleNestedFinally() {
-        Label L0 = new Label();
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-        Label L4 = new Label();
-        Label L5 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        // L0: Body of try block:
-        LABEL(L0); // N2
-        IINC(1, 1);
-        JSR(L3);
-        GOTO(L1); // N8
-
-        // L2: First exception handler:
-        LABEL(L2); // N11
-        ASTORE(4);
-        JSR(L3);
-        ALOAD(4); // N16
-        ATHROW();
-
-        // L3: First subroutine:
-        LABEL(L3); // N19
-        ASTORE(2);
-        IINC(1, 2);
-        JSR(L4);
-        PUSH(); // N26
-        PUSH();
-        RET(2);
-
-        // L5: Second exception handler:
-        LABEL(L5); // N30
-        ASTORE(5);
-        JSR(L4);
-        ALOAD(5); // N35
-        ATHROW();
-
-        // L4: Second subroutine:
-        LABEL(L4); // N38
-        ASTORE(3);
-        PUSH();
-        PUSH();
-        IINC(1, 3);
-        RET(3);
-
-        // L1: On normal exit, try block jumps here:
-        LABEL(L1); // N46
-        RETURN();
-
-        TRYCATCH(L0, L2, L2);
-        TRYCATCH(L3, L5, L5);
-
-        assertMaxs(5, 6);
-        assertGraph("N0=N2\n" + "N2=N11,N19,N8\n" + "N8=N11,N46\n"
-                + "N11=N19,N16\n" + "N16=\n" + "N19=N26,N30,N38\n"
-                + "N26=N16,N30,N8\n" + "N30=N38,N35\n" + "N35=\n"
-                + "N38=N26,N35\n" + "N46=\n");
-    }
-
-    /**
-     * This tests a subroutine which has no ret statement, but ends in a
-     * "return" instead.
-     * 
-     * We structure this as a try/finally with a break in the finally. Because
-     * the while loop is infinite, it's clear from the byte code that the only
-     * path which reaches the RETURN instruction is through the subroutine.
-     * 
-     * <pre>
-     * public void a1() {
-     *     int a = 0;
-     *     while (true) {
-     *         try {
-     *             a += 1;
-     *         } finally {
-     *             a += 2;
-     *             break;
-     *         }
-     *     }
-     * }
-     * </pre>
-     */
-    public void testSubroutineWithNoRet() {
-        Label L0 = new Label();
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-        Label L4 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        // L0: while loop header/try block
-        LABEL(L0); // N2
-        IINC(1, 1);
-        JSR(L1);
-        GOTO(L2); // N8
-
-        // L3: implicit catch block
-        LABEL(L3); // N11
-        ASTORE(2);
-        JSR(L1);
-        PUSH(); // N15
-        PUSH();
-        ALOAD(2);
-        ATHROW();
-
-        // L1: subroutine ...
-        LABEL(L1); // N19
-        ASTORE(3);
-        IINC(1, 2);
-        GOTO(L4); // ...not that it does not return!
-
-        // L2: end of the loop... goes back to the top!
-        LABEL(L2); // N26
-        GOTO(L0);
-
-        // L4:
-        LABEL(L4); // N29
-        RETURN();
-
-        TRYCATCH(L0, L3, L3);
-
-        assertMaxs(1, 4);
-        assertGraph("N0=N2\n" + "N2=N11,N19,N8\n" + "N8=N11,N26\n"
-                + "N11=N19,N15\n" + "N15=\n" + "N19=N29\n" + "N26=N2\n"
-                + "N29=\n");
-    }
-
-    /**
-     * This tests a subroutine which has no ret statement, but ends in a
-     * "return" instead.
-     * 
-     * <pre>
-     *   ACONST_NULL
-     *   JSR L0
-     * L0:
-     *   ASTORE 0
-     *   ASTORE 0
-     *   RETURN
-     * </pre>
-     */
-    public void testSubroutineWithNoRet2() {
-        Label L0 = new Label();
-        Label L1 = new Label();
-
-        ACONST_NULL(); // N0
-        JSR(L0);
-        NOP(); // N4
-        LABEL(L0); // N5
-        ASTORE(0);
-        ASTORE(0);
-        RETURN();
-        LABEL(L1); // N8
-        mv.visitLocalVariable("i", "I", null, L0, L1, 1);
-
-        assertMaxs(2, 2);
-        assertGraph("N0=N4,N5\n" + "N4=N5\n" + "N5=\n" + "N8=\n");
-    }
-
-    /**
-     * This tests a subroutine which has no ret statement, but instead exits
-     * implicitely by branching to code which is not part of the subroutine.
-     * (Sadly, this is legal)
-     * 
-     * We structure this as a try/finally in a loop with a break in the finally.
-     * The loop is not trivially infinite, so the RETURN statement is reachable
-     * both from the JSR subroutine and from the main entry point.
-     * 
-     * <pre>
-     * public void a1() {
-     *     int a = 0;
-     *     while (null == null) {
-     *         try {
-     *             a += 1;
-     *         } finally {
-     *             a += 2;
-     *             break;
-     *         }
-     *     }
-     * }
-     * </pre>
-     */
-    public void testImplicitExit() {
-        Label L0 = new Label();
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-        Label L4 = new Label();
-        Label L5 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        // L5: while loop header
-        LABEL(L5); // N2
-        ACONST_NULL();
-        IFNONNULL(L4);
-
-        // L0: try block
-        LABEL(L0); // N6
-        IINC(1, 1);
-        JSR(L1);
-        GOTO(L2); // N12
-
-        // L3: implicit catch block
-        LABEL(L3); // N15
-        ASTORE(2);
-        JSR(L1);
-        ALOAD(2); // N19
-        PUSH();
-        PUSH();
-        ATHROW();
-
-        // L1: subroutine ...
-        LABEL(L1); // N23
-        ASTORE(3);
-        IINC(1, 2);
-        GOTO(L4); // ...not that it does not return!
-
-        // L2: end of the loop... goes back to the top!
-        LABEL(L2); // N30
-        GOTO(L0);
-
-        // L4:
-        LABEL(L4); // N33
-        RETURN();
-
-        TRYCATCH(L0, L3, L3);
-
-        assertMaxs(1, 4);
-        assertGraph("N0=N2\n" + "N2=N6,N33\n" + "N6=N23,N12,N15\n"
-                + "N12=N30,N15\n" + "N15=N23,N19\n" + "N19=\n" + "N23=N33\n"
-                + "N30=N6\n" + "N33=\n");
-    }
-
-    /**
-     * Tests a nested try/finally with implicit exit from one subroutine to the
-     * other subroutine. Equivalent to the following java code:
-     * 
-     * <pre>
-     * void m(boolean b) {
-     *     try {
-     *         return;
-     *     } finally {
-     *         while (b) {
-     *             try {
-     *                 return;
-     *             } finally {
-     *                 // NOTE --- this break avoids the second return above (weird)
-     *                 if (b)
-     *                     break;
-     *             }
-     *         }
-     *     }
-     * }
-     * </pre>
-     * 
-     * This example is from the paper, "Subroutine Inlining and Bytecode
-     * Abstraction to Simplify Static and Dynamic Analysis" by Cyrille Artho and
-     * Armin Biere.
-     */
-    public void testImplicitExitToAnotherSubroutine() {
-        Label T1 = new Label();
-        Label C1 = new Label();
-        Label S1 = new Label();
-        Label L = new Label();
-        Label C2 = new Label();
-        Label S2 = new Label();
-        Label W = new Label();
-        Label X = new Label();
-
-        // variable numbers:
-        int b = 1;
-        int e1 = 2;
-        int e2 = 3;
-        int r1 = 4;
-        int r2 = 5;
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        // T1: first try:
-        LABEL(T1); // N2
-        JSR(S1);
-        RETURN(); // N5
-
-        // C1: exception handler for first try
-        LABEL(C1); // N6
-        ASTORE(e1);
-        JSR(S1);
-        PUSH(); // N10
-        PUSH();
-        ALOAD(e1);
-        ATHROW();
-
-        // S1: first finally handler
-        LABEL(S1); // N14
-        ASTORE(r1);
-        PUSH();
-        PUSH();
-        GOTO(W);
-
-        // L: body of while loop, also second try
-        LABEL(L); // N21
-        JSR(S2);
-        RETURN(); // N24
-
-        // C2: exception handler for second try
-        LABEL(C2); // N25
-        ASTORE(e2);
-        PUSH();
-        PUSH();
-        JSR(S2);
-        ALOAD(e2); // N31
-        ATHROW();
-
-        // S2: second finally handler
-        LABEL(S2); // N33
-        ASTORE(r2);
-        ILOAD(b);
-        IFNE(X);
-        RET(r2);
-
-        // W: test for the while loop
-        LABEL(W); // N41
-        ILOAD(b);
-        IFNE(L); // falls through to X
-
-        // X: exit from finally{} block
-        LABEL(X); // N45
-        RET(r1);
-
-        TRYCATCH(T1, C1, C1);
-        TRYCATCH(L, C2, C2);
-
-        assertMaxs(5, 6);
-        assertGraph("N0=N2\n" + "N2=N6,N5,N14\n" + "N5=N6\n" + "N6=N14,N10\n"
-                + "N10=\n" + "N14=N41\n" + "N21=N24,N25,N33\n" + "N24=N25\n"
-                + "N25=N31,N33\n" + "N31=\n" + "N33=N31,N45,N24\n"
-                + "N41=N45,N21\n" + "N45=N5,N10\n");
-    }
-
-    public void testImplicitExitToAnotherSubroutine2() {
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-        JSR(L1);
-        RETURN(); // N5
-
-        LABEL(L1); // N6
-        ASTORE(2);
-        JSR(L2);
-        GOTO(L3); // N10
-
-        LABEL(L2); // N13
-        ASTORE(3);
-        ILOAD(1);
-        IFNE(L3);
-        RET(3);
-
-        LABEL(L3); // N20
-        RET(2);
-
-        assertMaxs(1, 4);
-        assertGraph("N0=N6,N5\n" + "N5=\n" + "N6=N10,N13\n" + "N10=N20\n"
-                + "N13=N20,N10\n" + "N20=N5\n");
-    }
-
-    /**
-     * This tests a simple subroutine where the control flow jumps back and
-     * forth between the subroutine and the caller.
-     * 
-     * This would not normally be produced by a java compiler.
-     */
-    public void testInterleavedCode() {
-        Label L1 = new Label();
-        Label L2 = new Label();
-        Label L3 = new Label();
-        Label L4 = new Label();
-
-        ICONST_0(); // N0
-        ISTORE(1);
-        JSR(L1);
-        GOTO(L2); // N5
-
-        // L1: subroutine 1
-        LABEL(L1); // N8
-        ASTORE(2);
-        IINC(1, 1);
-        GOTO(L3);
-
-        // L2: second part of main subroutine
-        LABEL(L2); // N15
-        IINC(1, 2);
-        GOTO(L4);
-
-        // L3: second part of subroutine 1
-        LABEL(L3); // N21
-        IINC(1, 4);
-        PUSH();
-        PUSH();
-        RET(2);
-
-        // L4: third part of main subroutine
-        LABEL(L4); // N28
-        PUSH();
-        PUSH();
-        RETURN();
-
-        assertMaxs(4, 3);
-        assertGraph("N0=N5,N8\n" + "N5=N15\n" + "N8=N21\n" + "N15=N28\n"
-                + "N21=N5\n" + "N28=\n");
-    }
-
-    /**
-     * Tests a nested try/finally with implicit exit from one subroutine to the
-     * other subroutine, and with a surrounding try/catch thrown in the mix.
-     * Equivalent to the following java code:
-     * 
-     * <pre>
-     * void m(int b) {
-     *     try {
-     *         try {
-     *             return;
-     *         } finally {
-     *             while (b) {
-     *                 try {
-     *                     return;
-     *                 } finally {
-     *                     // NOTE --- this break avoids the second return above
-     *                     // (weird)
-     *                     if (b)
-     *                         break;
-     *                 }
-     *             }
-     *         }
-     *     } catch (Exception e) {
-     *         b += 3;
-     *         return;
-     *     }
-     * }
-     * </pre>
-     */
-    public void testImplicitExitInTryCatch() {
-        Label T1 = new Label();
-        Label C1 = new Label();
-        Label S1 = new Label();
-        Label L = new Label();
-        Label C2 = new Label();
-        Label S2 = new Label();
-        Label W = new Label();
-        Label X = new Label();
-        Label OC = new Label();
-
-        // variable numbers:
-        int b = 1;
-        int e1 = 2;
-        int e2 = 3;
-        int r1 = 4;
-        int r2 = 5;
-
-        ICONST_0(); // N0
-        ISTORE(1);
-
-        // T1: first try:
-        LABEL(T1); // N2
-        JSR(S1);
-        RETURN(); // N5
-
-        // C1: exception handler for first try
-        LABEL(C1); // N6
-        ASTORE(e1);
-        JSR(S1);
-        ALOAD(e1); // N10
-        ATHROW();
-
-        // S1: first finally handler
-        LABEL(S1); // N12
-        ASTORE(r1);
-        GOTO(W);
-
-        // L: body of while loop, also second try
-        LABEL(L); // N17
-        JSR(S2);
-        PUSH(); // N20
-        PUSH();
-        RETURN();
-
-        // C2: exception handler for second try
-        LABEL(C2); // N23
-        ASTORE(e2);
-        JSR(S2);
-        ALOAD(e2); // N27
-        ATHROW();
-
-        // S2: second finally handler
-        LABEL(S2); // N29
-        ASTORE(r2);
-        ILOAD(b);
-        IFNE(X);
-        PUSH();
-        PUSH();
-        RET(r2);
-
-        // W: test for the while loop
-        LABEL(W); // N39
-        ILOAD(b);
-        IFNE(L); // falls through to X
-
-        // X: exit from finally{} block
-        LABEL(X); // N43
-        RET(r1);
-
-        // OC: outermost catch
-        LABEL(OC); // N45
-        IINC(b, 3);
-        RETURN();
-
-        TRYCATCH(T1, C1, C1);
-        TRYCATCH(L, C2, C2);
-        TRYCATCH(T1, OC, OC);
-
-        assertMaxs(4, 6);
-        assertGraph("N0=N2\n" + "N2=N6,N45,N5,N12\n" + "N5=N6,N45\n"
-                + "N6=N45,N12,N10\n" + "N10=N45\n" + "N12=N39,N45\n"
-                + "N17=N23,N45,N20,N29\n" + "N20=N23,N45\n"
-                + "N23=N45,N27,N29\n" + "N27=N45\n" + "N29=N43,N45,N20,N27\n"
-                + "N39=N43,N45,N17\n" + "N43=N45,N5,N10\n" + "N45=\n");
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterCopyPoolTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterCopyPoolTest.java
deleted file mode 100644
index a2b6a07..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterCopyPoolTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestSuite;
-
-/**
- * ClassWriter tests for copyPool() optimization.
- * 
- * @author Eugene Kuleshov
- */
-public class ClassWriterCopyPoolTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new ClassWriterCopyPoolTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw1 = new ClassWriter(0);
-        ClassWriter cw2 = new ClassWriter(cr, 0);
-        cr.accept(new ChangeExceptionAdapter(cw1), 0);
-        cr.accept(new ChangeExceptionAdapter(cw2), 0);
-        assertEquals(new ClassReader(cw1.toByteArray()),
-                new ClassReader(cw2.toByteArray()));
-    }
-
-    static class ChangeExceptionAdapter extends ClassVisitor {
-
-        public ChangeExceptionAdapter(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            if (exceptions != null && exceptions.length > 0) {
-                exceptions[0] = "java/lang/Throwable";
-            }
-            return super.visitMethod(access, name, desc, signature, exceptions);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterResizeInsnsTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterResizeInsnsTest.java
deleted file mode 100644
index a578356..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterResizeInsnsTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.IllegalClassFormatException;
-import java.lang.instrument.Instrumentation;
-import java.security.ProtectionDomain;
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.attrs.CodeComment;
-
-public class ClassWriterResizeInsnsTest extends AbstractTest {
-
-    public static void premain(final String agentArgs,
-            final Instrumentation inst) {
-        inst.addTransformer(new ClassFileTransformer() {
-            public byte[] transform(final ClassLoader loader,
-                    final String className, final Class<?> classBeingRedefined,
-                    final ProtectionDomain domain, byte[] b)
-                    throws IllegalClassFormatException {
-                String n = className.replace('/', '.');
-                if (agentArgs.length() == 0 || n.indexOf(agentArgs) != -1) {
-                    try {
-                        b = transformClass(b, ClassWriter.COMPUTE_FRAMES);
-                        if (n.equals("pkg.FrameMap")) {
-                            transformClass(b, 0);
-                        }
-                        return b;
-                    } catch (Throwable e) {
-                        return transformClass(b, 0);
-                    }
-                } else {
-                    return null;
-                }
-            }
-        });
-    }
-
-    static byte[] transformClass(final byte[] clazz, final int flags) {
-        ClassReader cr = new ClassReader(clazz);
-        ClassWriter cw = new ComputeClassWriter(flags);
-        ClassVisitor ca = new ClassVisitor(Opcodes.ASM4, cw) {
-
-            boolean transformed = false;
-
-            @Override
-            public void visit(int version, int access, String name,
-                    String signature, String superName, String[] interfaces) {
-                if (flags == ClassWriter.COMPUTE_FRAMES) {
-                    // Set V1_7 version to prevent fallback to old verifier.
-                    version = (version & 0xFFFF) < Opcodes.V1_7 ? Opcodes.V1_7
-                            : version;
-                }
-                super.visit(version, access, name, signature, superName,
-                        interfaces);
-            }
-
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                return new MethodVisitor(Opcodes.ASM4, cv.visitMethod(access,
-                        name, desc, signature, exceptions)) {
-                    private final HashSet<Label> labels = new HashSet<Label>();
-
-                    @Override
-                    public void visitLabel(final Label label) {
-                        super.visitLabel(label);
-                        labels.add(label);
-                    }
-
-                    @Override
-                    public void visitJumpInsn(final int opcode,
-                            final Label label) {
-                        super.visitJumpInsn(opcode, label);
-                        if (opcode != Opcodes.GOTO) {
-                            if (!transformed && !labels.contains(label)) {
-                                transformed = true;
-                                for (int i = 0; i < 33000; ++i) {
-                                    mv.visitInsn(Opcodes.NOP);
-                                }
-                            }
-                        }
-                    }
-                };
-            }
-        };
-        cr.accept(ca, new Attribute[] { new CodeComment() }, 0);
-        return cw.toByteArray();
-    }
-
-    public static TestSuite suite() throws Exception {
-        TestSuite suite = new ClassWriterResizeInsnsTest().getSuite();
-        suite.addTest(new VerifierTest());
-        return suite;
-    }
-
-    @Override
-    public void test() throws Exception {
-        try {
-            Class.forName(n, true, getClass().getClassLoader());
-        } catch (NoClassDefFoundError ncdfe) {
-            // ignored
-        } catch (UnsatisfiedLinkError ule) {
-            // ignored
-        } catch (ClassFormatError cfe) {
-            fail(cfe.getMessage());
-        } catch (VerifyError ve) {
-            fail(ve.toString());
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterTest.java
deleted file mode 100644
index 7dc1a49..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestSuite;
-
-/**
- * ClassWriter tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new ClassWriterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        cr.accept(cw, 0);
-        // Also test the ClassReader(byte[],int,int) constructor
-        byte[] b = cw.toByteArray();
-        byte[] c = new byte[b.length + 1];
-        System.arraycopy(b, 0, c, 1, b.length);
-        assertEquals(cr, new ClassReader(c, 1, b.length));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/ClassWriterUnitTest.java b/asm4/test/conform/org/objectweb/asm/ClassWriterUnitTest.java
deleted file mode 100644
index d79aa3a..0000000
--- a/asm4/test/conform/org/objectweb/asm/ClassWriterUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestCase;
-
-/**
- * ClassWriter unit tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriterUnitTest extends TestCase {
-
-    public void testNewConst() {
-        ClassWriter cw = new ClassWriter(0);
-        cw.newConst(new Byte((byte) 0));
-        cw.newConst(new Character('0'));
-        cw.newConst(new Short((short) 0));
-        cw.newConst(Boolean.FALSE);
-        cw.newField("A", "f", "I");
-        cw.newMethod("A", "m", "()V", false);
-    }
-
-    public void testIllegalNewConstArgument() {
-        ClassWriter cw = new ClassWriter(0);
-        try {
-            cw.newConst(new Object());
-            fail();
-        } catch (RuntimeException e) {
-        }
-    }
-
-    public void testIllegalGetCommonSuperClassArguments() {
-        ClassWriter cw = new ClassWriter(0);
-        try {
-            cw.getCommonSuperClass("-", "-");
-            fail();
-        } catch (RuntimeException e) {
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/LabelUnitTest.java b/asm4/test/conform/org/objectweb/asm/LabelUnitTest.java
deleted file mode 100644
index 8866743..0000000
--- a/asm4/test/conform/org/objectweb/asm/LabelUnitTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import junit.framework.TestCase;
-
-/**
- * Label unit tests.
- * 
- * @author Eric Bruneton
- */
-public class LabelUnitTest extends TestCase {
-
-    public void testToString() {
-        new Label().toString();
-    }
-
-    public void testGetOffset() {
-        Label l = new Label();
-        ClassWriter cw = new ClassWriter(0);
-        MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "m", "()V", null,
-                null);
-        mv.visitCode();
-        mv.visitLabel(l);
-        assertEquals(0, l.getOffset());
-    }
-
-    public void testIllegalGetOffsetState() {
-        try {
-            new Label().getOffset();
-            fail();
-        } catch (RuntimeException e) {
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/TypeUnitTest.java b/asm4/test/conform/org/objectweb/asm/TypeUnitTest.java
deleted file mode 100644
index 93545cf..0000000
--- a/asm4/test/conform/org/objectweb/asm/TypeUnitTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-
-import junit.framework.TestCase;
-
-/**
- * Type unit tests.
- * 
- * @author Eric Bruneton
- */
-public class TypeUnitTest extends TestCase implements Opcodes {
-
-    public void testConstants() {
-        assertEquals(Type.INT_TYPE, Type.getType(Integer.TYPE));
-        assertEquals(Type.VOID_TYPE, Type.getType(Void.TYPE));
-        assertEquals(Type.BOOLEAN_TYPE, Type.getType(Boolean.TYPE));
-        assertEquals(Type.BYTE_TYPE, Type.getType(Byte.TYPE));
-        assertEquals(Type.CHAR_TYPE, Type.getType(Character.TYPE));
-        assertEquals(Type.SHORT_TYPE, Type.getType(Short.TYPE));
-        assertEquals(Type.DOUBLE_TYPE, Type.getType(Double.TYPE));
-        assertEquals(Type.FLOAT_TYPE, Type.getType(Float.TYPE));
-        assertEquals(Type.LONG_TYPE, Type.getType(Long.TYPE));
-    }
-
-    public void testInternalName() {
-        String s1 = Type.getType(TypeUnitTest.class).getInternalName();
-        String s2 = Type.getInternalName(TypeUnitTest.class);
-        assertEquals(s1, s2);
-    }
-
-    public void testConstructorDescriptor() {
-        for (int i = 0; i < String.class.getConstructors().length; ++i) {
-            Constructor<?> c = String.class.getConstructors()[i];
-            Type.getConstructorDescriptor(c);
-        }
-    }
-
-    public void testMethodDescriptor() {
-        for (int i = 0; i < Arrays.class.getMethods().length; ++i) {
-            Method m = Arrays.class.getMethods()[i];
-            Type[] args = Type.getArgumentTypes(m);
-            Type r = Type.getReturnType(m);
-            String d1 = Type.getMethodDescriptor(r, args);
-            String d2 = Type.getMethodDescriptor(m);
-            assertEquals(d1, d2);
-        }
-    }
-
-    public void testGetOpcode() {
-        Type object = Type.getType("Ljava/lang/Object;");
-        assertEquals(BALOAD, Type.BOOLEAN_TYPE.getOpcode(IALOAD));
-        assertEquals(BALOAD, Type.BYTE_TYPE.getOpcode(IALOAD));
-        assertEquals(CALOAD, Type.CHAR_TYPE.getOpcode(IALOAD));
-        assertEquals(SALOAD, Type.SHORT_TYPE.getOpcode(IALOAD));
-        assertEquals(IALOAD, Type.INT_TYPE.getOpcode(IALOAD));
-        assertEquals(FALOAD, Type.FLOAT_TYPE.getOpcode(IALOAD));
-        assertEquals(LALOAD, Type.LONG_TYPE.getOpcode(IALOAD));
-        assertEquals(DALOAD, Type.DOUBLE_TYPE.getOpcode(IALOAD));
-        assertEquals(AALOAD, object.getOpcode(IALOAD));
-        assertEquals(IADD, Type.BOOLEAN_TYPE.getOpcode(IADD));
-        assertEquals(IADD, Type.BYTE_TYPE.getOpcode(IADD));
-        assertEquals(IADD, Type.CHAR_TYPE.getOpcode(IADD));
-        assertEquals(IADD, Type.SHORT_TYPE.getOpcode(IADD));
-        assertEquals(IADD, Type.INT_TYPE.getOpcode(IADD));
-        assertEquals(FADD, Type.FLOAT_TYPE.getOpcode(IADD));
-        assertEquals(LADD, Type.LONG_TYPE.getOpcode(IADD));
-        assertEquals(DADD, Type.DOUBLE_TYPE.getOpcode(IADD));
-    }
-
-    public void testHashcode() {
-        Type.getType("Ljava/lang/Object;").hashCode();
-    }
-
-    public void testObjectType() throws Exception {
-        Type t1 = Type.getObjectType("java/lang/Object");
-        Type t2 = Type.getType("Ljava/lang/Object;");
-        assertEquals(t2.getSort(), t1.getSort());
-        assertEquals(t2.getClassName(), t1.getClassName());
-        assertEquals(t2.getDescriptor(), t1.getDescriptor());
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/attrs/CodeComment.java b/asm4/test/conform/org/objectweb/asm/attrs/CodeComment.java
deleted file mode 100644
index 11ceb45..0000000
--- a/asm4/test/conform/org/objectweb/asm/attrs/CodeComment.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.attrs;
-
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.util.ASMifiable;
-import org.objectweb.asm.util.Textifiable;
-
-/**
- * A non standard code attribute used for testing purposes.
- * 
- * @author Eric Bruneton
- */
-public class CodeComment extends Attribute implements ASMifiable, Textifiable {
-
-    public CodeComment() {
-        super("CodeComment");
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    public boolean isCodeAttribute() {
-        return true;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-
-        return new CodeComment();
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector();
-    }
-
-    @Override
-    protected Label[] getLabels() {
-        super.getLabels();
-        return new Label[] { new Label() };
-    }
-
-    public void asmify(final StringBuffer buf, final String varName,
-            final Map<Label, String> labelNames) {
-        buf.append("Attribute ").append(varName)
-                .append(" = new org.objectweb.asm.attrs.CodeComment();");
-    }
-
-    public void textify(final StringBuffer buf,
-            final Map<Label, String> labelNames) {
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/attrs/Comment.java b/asm4/test/conform/org/objectweb/asm/attrs/Comment.java
deleted file mode 100644
index ff203cb..0000000
--- a/asm4/test/conform/org/objectweb/asm/attrs/Comment.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.attrs;
-
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.util.ASMifiable;
-import org.objectweb.asm.util.Textifiable;
-
-/**
- * A non standard attribute used for testing purposes.
- * 
- * @author Eric Bruneton
- */
-public class Comment extends Attribute implements ASMifiable, Textifiable {
-
-    public Comment() {
-        super("Comment");
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-
-        return new Comment();
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector();
-    }
-
-    public void asmify(final StringBuffer buf, final String varName,
-            final Map<Label, String> labelNames) {
-        buf.append("Attribute ").append(varName)
-                .append(" = new org.objectweb.asm.attrs.Comment();");
-    }
-
-    public void textify(final StringBuffer buf,
-            final Map<Label, String> labelNames) {
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/AdviceAdapterTest.java b/asm4/test/conform/org/objectweb/asm/commons/AdviceAdapterTest.java
deleted file mode 100644
index 65b9ceb..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/AdviceAdapterTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * AdviceAdapter tests.
- * 
- * @author Eugene Kuleshov
- */
-public class AdviceAdapterTest extends AbstractTest {
-
-    public static void main(final String[] args) throws Exception {
-        TestRunner.run(AdviceAdapterTest.suite());
-    }
-
-    public static TestSuite suite() throws Exception {
-        return new AdviceAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw1 = new ClassWriter(0);
-        ClassWriter cw2 = new ClassWriter(0);
-        cr.accept(new ReferenceClassAdapter(cw1), ClassReader.EXPAND_FRAMES);
-        cr.accept(new AdviceClassAdapter(cw2), ClassReader.EXPAND_FRAMES);
-        assertEquals(new ClassReader(cw1.toByteArray()),
-                new ClassReader(cw2.toByteArray()));
-    }
-
-    static class ReferenceClassAdapter extends ClassVisitor {
-
-        public ReferenceClassAdapter(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                    exceptions);
-
-            if (mv == null
-                    || (access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) > 0) {
-                return mv;
-            }
-
-            return new LocalVariablesSorter(access, desc, mv);
-        }
-    }
-
-    static class AdviceClassAdapter extends ClassVisitor {
-
-        public AdviceClassAdapter(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                    exceptions);
-
-            if (mv == null
-                    || (access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) > 0) {
-                return mv;
-            }
-
-            return new AdviceAdapter(Opcodes.ASM4, mv, access, name, desc) {
-
-                @Override
-                protected void onMethodEnter() {
-                    // mv.visitInsn(NOP);
-                    // mv.visitInsn(NOP);
-                    // mv.visitInsn(NOP);
-                }
-
-                @Override
-                protected void onMethodExit(final int opcode) {
-                    // mv.visitInsn(NOP);
-                    // mv.visitInsn(NOP);
-                    // mv.visitInsn(NOP);
-                    // mv.visitInsn(NOP);
-                }
-            };
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/AdviceAdapterUnitTest.java b/asm4/test/conform/org/objectweb/asm/commons/AdviceAdapterUnitTest.java
deleted file mode 100644
index 0e705b4..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/AdviceAdapterUnitTest.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * Simple example of using AdviceAdapter to implement tracing callback
- * 
- * @author Eugene Kuleshov
- */
-public class AdviceAdapterUnitTest extends AbstractTest {
-
-    @Override
-    public void test() throws Exception {
-        Class<?> c = getClass();
-        String name = c.getName();
-        AdvisingClassLoader cl = new AdvisingClassLoader(name + "$");
-        Class<?> cc = cl.loadClass(name + "$B");
-        Method m = cc.getMethod("run", new Class<?>[] { Integer.TYPE });
-        try {
-            m.invoke(null, new Object[] { new Integer(0) });
-        } catch (InvocationTargetException e) {
-            throw (Exception) e.getTargetException();
-        }
-    }
-
-    private static class AdvisingClassLoader extends ClassLoader {
-        private String prefix;
-
-        public AdvisingClassLoader(final String prefix) throws IOException {
-            this.prefix = prefix;
-        }
-
-        @Override
-        public Class<?> loadClass(final String name)
-                throws ClassNotFoundException {
-            if (name.startsWith(prefix)) {
-                try {
-                    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-                    ClassReader cr = new ClassReader(getClass()
-                            .getResourceAsStream(
-                                    "/" + name.replace('.', '/') + ".class"));
-                    cr.accept(new AdviceClassAdapter(cw),
-                            ClassReader.EXPAND_FRAMES);
-                    byte[] bytecode = cw.toByteArray();
-                    return super
-                            .defineClass(name, bytecode, 0, bytecode.length);
-                } catch (IOException ex) {
-                    throw new ClassNotFoundException("Load error: "
-                            + ex.toString(), ex);
-                }
-            }
-            return super.loadClass(name);
-        }
-
-    }
-
-    // test callback
-    private static int n = 0;
-
-    public static void enter(final String msg) {
-        System.err.println(off().append("enter ").append(msg).toString());
-        n++;
-    }
-
-    public static void exit(final String msg) {
-        n--;
-        System.err.println(off().append("<").toString());
-    }
-
-    private static StringBuffer off() {
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < n; i++) {
-            sb.append("  ");
-        }
-        return sb;
-    }
-
-    static class AdviceClassAdapter extends ClassVisitor implements Opcodes {
-        String cname;
-
-        public AdviceClassAdapter(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public void visit(final int version, final int access,
-                final String name, final String signature,
-                final String superName, final String[] interfaces) {
-            this.cname = name;
-            super.visit(version, access, name, signature, superName, interfaces);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                    exceptions);
-
-            if (mv == null
-                    || (access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) > 0) {
-                return mv;
-            }
-
-            return new AdviceAdapter(Opcodes.ASM4, mv, access, name, desc) {
-
-                @Override
-                protected void onMethodEnter() {
-                    mv.visitLdcInsn(cname + "." + name + desc);
-                    mv.visitMethodInsn(INVOKESTATIC,
-                            "org/objectweb/asm/commons/AdviceAdapterUnitTest",
-                            "enter", "(Ljava/lang/String;)V");
-                }
-
-                @Override
-                protected void onMethodExit(final int opcode) {
-                    mv.visitLdcInsn(cname + "." + name + desc);
-                    mv.visitMethodInsn(INVOKESTATIC,
-                            "org/objectweb/asm/commons/AdviceAdapterUnitTest",
-                            "exit", "(Ljava/lang/String;)V");
-                }
-
-            };
-        }
-    }
-
-    // TEST CLASSES
-
-    public static class A {
-        final String s;
-
-        public A(final String s) {
-            this.s = s;
-        }
-
-        public A(final A a) {
-            this.s = a.s;
-        }
-    }
-
-    public static class B extends A {
-
-        public B() {
-            super(new B(""));
-            test(this);
-        }
-
-        public B(final A a) {
-            super(a);
-            test(this);
-        }
-
-        public B(final String s) {
-            super(s == null ? new A("") : new A(s));
-            test(this);
-        }
-
-        private static A aa;
-
-        public B(final String s, final A a) {
-            this(s == null ? aa = new A(s) : a);
-            A aa = new A("");
-            test(aa);
-        }
-
-        public B(final String s, final String s1) {
-            super(s != null ? new A(getA(s1).s) : new A(s));
-            test(this);
-        }
-
-        private void test(final Object b) {
-        }
-
-        private static A getA(final String s) {
-            return new A(s);
-        }
-
-        // execute all
-        public static void run(final int n) {
-            new B();
-            new B(new A(""));
-            new B(new B());
-            new B("", new A(""));
-            new B("", "");
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/asm4/test/conform/org/objectweb/asm/commons/AnalyzerAdapterTest.java b/asm4/test/conform/org/objectweb/asm/commons/AnalyzerAdapterTest.java
deleted file mode 100644
index c564b93..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/AnalyzerAdapterTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * AnalyzerAdapter tests.
- * 
- * @author Eric Bruneton
- */
-public class AnalyzerAdapterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new AnalyzerAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        if (cr.readInt(4) != Opcodes.V1_6) {
-            try {
-                ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
-                cr.accept(cw, 0);
-                cr = new ClassReader(cw.toByteArray());
-            } catch (Exception e) {
-                skipTest();
-                return;
-            }
-        }
-        ClassWriter cw = new ClassWriter(0);
-        ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) {
-
-            private String owner;
-
-            @Override
-            public void visit(final int version, final int access,
-                    final String name, final String signature,
-                    final String superName, final String[] interfaces) {
-                owner = name;
-                cv.visit(version, access, name, signature, superName,
-                        interfaces);
-            }
-
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                MethodVisitor mv = cv.visitMethod(access, name, desc,
-                        signature, exceptions);
-                return new AnalyzerAdapter(owner, access, name, desc, mv);
-            }
-        };
-        cr.accept(cv, ClassReader.EXPAND_FRAMES);
-    }
-
-    /**
-     * Dummy method to avoid a FindBugs warning.
-     */
-    private void skipTest() {
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java b/asm4/test/conform/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java
deleted file mode 100644
index b4b0fee..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-public class CodeSizeEvaluatorTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new CodeSizeEvaluatorTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, new ClassWriter(0)) {
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                MethodVisitor mv = cv.visitMethod(access, name, desc,
-                        signature, exceptions);
-                return new CodeSizeEvaluator(mv) {
-                    @Override
-                    public void visitMaxs(final int maxStack,
-                            final int maxLocals) {
-                        Label end = new Label();
-                        mv.visitLabel(end);
-                        mv.visitMaxs(maxStack, maxLocals);
-                        int size = end.getOffset();
-                        assertTrue(getMinSize() + " <= " + size + " <= "
-                                + getMaxSize(), getMinSize() <= size
-                                && size <= getMaxSize());
-                    }
-                };
-            }
-        }, 0);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/GASMifier.java b/asm4/test/conform/org/objectweb/asm/commons/GASMifier.java
deleted file mode 100644
index 04bb644..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/GASMifier.java
+++ /dev/null
@@ -1,927 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.util.ASMifier;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * A {@link MethodVisitor} that prints the ASM code that generates the methods
- * it visits by using the GeneratorAdapter class.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class GASMifier extends ASMifier implements Opcodes {
-
-    int access;
-
-    Type[] argumentTypes;
-
-    int firstLocal;
-
-    Map<Integer, Integer> locals;
-
-    List<String> localTypes;
-
-    public GASMifier() {
-    }
-
-    public GASMifier(final String name, final int id) {
-        super(Opcodes.ASM4, name, id);
-    }
-
-    public GASMifier(final int access, final String desc) {
-        super(Opcodes.ASM4, "mg", 0);
-        this.access = access;
-        this.argumentTypes = Type.getArgumentTypes(desc);
-        int nextLocal = (Opcodes.ACC_STATIC & access) != 0 ? 0 : 1;
-        for (int i = 0; i < argumentTypes.length; i++) {
-            nextLocal += argumentTypes[i].getSize();
-        }
-        this.firstLocal = nextLocal;
-        this.locals = new HashMap<Integer, Integer>();
-        this.localTypes = new ArrayList<String>();
-    }
-
-    /**
-     * Prints the ASM source code to generate the given class to the standard
-     * output.
-     * <p>
-     * Usage: ASMifierClassVisitor [-debug] &lt;fully qualified class name or
-     * class file name&gt;
-     * 
-     * @param args
-     *            the command line arguments.
-     * 
-     * @throws Exception
-     *             if the class cannot be found, or if an IO exception occurs.
-     */
-    public static void main(final String[] args) throws Exception {
-        int i = 0;
-        int flags = ClassReader.SKIP_DEBUG;
-
-        boolean ok = true;
-        if (args.length < 1 || args.length > 2) {
-            ok = false;
-        }
-        if (ok && args[0].equals("-debug")) {
-            i = 1;
-            flags = 0;
-            if (args.length != 2) {
-                ok = false;
-            }
-        }
-        if (!ok) {
-            System.err
-                    .println("Prints the ASM code to generate the given class.");
-            System.err.println("Usage: GASMifierClassVisitor [-debug] "
-                    + "<fully qualified class name or class file name>");
-            System.exit(-1);
-        }
-        ClassReader cr;
-        if (args[i].endsWith(".class")) {
-            cr = new ClassReader(new FileInputStream(args[i]));
-        } else {
-            cr = new ClassReader(args[i]);
-        }
-        cr.accept(new TraceClassVisitor(null, new GASMifier(), new PrintWriter(
-                System.out)), ClassReader.EXPAND_FRAMES | flags);
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        super.visit(version, access, name, signature, superName, interfaces);
-        int n;
-        if (name.lastIndexOf('/') != -1) {
-            n = 1;
-        } else {
-            n = 0;
-        }
-        text.set(n + 5,
-                "ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);\n");
-        text.set(n + 7, "GeneratorAdapter mg;\n");
-        text.add(n + 1, "import org.objectweb.asm.commons.*;\n");
-    }
-
-    @Override
-    public ASMifier visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        buf.setLength(0);
-        buf.append("{\n");
-        buf.append("mg = new GeneratorAdapter(");
-        buf.append(access);
-        buf.append(", ");
-        buf.append(getMethod(name, desc));
-        buf.append(", ");
-        if (signature == null) {
-            buf.append("null");
-        } else {
-            buf.append('"').append(signature).append('"');
-        }
-        buf.append(", ");
-        if (exceptions != null && exceptions.length > 0) {
-            buf.append("new Type[] {");
-            for (int i = 0; i < exceptions.length; ++i) {
-                buf.append(i == 0 ? " " : ", ");
-                buf.append(getType(exceptions[i]));
-            }
-            buf.append(" }");
-        } else {
-            buf.append("null");
-        }
-        buf.append(", cw);\n");
-        text.add(buf.toString());
-        GASMifier av = new GASMifier(access, desc);
-        text.add(av.getText());
-        text.add("}\n");
-        return av;
-    }
-
-    @Override
-    public void visitInsn(final int opcode) {
-        buf.setLength(0);
-        switch (opcode) {
-        case IRETURN:
-        case LRETURN:
-        case FRETURN:
-        case DRETURN:
-        case ARETURN:
-        case RETURN:
-            buf.append("mg.returnValue();\n");
-            break;
-        case NOP:
-            buf.append("mg.visitInsn(Opcodes.NOP);\n");
-            break;
-        case ACONST_NULL:
-            buf.append("mg.push((String)null);\n");
-            break;
-        case ICONST_M1:
-        case ICONST_0:
-        case ICONST_1:
-        case ICONST_2:
-        case ICONST_3:
-        case ICONST_4:
-        case ICONST_5:
-            buf.append("mg.push(").append(opcode - ICONST_0).append(");\n");
-            break;
-        case LCONST_0:
-        case LCONST_1:
-            buf.append("mg.push(").append(opcode - LCONST_0).append("L);\n");
-            break;
-        case FCONST_0:
-        case FCONST_1:
-        case FCONST_2:
-            buf.append("mg.push(").append(opcode - FCONST_0).append("f);\n");
-            break;
-        case DCONST_0:
-        case DCONST_1:
-            buf.append("mg.push(").append(opcode - DCONST_0).append("d);\n");
-            break;
-        case POP:
-            buf.append("mg.pop();\n");
-            break;
-        case POP2:
-            buf.append("mg.pop2();\n");
-            break;
-        case DUP:
-            buf.append("mg.dup();\n");
-            break;
-        case DUP_X1:
-            buf.append("mg.dupX1();\n");
-            break;
-        case DUP_X2:
-            buf.append("mg.dupX2();\n");
-            break;
-        case DUP2:
-            buf.append("mg.dup2();\n");
-            break;
-        case DUP2_X1:
-            buf.append("mg.dup2X1();\n");
-            break;
-        case DUP2_X2:
-            buf.append("mg.dup2X2();\n");
-            break;
-        case SWAP:
-            buf.append("mg.swap();\n");
-            break;
-        case MONITORENTER:
-            buf.append("mg.monitorEnter();\n");
-            break;
-        case MONITOREXIT:
-            buf.append("mg.monitorExit();\n");
-            break;
-        case ARRAYLENGTH:
-            buf.append("mg.arrayLength();\n");
-            break;
-        case IALOAD:
-            buf.append("mg.arrayLoad(Type.INT_TYPE);\n");
-            break;
-        case LALOAD:
-            buf.append("mg.arrayLoad(Type.LONG_TYPE);\n");
-            break;
-        case FALOAD:
-            buf.append("mg.arrayLoad(Type.FLOAT_TYPE);\n");
-            break;
-        case DALOAD:
-            buf.append("mg.arrayLoad(Type.DOUBLE_TYPE);\n");
-            break;
-        case AALOAD:
-            buf.append("mg.arrayLoad(" + getType("java/lang/Object") + ");\n");
-            break;
-        case BALOAD:
-            buf.append("mg.arrayLoad(Type.BYTE_TYPE);\n");
-            break;
-        case CALOAD:
-            buf.append("mg.arrayLoad(Type.CHAR_TYPE);\n");
-            break;
-        case SALOAD:
-            buf.append("mg.arrayLoad(Type.SHORT_TYPE);\n");
-            break;
-        case IASTORE:
-            buf.append("mg.arrayStore(Type.INT_TYPE);\n");
-            break;
-        case LASTORE:
-            buf.append("mg.arrayStore(Type.LONG_TYPE);\n");
-            break;
-        case FASTORE:
-            buf.append("mg.arrayStore(Type.FLOAT_TYPE);\n");
-            break;
-        case DASTORE:
-            buf.append("mg.arrayStore(Type.DOUBLE_TYPE);\n");
-            break;
-        case AASTORE:
-            buf.append("mg.arrayStore(" + getType("java/lang/Object") + ");\n");
-            break;
-        case BASTORE:
-            buf.append("mg.arrayStore(Type.BYTE_TYPE);\n");
-            break;
-        case CASTORE:
-            buf.append("mg.arrayStore(Type.CHAR_TYPE);\n");
-            break;
-        case SASTORE:
-            buf.append("mg.arrayStore(Type.SHORT_TYPE);\n");
-            break;
-        case IADD:
-            buf.append("mg.math(GeneratorAdapter.ADD, Type.INT_TYPE);\n");
-            break;
-        case LADD:
-            buf.append("mg.math(GeneratorAdapter.ADD, Type.LONG_TYPE);\n");
-            break;
-        case FADD:
-            buf.append("mg.math(GeneratorAdapter.ADD, Type.FLOAT_TYPE);\n");
-            break;
-        case DADD:
-            buf.append("mg.math(GeneratorAdapter.ADD, Type.DOUBLE_TYPE);\n");
-            break;
-        case ISUB:
-            buf.append("mg.math(GeneratorAdapter.SUB, Type.INT_TYPE);\n");
-            break;
-        case LSUB:
-            buf.append("mg.math(GeneratorAdapter.SUB, Type.LONG_TYPE);\n");
-            break;
-        case FSUB:
-            buf.append("mg.math(GeneratorAdapter.SUB, Type.FLOAT_TYPE);\n");
-            break;
-        case DSUB:
-            buf.append("mg.math(GeneratorAdapter.SUB, Type.DOUBLE_TYPE);\n");
-            break;
-        case IMUL:
-            buf.append("mg.math(GeneratorAdapter.MUL, Type.INT_TYPE);\n");
-            break;
-        case LMUL:
-            buf.append("mg.math(GeneratorAdapter.MUL, Type.LONG_TYPE);\n");
-            break;
-        case FMUL:
-            buf.append("mg.math(GeneratorAdapter.MUL, Type.FLOAT_TYPE);\n");
-            break;
-        case DMUL:
-            buf.append("mg.math(GeneratorAdapter.MUL, Type.DOUBLE_TYPE);\n");
-            break;
-        case IDIV:
-            buf.append("mg.math(GeneratorAdapter.DIV, Type.INT_TYPE);\n");
-            break;
-        case LDIV:
-            buf.append("mg.math(GeneratorAdapter.DIV, Type.LONG_TYPE);\n");
-            break;
-        case FDIV:
-            buf.append("mg.math(GeneratorAdapter.DIV, Type.FLOAT_TYPE);\n");
-            break;
-        case DDIV:
-            buf.append("mg.math(GeneratorAdapter.DIV, Type.DOUBLE_TYPE);\n");
-            break;
-        case IREM:
-            buf.append("mg.math(GeneratorAdapter.REM, Type.INT_TYPE);\n");
-            break;
-        case LREM:
-            buf.append("mg.math(GeneratorAdapter.REM, Type.LONG_TYPE);\n");
-            break;
-        case FREM:
-            buf.append("mg.math(GeneratorAdapter.REM, Type.FLOAT_TYPE);\n");
-            break;
-        case DREM:
-            buf.append("mg.math(GeneratorAdapter.REM, Type.DOUBLE_TYPE);\n");
-            break;
-        case INEG:
-            buf.append("mg.math(GeneratorAdapter.NEG, Type.INT_TYPE);\n");
-            break;
-        case LNEG:
-            buf.append("mg.math(GeneratorAdapter.NEG, Type.LONG_TYPE);\n");
-            break;
-        case FNEG:
-            buf.append("mg.math(GeneratorAdapter.NEG, Type.FLOAT_TYPE);\n");
-            break;
-        case DNEG:
-            buf.append("mg.math(GeneratorAdapter.NEG, Type.DOUBLE_TYPE);\n");
-            break;
-        case ISHL:
-            buf.append("mg.math(GeneratorAdapter.SHL, Type.INT_TYPE);\n");
-            break;
-        case LSHL:
-            buf.append("mg.math(GeneratorAdapter.SHL, Type.LONG_TYPE);\n");
-            break;
-        case ISHR:
-            buf.append("mg.math(GeneratorAdapter.SHR, Type.INT_TYPE);\n");
-            break;
-        case LSHR:
-            buf.append("mg.math(GeneratorAdapter.SHR, Type.LONG_TYPE);\n");
-            break;
-        case IUSHR:
-            buf.append("mg.math(GeneratorAdapter.USHR, Type.INT_TYPE);\n");
-            break;
-        case LUSHR:
-            buf.append("mg.math(GeneratorAdapter.USHR, Type.LONG_TYPE);\n");
-            break;
-        case IAND:
-            buf.append("mg.math(GeneratorAdapter.AND, Type.INT_TYPE);\n");
-            break;
-        case LAND:
-            buf.append("mg.math(GeneratorAdapter.AND, Type.LONG_TYPE);\n");
-            break;
-        case IOR:
-            buf.append("mg.math(GeneratorAdapter.OR, Type.INT_TYPE);\n");
-            break;
-        case LOR:
-            buf.append("mg.math(GeneratorAdapter.OR, Type.LONG_TYPE);\n");
-            break;
-        case IXOR:
-            buf.append("mg.math(GeneratorAdapter.XOR, Type.INT_TYPE);\n");
-            break;
-        case LXOR:
-            buf.append("mg.math(GeneratorAdapter.XOR, Type.LONG_TYPE);\n");
-            break;
-        case ATHROW:
-            buf.append("mg.throwException();\n");
-            break;
-        case I2L:
-            buf.append("mg.cast(Type.INT_TYPE, Type.LONG_TYPE);\n");
-            break;
-        case I2F:
-            buf.append("mg.cast(Type.INT_TYPE, Type.FLOAT_TYPE);\n");
-            break;
-        case I2D:
-            buf.append("mg.cast(Type.INT_TYPE, Type.DOUBLE_TYPE);\n");
-            break;
-        case L2I:
-            buf.append("mg.cast(Type.LONG_TYPE, Type.INT_TYPE);\n");
-            break;
-        case L2F:
-            buf.append("mg.cast(Type.LONG_TYPE, Type.FLOAT_TYPE);\n");
-            break;
-        case L2D:
-            buf.append("mg.cast(Type.LONG_TYPE, Type.DOUBLE_TYPE);\n");
-            break;
-        case F2I:
-            buf.append("mg.cast(Type.FLOAT_TYPE, Type.INT_TYPE);\n");
-            break;
-        case F2L:
-            buf.append("mg.cast(Type.FLOAT_TYPE, Type.LONG_TYPE);\n");
-            break;
-        case F2D:
-            buf.append("mg.cast(Type.FLOAT_TYPE, Type.DOUBLE_TYPE);\n");
-            break;
-        case D2I:
-            buf.append("mg.cast(Type.DOUBLE_TYPE, Type.INT_TYPE);\n");
-            break;
-        case D2L:
-            buf.append("mg.cast(Type.DOUBLE_TYPE, Type.LONG_TYPE);\n");
-            break;
-        case D2F:
-            buf.append("mg.cast(Type.DOUBLE_TYPE, Type.FLOAT_TYPE);\n");
-            break;
-        case I2B:
-            // TODO detect if previous element in 'text' is a cast,
-            // for possible optimisations (e.g. cast(F,I) cast(I,B) =
-            // cast(F,B))
-            buf.append("mg.cast(Type.INT_TYPE, Type.BYTE_TYPE);\n");
-            break;
-        case I2C: // idem
-            buf.append("mg.cast(Type.INT_TYPE, Type.CHAR_TYPE);\n");
-            break;
-        case I2S: // idem
-            buf.append("mg.cast(Type.INT_TYPE, Type.SHORT_TYPE);\n");
-            break;
-        case LCMP:
-        case FCMPL:
-        case FCMPG:
-        case DCMPL:
-        case DCMPG:
-            // TODO detect xCMPy IF_ICMP -> ifCmp(..., ..., label)
-            buf.append("mg.visitInsn(").append(OPCODES[opcode]).append(");\n");
-            break;
-        default:
-            throw new RuntimeException("unexpected case");
-        }
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitIntInsn(final int opcode, final int operand) {
-        buf.setLength(0);
-        if (opcode == NEWARRAY) {
-            String type;
-            switch (operand) {
-            case T_BOOLEAN:
-                type = "Type.BOOLEAN_TYPE";
-                break;
-            case T_CHAR:
-                type = "Type.CHAR_TYPE";
-                break;
-            case T_FLOAT:
-                type = "Type.FLOAT_TYPE";
-                break;
-            case T_DOUBLE:
-                type = "Type.DOUBLE_TYPE";
-                break;
-            case T_BYTE:
-                type = "Type.BYTE_TYPE";
-                break;
-            case T_SHORT:
-                type = "Type.SHORT_TYPE";
-                break;
-            case T_INT:
-                type = "Type.INT_TYPE";
-                break;
-            case T_LONG:
-                type = "Type.LONG_TYPE";
-                break;
-            default:
-                throw new RuntimeException("unexpected case");
-            }
-            buf.append("mg.newArray(").append(type).append(");\n");
-        } else {
-            buf.append("mg.push(").append(operand).append(");\n");
-        }
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitVarInsn(final int opcode, final int var) {
-        buf.setLength(0);
-        try {
-            switch (opcode) {
-            case RET:
-                if (var < firstLocal) {
-                    buf.append("mg.ret(");
-                    buf.append(var);
-                    buf.append(");\n");
-                } else {
-                    int v = generateNewLocal(var, "Type.INT_TYPE");
-                    buf.append("mg.ret(");
-                    buf.append("local").append(v);
-                    buf.append(");\n");
-                }
-                break;
-
-            case ILOAD:
-                generateLoadLocal(var, "Type.INT_TYPE");
-                break;
-            case LLOAD:
-                generateLoadLocal(var, "Type.LONG_TYPE");
-                break;
-            case FLOAD:
-                generateLoadLocal(var, "Type.FLOAT_TYPE");
-                break;
-            case DLOAD:
-                generateLoadLocal(var, "Type.DOUBLE_TYPE");
-                break;
-            case ALOAD:
-                generateLoadLocal(var, getType("java/lang/Object"));
-                break;
-
-            case ISTORE:
-                generateStoreLocal(var, "Type.INT_TYPE");
-                break;
-            case LSTORE:
-                generateStoreLocal(var, "Type.LONG_TYPE");
-                break;
-            case FSTORE:
-                generateStoreLocal(var, "Type.FLOAT_TYPE");
-                break;
-            case DSTORE:
-                generateStoreLocal(var, "Type.DOUBLE_TYPE");
-                break;
-            case ASTORE:
-                generateStoreLocal(var, getType("java/lang/Object"));
-                break;
-
-            default:
-                throw new RuntimeException("unexpected case");
-            }
-        } catch (RuntimeException e) {
-            buf.append("mg.visitVarInsn(" + OPCODES[opcode] + ", " + var
-                    + ");\n");
-        }
-        text.add(buf.toString());
-    }
-
-    private void generateLoadLocal(final int var, final String type) {
-        if (var < firstLocal) {
-            if (var == 0 && (access & ACC_STATIC) == 0) {
-                buf.append("mg.loadThis();\n");
-            } else {
-                int index = getArgIndex(var);
-                buf.append("mg.loadArg(").append(index).append(");\n");
-            }
-        } else {
-            int local = generateNewLocal(var, type);
-            buf.append("mg.loadLocal(local").append(local);
-            if (!type.equals(localTypes.get(local))) {
-                localTypes.set(local, type);
-                buf.append(", ").append(type);
-            }
-            buf.append(");\n");
-        }
-    }
-
-    private void generateStoreLocal(final int var, final String type) {
-        if (var < firstLocal) {
-            if (var == 0 && (access & ACC_STATIC) == 0) {
-                buf.append("mg.visitVarInsn(ASTORE, " + var + ");\n");
-            } else {
-                int index = getArgIndex(var);
-                buf.append("mg.storeArg(").append(index).append(");\n");
-            }
-        } else {
-            int local = generateNewLocal(var, type);
-            buf.append("mg.storeLocal(local").append(local);
-            if (!type.equals(localTypes.get(local))) {
-                localTypes.set(local, type);
-                buf.append(", ").append(type);
-            }
-            buf.append(");\n");
-        }
-    }
-
-    private int generateNewLocal(final int var, final String type) {
-        Integer i = locals.get(new Integer(var));
-        if (i == null) {
-            int local = locals.size();
-            locals.put(new Integer(var), new Integer(local));
-            localTypes.add(type);
-            buf.append("int local" + local + " = mg.newLocal(" + type + ");\n");
-            return local;
-        }
-        return i.intValue();
-    }
-
-    private int getArgIndex(final int var) {
-        int nextLocal = (Opcodes.ACC_STATIC & access) != 0 ? 0 : 1;
-        int i = 0;
-        while (nextLocal != var) {
-            nextLocal += argumentTypes[i++].getSize();
-        }
-        return i;
-    }
-
-    @Override
-    public void visitTypeInsn(final int opcode, final String type) {
-        String typ = getType(type);
-        buf.setLength(0);
-        if (opcode == NEW) {
-            buf.append("mg.newInstance(").append(typ).append(");\n");
-        } else if (opcode == ANEWARRAY) {
-            buf.append("mg.newArray(").append(typ).append(");\n");
-        } else if (opcode == CHECKCAST) {
-            buf.append("mg.checkCast(").append(typ).append(");\n");
-        } else if (opcode == INSTANCEOF) {
-            buf.append("mg.instanceOf(").append(typ).append(");\n");
-        }
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        buf.setLength(0);
-        switch (opcode) {
-        case GETFIELD:
-            buf.append("mg.getField(");
-            break;
-        case PUTFIELD:
-            buf.append("mg.putField(");
-            break;
-        case GETSTATIC:
-            buf.append("mg.getStatic(");
-            break;
-        case PUTSTATIC:
-            buf.append("mg.putStatic(");
-            break;
-        default:
-            throw new RuntimeException("unexpected case");
-        }
-        buf.append(getType(owner));
-        buf.append(", \"");
-        buf.append(name);
-        buf.append("\", ");
-        buf.append(getDescType(desc));
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMethodInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        buf.setLength(0);
-        switch (opcode) {
-        case INVOKEVIRTUAL:
-            buf.append("mg.invokeVirtual(");
-            break;
-        case INVOKESPECIAL:
-            buf.append("mg.invokeConstructor(");
-            break;
-        case INVOKESTATIC:
-            buf.append("mg.invokeStatic(");
-            break;
-        case INVOKEINTERFACE:
-            buf.append("mg.invokeInterface(");
-            break;
-        default:
-            throw new RuntimeException("unexpected case");
-        }
-        if (owner.charAt(0) == '[') {
-            buf.append(getDescType(owner));
-        } else {
-            buf.append(getType(owner));
-        }
-        buf.append(", ");
-        buf.append(getMethod(name, desc));
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
-            Object... bsmArgs) {
-        buf.setLength(0);
-        buf.append("mg.invokeDynamic(");
-        appendConstant(name);
-        buf.append(", ");
-        appendConstant(desc);
-        buf.append(", ");
-        appendConstant(bsm);
-        buf.append(", new Object[] {");
-        for (int i = 0; i < bsmArgs.length; ++i) {
-            appendConstant(bsmArgs[i]);
-            if (i != bsmArgs.length - 1) {
-                buf.append(", ");
-            }
-        }
-        buf.append("});\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitJumpInsn(final int opcode, final Label label) {
-        buf.setLength(0);
-        declareLabel(label);
-        if (opcode == GOTO || opcode == IFNULL || opcode == IFNONNULL) {
-            if (opcode == GOTO) {
-                buf.append("mg.goTo(");
-            }
-            if (opcode == IFNULL) {
-                buf.append("mg.ifNull(");
-            }
-            if (opcode == IFNONNULL) {
-                buf.append("mg.ifNonNull(");
-            }
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ICMPEQ) {
-            buf.append("mg.ifICmp(GeneratorAdapter.EQ, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ICMPNE) {
-            buf.append("mg.ifICmp(GeneratorAdapter.NE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ICMPLT) {
-            buf.append("mg.ifICmp(GeneratorAdapter.LT, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ICMPGE) {
-            buf.append("mg.ifICmp(GeneratorAdapter.GE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ICMPGT) {
-            buf.append("mg.ifICmp(GeneratorAdapter.GT, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ICMPLE) {
-            buf.append("mg.ifICmp(GeneratorAdapter.LE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ACMPEQ) {
-            buf.append("mg.ifCmp(");
-            buf.append(getType("java/lang/Object")).append(", ")
-                    .append("GeneratorAdapter.EQ, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IF_ACMPNE) {
-            buf.append("mg.ifCmp(");
-            buf.append(getType("java/lang/Object")).append(", ")
-                    .append("GeneratorAdapter.NE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IFEQ) {
-            buf.append("mg.ifZCmp(GeneratorAdapter.EQ, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IFNE) {
-            buf.append("mg.ifZCmp(GeneratorAdapter.NE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IFLT) {
-            buf.append("mg.ifZCmp(GeneratorAdapter.LT, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IFGE) {
-            buf.append("mg.ifZCmp(GeneratorAdapter.GE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IFGT) {
-            buf.append("mg.ifZCmp(GeneratorAdapter.GT, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else if (opcode == IFLE) {
-            buf.append("mg.ifZCmp(GeneratorAdapter.LE, ");
-            appendLabel(label);
-            buf.append(");\n");
-        } else {
-            buf.append("mg.visitJumpInsn(").append(OPCODES[opcode])
-                    .append(", ");
-            appendLabel(label);
-            buf.append(");\n");
-        }
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLabel(final Label label) {
-        buf.setLength(0);
-        declareLabel(label);
-        buf.append("mg.mark(");
-        appendLabel(label);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitLdcInsn(final Object cst) {
-        buf.setLength(0);
-        buf.append("mg.push(");
-        appendConstant(cst);
-        buf.append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitIincInsn(final int var, final int increment) {
-        buf.setLength(0);
-        if (var < firstLocal) {
-            buf.append("mg.iinc(").append(var);
-        } else {
-            int v = generateNewLocal(var, "Type.INT_TYPE");
-            buf.append("mg.iinc(local").append(v);
-        }
-        buf.append(", ").append(increment).append(");\n");
-        text.add(buf.toString());
-    }
-
-    @Override
-    public void visitMaxs(final int maxStack, final int maxLocals) {
-        text.add("mg.endMethod();\n");
-    }
-
-    @Override
-    protected ASMifier createASMifier(final String name, final int id) {
-        return new GASMifier(name, id);
-    }
-
-    static String getType(final String internalName) {
-        return "Type.getObjectType(\"" + internalName + "\")";
-    }
-
-    static String getDescType(final String desc) {
-        if (desc.equals("Z")) {
-            return "Type.BOOLEAN_TYPE";
-        }
-        if (desc.equals("B")) {
-            return "Type.BYTE_TYPE";
-        }
-        if (desc.equals("C")) {
-            return "Type.CHAR_TYPE";
-        }
-        if (desc.equals("D")) {
-            return "Type.DOUBLE_TYPE";
-        }
-        if (desc.equals("F")) {
-            return "Type.FLOAT_TYPE";
-        }
-        if (desc.equals("I")) {
-            return "Type.INT_TYPE";
-        }
-        if (desc.equals("J")) {
-            return "Type.LONG_TYPE";
-        }
-        if (desc.equals("S")) {
-            return "Type.SHORT_TYPE";
-        }
-        if (desc.equals("V")) {
-            return "Type.VOID_TYPE";
-        }
-        return "Type.getType(\"" + desc + "\")";
-    }
-
-    static String getMethod(final String name, final String desc) {
-        Type rt = Type.getReturnType(desc);
-        Type[] argt = Type.getArgumentTypes(desc);
-        StringBuffer buf = new StringBuffer();
-        buf.append("Method.getMethod(\"");
-        buf.append(rt.getClassName()).append(' ');
-        buf.append(name).append('(');
-        for (int i = 0; i < argt.length; ++i) {
-            if (i > 0) {
-                buf.append(',');
-            }
-            buf.append(argt[i].getClassName());
-        }
-        buf.append(")\")");
-        return buf.toString();
-    }
-
-    @Override
-    protected void declareLabel(final Label l) {
-        if (labelNames == null) {
-            labelNames = new HashMap<Label, String>();
-        }
-        String name = labelNames.get(l);
-        if (name == null) {
-            name = "label" + labelNames.size();
-            labelNames.put(l, name);
-            buf.append("Label ").append(name).append(" = mg.newLabel();\n");
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/GASMifierTest.java b/asm4/test/conform/org/objectweb/asm/commons/GASMifierTest.java
deleted file mode 100644
index 6c2bc88..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/GASMifierTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import junit.framework.TestSuite;
-
-import org.codehaus.janino.ClassLoaderIClassLoader;
-import org.codehaus.janino.DebuggingInformation;
-import org.codehaus.janino.IClassLoader;
-import org.codehaus.janino.Parser;
-import org.codehaus.janino.Scanner;
-import org.codehaus.janino.UnitCompiler;
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.attrs.CodeComment;
-import org.objectweb.asm.attrs.Comment;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * GASMifier tests.
- * 
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public class GASMifierTest extends AbstractTest {
-
-    public static final Compiler COMPILER = new Compiler();
-
-    private final static TestClassLoader LOADER = new TestClassLoader();
-
-    public static TestSuite suite() throws Exception {
-        return new GASMifierTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-
-        if (cr.b.length > 20000) {
-            return;
-        }
-
-        StringWriter sw = new StringWriter();
-        TraceClassVisitor cv = new TraceClassVisitor(null, new GASMifier(),
-                new PrintWriter(sw));
-        cr.accept(new ClassLocalVariablesSorter(cv), new Attribute[] {
-                new Comment(), new CodeComment() }, ClassReader.EXPAND_FRAMES);
-
-        String generated = sw.toString();
-
-        byte[] generatorClassData;
-        try {
-            generatorClassData = COMPILER.compile(n, generated);
-        } catch (Exception ex) {
-            trace(generated);
-            throw ex;
-        }
-
-        ClassWriter cw = new ClassWriter(0);
-        cr.accept(new ClassLocalVariablesSorter(cw), new Attribute[] {
-                new Comment(), new CodeComment() }, ClassReader.EXPAND_FRAMES);
-        cr = new ClassReader(cw.toByteArray());
-
-        String nd = n + "Dump";
-        if (n.indexOf('.') != -1) {
-            nd = "asm." + nd;
-        }
-
-        Class<?> c = LOADER.defineClass(nd, generatorClassData);
-        Method m = c.getMethod("dump", new Class<?>[0]);
-        byte[] b;
-        try {
-            b = (byte[]) m.invoke(null, new Object[0]);
-        } catch (InvocationTargetException ex) {
-            trace(generated);
-            throw (Exception) ex.getTargetException();
-        }
-
-        try {
-            assertEquals(cr, new ClassReader(b), new Filter(), new Filter());
-        } catch (Throwable e) {
-            trace(generated);
-            assertEquals(cr, new ClassReader(b), new Filter(), new Filter());
-        }
-    }
-
-    private void trace(final String generated) {
-        if (System.getProperty("asm.test.class") != null) {
-            System.err.println(generated);
-        }
-    }
-
-    static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-
-    static class Compiler {
-
-        final static IClassLoader CL = new ClassLoaderIClassLoader(
-                new URLClassLoader(new URL[0]));
-
-        public byte[] compile(final String name, final String source)
-                throws Exception {
-            Parser p = new Parser(new Scanner(name, new StringReader(source)));
-            UnitCompiler uc = new UnitCompiler(p.parseCompilationUnit(), CL);
-            return uc.compileUnit(DebuggingInformation.ALL)[0].toByteArray();
-        }
-    }
-
-    static class ClassLocalVariablesSorter extends ClassVisitor {
-
-        public ClassLocalVariablesSorter(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            return new LocalVariablesSorter(access, desc, super.visitMethod(
-                    access, name, desc, signature, exceptions));
-        }
-    }
-
-    static class Filter extends ClassVisitor {
-
-        public Filter() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            return new MethodVisitor(Opcodes.ASM4, super.visitMethod(access,
-                    name, desc, signature, exceptions)) {
-                @Override
-                public void visitMaxs(final int maxStack, final int maxLocals) {
-                    super.visitMaxs(0, 0);
-                }
-            };
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/JSRInlinerAdapterTest.java b/asm4/test/conform/org/objectweb/asm/commons/JSRInlinerAdapterTest.java
deleted file mode 100644
index 02c7549..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/JSRInlinerAdapterTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * JSRInliner tests.
- * 
- * @author Eric Bruneton
- */
-public class JSRInlinerAdapterTest extends AbstractTest {
-
-    private final static TestClassLoader LOADER = new TestClassLoader();
-
-    public static TestSuite suite() throws Exception {
-        return new JSRInlinerAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                MethodVisitor mv = super.visitMethod(access, name, desc,
-                        signature, exceptions);
-                return new JSRInlinerAdapter(mv, access, name, desc, signature,
-                        exceptions);
-            }
-        }, 0);
-        byte[] b = cw.toByteArray();
-        try {
-            LOADER.defineClass(n, b);
-        } catch (ClassFormatError cfe) {
-            fail(cfe.getMessage());
-        } catch (Throwable ignored) {
-        }
-    }
-
-    // ------------------------------------------------------------------------
-
-    static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/JSRInlinerAdapterUnitTest.java b/asm4/test/conform/org/objectweb/asm/commons/JSRInlinerAdapterUnitTest.java
deleted file mode 100644
index f501160..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/JSRInlinerAdapterUnitTest.java
+++ /dev/null
@@ -1,1874 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.util.TraceMethodVisitor;
-import org.objectweb.asm.util.Textifier;
-
-/**
- * JsrInlinerTest
- * 
- * @author Eugene Kuleshov, Niko Matsakis, Eric Bruneton
- */
-public class JSRInlinerAdapterUnitTest extends TestCase {
-
-    private JSRInlinerAdapter jsr;
-    private MethodNode exp;
-    private MethodVisitor current;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        jsr = new JSRInlinerAdapter(null, 0, "m", "()V", null, null) {
-            @Override
-            public void visitEnd() {
-                System.err.println("started w/ method:" + name);
-                Textifier t = new Textifier();
-                TraceMethodVisitor mv = new TraceMethodVisitor(t);
-                for (int i = 0; i < instructions.size(); ++i) {
-                    instructions.get(i).accept(mv);
-                    System.err.print(Integer.toString(i + 100000).substring(1));
-                    System.err.print(" : " + t.text.get(i));
-                }
-                super.visitEnd();
-                System.err.println("finished w/ method:" + name);
-            }
-        };
-        exp = new MethodNode(0, "m", "()V", null, null);
-    }
-
-    private void setCurrent(final MethodVisitor cv) {
-        this.current = cv;
-    }
-
-    private void ICONST_0() {
-        this.current.visitInsn(Opcodes.ICONST_0);
-    }
-
-    private void ISTORE(final int var) {
-        this.current.visitVarInsn(Opcodes.ISTORE, var);
-    }
-
-    private void ALOAD(final int var) {
-        this.current.visitVarInsn(Opcodes.ALOAD, var);
-    }
-
-    private void ILOAD(final int var) {
-        this.current.visitVarInsn(Opcodes.ILOAD, var);
-    }
-
-    private void ASTORE(final int var) {
-        this.current.visitVarInsn(Opcodes.ASTORE, var);
-    }
-
-    private void RET(final int var) {
-        this.current.visitVarInsn(Opcodes.RET, var);
-    }
-
-    private void ATHROW() {
-        this.current.visitInsn(Opcodes.ATHROW);
-    }
-
-    private void ACONST_NULL() {
-        this.current.visitInsn(Opcodes.ACONST_NULL);
-    }
-
-    private void RETURN() {
-        this.current.visitInsn(Opcodes.RETURN);
-    }
-
-    private void LABEL(final Label l) {
-        this.current.visitLabel(l);
-    }
-
-    private void IINC(final int var, final int amnt) {
-        this.current.visitIincInsn(var, amnt);
-    }
-
-    private void GOTO(final Label l) {
-        this.current.visitJumpInsn(Opcodes.GOTO, l);
-    }
-
-    private void JSR(final Label l) {
-        this.current.visitJumpInsn(Opcodes.JSR, l);
-    }
-
-    private void IFNONNULL(final Label l) {
-        this.current.visitJumpInsn(Opcodes.IFNONNULL, l);
-    }
-
-    private void IFNE(final Label l) {
-        this.current.visitJumpInsn(Opcodes.IFNE, l);
-    }
-
-    private void TRYCATCH(final Label start, final Label end,
-            final Label handler) {
-        this.current.visitTryCatchBlock(start, end, handler, null);
-    }
-
-    private void LINE(final int line, final Label start) {
-        this.current.visitLineNumber(line, start);
-    }
-
-    private void LOCALVAR(final String name, final String desc,
-            final int index, final Label start, final Label end) {
-        this.current.visitLocalVariable(name, desc, null, start, end, index);
-    }
-
-    private void END(final int maxStack, final int maxLocals) {
-        this.current.visitMaxs(maxStack, maxLocals);
-        this.current.visitEnd();
-        ClassWriter cw = new ClassWriter(0);
-        cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "C", null,
-                "java/lang/Object", null);
-        MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V",
-                null, null);
-        mv.visitCode();
-        mv.visitVarInsn(Opcodes.ALOAD, 0);
-        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",
-                "()V");
-        mv.visitInsn(Opcodes.RETURN);
-        mv.visitMaxs(1, 1);
-        mv.visitEnd();
-        ((MethodNode) this.current).accept(cw);
-        cw.visitEnd();
-        byte[] b = cw.toByteArray();
-        try {
-            TestClassLoader loader = new TestClassLoader();
-            Class<?> c = loader.defineClass("C", b);
-            c.newInstance();
-        } catch (Throwable t) {
-            fail(t.getMessage());
-        }
-        this.current = null;
-    }
-
-    static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-
-    /**
-     * Tests a method which has the most basic <code>try{}finally</code> form
-     * imaginable:
-     * 
-     * <pre>
-     * public void a() {
-     *     int a = 0;
-     *     try {
-     *         a++;
-     *     } finally {
-     *         a--;
-     *     }
-     * }
-     * </pre>
-     */
-    public void testBasic() {
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-
-            setCurrent(jsr);
-            ICONST_0();
-            ISTORE(1);
-
-            /* L0: body of try block */
-            LABEL(L0);
-            IINC(1, 1);
-            GOTO(L1);
-
-            /* L2: exception handler */
-            LABEL(L2);
-            ASTORE(3);
-            JSR(L3);
-            ALOAD(3);
-            ATHROW();
-
-            /* L3: subroutine */
-            LABEL(L3);
-            ASTORE(2);
-            IINC(1, -1);
-            RET(2);
-
-            /* L1: non-exceptional exit from try block */
-            LABEL(L1);
-            JSR(L3);
-            LABEL(L4); // L4
-            RETURN();
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L1, L4, L2);
-
-            END(1, 4);
-        }
-
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3_1a = new Label();
-            Label L3_1b = new Label();
-            Label L3_2a = new Label();
-            Label L3_2b = new Label();
-            Label L4 = new Label();
-
-            setCurrent(exp);
-            ICONST_0();
-            ISTORE(1);
-            // L0: try/catch block
-            LABEL(L0);
-            IINC(1, 1);
-            GOTO(L1);
-
-            // L2: Exception handler:
-            LABEL(L2);
-            ASTORE(3);
-            ACONST_NULL();
-            GOTO(L3_1a);
-            LABEL(L3_1b); // L3_1b;
-            ALOAD(3);
-            ATHROW();
-
-            // L1: On non-exceptional exit, try block leads here:
-            LABEL(L1);
-            ACONST_NULL();
-            GOTO(L3_2a);
-            LABEL(L3_2b); // L3_2b
-            LABEL(L4); // L4
-            RETURN();
-
-            // L3_1a: First instantiation of subroutine:
-            LABEL(L3_1a);
-            ASTORE(2);
-            IINC(1, -1);
-            GOTO(L3_1b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L3_2a: Second instantiation of subroutine:
-            LABEL(L3_2a);
-            ASTORE(2);
-            IINC(1, -1);
-            GOTO(L3_2b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L1, L4, L2);
-
-            END(1, 4);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * Tests a method which has an if/else-if w/in the finally clause:
-     * 
-     * <pre>
-     * public void a() {
-     *     int a = 0;
-     *     try {
-     *         a++;
-     *     } finally {
-     *         if (a == 0)
-     *             a += 2;
-     *         else
-     *             a += 3;
-     *     }
-     * }
-     * </pre>
-     */
-    public void testIfElseInFinally() {
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-            Label L5 = new Label();
-            Label L6 = new Label();
-
-            setCurrent(jsr);
-            ICONST_0();
-            ISTORE(1);
-
-            /* L0: body of try block */
-            LABEL(L0);
-            IINC(1, 1);
-            GOTO(L1);
-
-            /* L2: exception handler */
-            LABEL(L2);
-            ASTORE(3);
-            JSR(L3);
-            ALOAD(3);
-            ATHROW();
-
-            /* L3: subroutine */
-            LABEL(L3);
-            ASTORE(2);
-            ILOAD(1);
-            IFNE(L4);
-            IINC(1, 2);
-            GOTO(L5);
-            LABEL(L4); // L4: a != 0
-            IINC(1, 3);
-            LABEL(L5); // L5: common exit
-            RET(2);
-
-            /* L1: non-exceptional exit from try block */
-            LABEL(L1);
-            JSR(L3);
-            LABEL(L6); // L6 is used in the TRYCATCH below
-            RETURN();
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L1, L6, L2);
-
-            END(1, 4);
-        }
-
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3_1a = new Label();
-            Label L3_1b = new Label();
-            Label L3_2a = new Label();
-            Label L3_2b = new Label();
-            Label L4_1 = new Label();
-            Label L4_2 = new Label();
-            Label L5_1 = new Label();
-            Label L5_2 = new Label();
-            Label L6 = new Label();
-
-            setCurrent(exp);
-            ICONST_0();
-            ISTORE(1);
-            // L0: try/catch block
-            LABEL(L0);
-            IINC(1, 1);
-            GOTO(L1);
-
-            // L2: Exception handler:
-            LABEL(L2);
-            ASTORE(3);
-            ACONST_NULL();
-            GOTO(L3_1a);
-            LABEL(L3_1b); // L3_1b;
-            ALOAD(3);
-            ATHROW();
-
-            // L1: On non-exceptional exit, try block leads here:
-            LABEL(L1);
-            ACONST_NULL();
-            GOTO(L3_2a);
-            LABEL(L3_2b); // L3_2b
-            LABEL(L6); // L6
-            RETURN();
-
-            // L3_1a: First instantiation of subroutine:
-            LABEL(L3_1a);
-            ASTORE(2);
-            ILOAD(1);
-            IFNE(L4_1);
-            IINC(1, 2);
-            GOTO(L5_1);
-            LABEL(L4_1); // L4_1: a != 0
-            IINC(1, 3);
-            LABEL(L5_1); // L5_1: common exit
-            GOTO(L3_1b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L3_2a: First instantiation of subroutine:
-            LABEL(L3_2a);
-            ASTORE(2);
-            ILOAD(1);
-            IFNE(L4_2);
-            IINC(1, 2);
-            GOTO(L5_2);
-            LABEL(L4_2); // L4_2: a != 0
-            IINC(1, 3);
-            LABEL(L5_2); // L5_2: common exit
-            GOTO(L3_2b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L1, L6, L2);
-
-            END(1, 4);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * Tests a simple nested finally:
-     * 
-     * <pre>
-     * public void a1() {
-     *     int a = 0;
-     *     try {
-     *         a += 1;
-     *     } finally {
-     *         try {
-     *             a += 2;
-     *         } finally {
-     *             a += 3;
-     *         }
-     *     }
-     * }
-     * </pre>
-     */
-    public void testSimpleNestedFinally() {
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-            Label L5 = new Label();
-
-            setCurrent(jsr);
-
-            ICONST_0();
-            ISTORE(1);
-
-            // L0: Body of try block:
-            LABEL(L0);
-            IINC(1, 1);
-            JSR(L3);
-            GOTO(L1);
-
-            // L2: First exception handler:
-            LABEL(L2);
-            JSR(L3);
-            ATHROW();
-
-            // L3: First subroutine:
-            LABEL(L3);
-            ASTORE(2);
-            IINC(1, 2);
-            JSR(L4);
-            RET(2);
-
-            // L5: Second exception handler:
-            LABEL(L5);
-            JSR(L4);
-            ATHROW();
-
-            // L4: Second subroutine:
-            LABEL(L4);
-            ASTORE(3);
-            IINC(1, 3);
-            RET(3);
-
-            // L1: On normal exit, try block jumps here:
-            LABEL(L1);
-            RETURN();
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L3, L5, L5);
-
-            END(2, 6);
-        }
-
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3_1a = new Label();
-            Label L3_1b = new Label();
-            Label L3_2a = new Label();
-            Label L3_2b = new Label();
-            Label L4_1a = new Label();
-            Label L4_1b = new Label();
-            Label L4_2a = new Label();
-            Label L4_2b = new Label();
-            Label L4_3a = new Label();
-            Label L4_3b = new Label();
-            Label L4_4a = new Label();
-            Label L4_4b = new Label();
-            Label L5_1 = new Label();
-            Label L5_2 = new Label();
-
-            setCurrent(exp);
-
-            ICONST_0();
-            ISTORE(1);
-
-            // L0: Body of try block:
-            LABEL(L0);
-            IINC(1, 1);
-            ACONST_NULL();
-            GOTO(L3_1a);
-            LABEL(L3_1b); // L3_1b
-            GOTO(L1);
-
-            // L2: First exception handler:
-            LABEL(L2);
-            ACONST_NULL();
-            GOTO(L3_2a);
-            LABEL(L3_2b); // L3_2b
-            ATHROW();
-
-            // L1: On normal exit, try block jumps here:
-            LABEL(L1);
-            RETURN();
-
-            // L3_1a: First instantiation of first subroutine:
-            LABEL(L3_1a);
-            ASTORE(2);
-            IINC(1, 2);
-            ACONST_NULL();
-            GOTO(L4_1a);
-            LABEL(L4_1b); // L4_1b
-            GOTO(L3_1b);
-            LABEL(L5_1); // L5_1
-            ACONST_NULL();
-            GOTO(L4_2a);
-            LABEL(L4_2b); // L4_2b
-            ATHROW();
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L3_2a: Second instantiation of first subroutine:
-            LABEL(L3_2a);
-            ASTORE(2);
-            IINC(1, 2);
-            ACONST_NULL();
-            GOTO(L4_3a);
-            LABEL(L4_3b); // L4_3b
-            GOTO(L3_2b);
-            LABEL(L5_2); // L5_2
-            ACONST_NULL();
-            GOTO(L4_4a);
-            LABEL(L4_4b); // L4_4b
-            ATHROW();
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L4_1a: First instantiation of second subroutine:
-            LABEL(L4_1a);
-            ASTORE(3);
-            IINC(1, 3);
-            GOTO(L4_1b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L4_2a: Second instantiation of second subroutine:
-            LABEL(L4_2a);
-            ASTORE(3);
-            IINC(1, 3);
-            GOTO(L4_2b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L4_3a: Third instantiation of second subroutine:
-            LABEL(L4_3a);
-            ASTORE(3);
-            IINC(1, 3);
-            GOTO(L4_3b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L4_4a: Fourth instantiation of second subroutine:
-            LABEL(L4_4a);
-            ASTORE(3);
-            IINC(1, 3);
-            GOTO(L4_4b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L3_1a, L5_1, L5_1);
-            TRYCATCH(L3_2a, L5_2, L5_2);
-
-            END(2, 6);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * This tests a subroutine which has no ret statement, but ends in a
-     * "return" instead.
-     * 
-     * We structure this as a try/finally with a break in the finally. Because
-     * the while loop is infinite, it's clear from the byte code that the only
-     * path which reaches the RETURN instruction is through the subroutine.
-     * 
-     * <pre>
-     * public void a1() {
-     *     int a = 0;
-     *     while (true) {
-     *         try {
-     *             a += 1;
-     *         } finally {
-     *             a += 2;
-     *             break;
-     *         }
-     *     }
-     * }
-     * </pre>
-     */
-    public void testSubroutineWithNoRet() {
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-
-            setCurrent(jsr);
-            ICONST_0();
-            ISTORE(1);
-
-            // L0: while loop header/try block
-            LABEL(L0);
-            IINC(1, 1);
-            JSR(L1);
-            GOTO(L2);
-
-            // L3: implicit catch block
-            LABEL(L3);
-            ASTORE(2);
-            JSR(L1);
-            ALOAD(2);
-            ATHROW();
-
-            // L1: subroutine ...
-            LABEL(L1);
-            ASTORE(3);
-            IINC(1, 2);
-            GOTO(L4); // ...not that it does not return!
-
-            // L2: end of the loop... goes back to the top!
-            LABEL(L2);
-            GOTO(L0);
-
-            // L4:
-            LABEL(L4);
-            RETURN();
-
-            TRYCATCH(L0, L3, L3);
-
-            END(1, 4);
-        }
-
-        {
-            Label L0 = new Label();
-            Label L1_1a = new Label();
-            Label L1_1b = new Label();
-            Label L1_2a = new Label();
-            Label L1_2b = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4_1 = new Label();
-            Label L4_2 = new Label();
-
-            setCurrent(exp);
-            ICONST_0();
-            ISTORE(1);
-
-            // L0: while loop header/try block
-            LABEL(L0);
-            IINC(1, 1);
-            ACONST_NULL();
-            GOTO(L1_1a);
-            LABEL(L1_1b); // L1_1b
-            GOTO(L2);
-
-            // L3: implicit catch block
-            LABEL(L3);
-            ASTORE(2);
-            ACONST_NULL();
-            GOTO(L1_2a);
-            LABEL(L1_2b); // L1_2b
-            ALOAD(2);
-            ATHROW();
-
-            // L2: end of the loop... goes back to the top!
-            LABEL(L2);
-            GOTO(L0);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L1_1a: first instantiation of subroutine ...
-            LABEL(L1_1a);
-            ASTORE(3);
-            IINC(1, 2);
-            GOTO(L4_1); // ...not that it does not return!
-            LABEL(L4_1);
-            RETURN();
-
-            // L1_2a: second instantiation of subroutine ...
-            LABEL(L1_2a);
-            ASTORE(3);
-            IINC(1, 2);
-            GOTO(L4_2); // ...not that it does not return!
-            LABEL(L4_2);
-            RETURN();
-
-            TRYCATCH(L0, L3, L3);
-
-            END(1, 4);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * This tests a subroutine which has no ret statement, but ends in a
-     * "return" instead.
-     * 
-     * <pre>
-     *   JSR L0
-     * L0:
-     *   ASTORE 0
-     *   RETURN
-     * </pre>
-     */
-    public void testSubroutineWithNoRet2() {
-        {
-            Label L0 = new Label();
-
-            setCurrent(jsr);
-            JSR(L0);
-            LABEL(L0);
-            ASTORE(0);
-            RETURN();
-            END(1, 1);
-        }
-
-        {
-            Label L0_1a = new Label();
-            Label L0_1b = new Label();
-
-            setCurrent(exp);
-
-            ACONST_NULL();
-            GOTO(L0_1a);
-            LABEL(L0_1b);
-
-            // L0_1a: First instantiation of subroutine:
-            LABEL(L0_1a);
-            ASTORE(0);
-            RETURN();
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            END(1, 1);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * This tests a subroutine which has no ret statement, but instead exits
-     * implicitely by branching to code which is not part of the subroutine.
-     * (Sadly, this is legal)
-     * 
-     * We structure this as a try/finally in a loop with a break in the finally.
-     * The loop is not trivially infinite, so the RETURN statement is reachable
-     * both from the JSR subroutine and from the main entry point.
-     * 
-     * <pre>
-     * public void a1() {
-     *     int a = 0;
-     *     while (null == null) {
-     *         try {
-     *             a += 1;
-     *         } finally {
-     *             a += 2;
-     *             break;
-     *         }
-     *     }
-     * }
-     * </pre>
-     */
-    public void testImplicitExit() {
-        {
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-            Label L5 = new Label();
-
-            setCurrent(jsr);
-            ICONST_0();
-            ISTORE(1);
-
-            // L5: while loop header
-            LABEL(L5);
-            ACONST_NULL();
-            IFNONNULL(L4);
-
-            // L0: try block
-            LABEL(L0);
-            IINC(1, 1);
-            JSR(L1);
-            GOTO(L2);
-
-            // L3: implicit catch block
-            LABEL(L3);
-            ASTORE(2);
-            JSR(L1);
-            ALOAD(2);
-            ATHROW();
-
-            // L1: subroutine ...
-            LABEL(L1);
-            ASTORE(3);
-            IINC(1, 2);
-            GOTO(L4); // ...not that it does not return!
-
-            // L2: end of the loop... goes back to the top!
-            LABEL(L2);
-            GOTO(L0);
-
-            // L4:
-            LABEL(L4);
-            RETURN();
-
-            TRYCATCH(L0, L3, L3);
-
-            END(1, 4);
-        }
-
-        {
-            Label L0 = new Label();
-            Label L1_1a = new Label();
-            Label L1_1b = new Label();
-            Label L1_2a = new Label();
-            Label L1_2b = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-            Label L5 = new Label();
-
-            setCurrent(exp);
-            ICONST_0();
-            ISTORE(1);
-
-            // L5: while loop header
-            LABEL(L5);
-            ACONST_NULL();
-            IFNONNULL(L4);
-
-            // L0: while loop header/try block
-            LABEL(L0);
-            IINC(1, 1);
-            ACONST_NULL();
-            GOTO(L1_1a);
-            LABEL(L1_1b); // L1_1b
-            GOTO(L2);
-
-            // L3: implicit catch block
-            LABEL(L3);
-            ASTORE(2);
-            ACONST_NULL();
-            GOTO(L1_2a);
-            LABEL(L1_2b); // L1_2b
-            ALOAD(2);
-            ATHROW();
-
-            // L2: end of the loop... goes back to the top!
-            LABEL(L2);
-            GOTO(L0);
-
-            // L4: exit, not part of subroutine
-            // Note that the two subroutine instantiations branch here
-            LABEL(L4);
-            RETURN();
-
-            // L1_1a: first instantiation of subroutine ...
-            LABEL(L1_1a);
-            ASTORE(3);
-            IINC(1, 2);
-            GOTO(L4); // ...note that it does not return!
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L1_2a: second instantiation of subroutine ...
-            LABEL(L1_2a);
-            ASTORE(3);
-            IINC(1, 2);
-            GOTO(L4); // ...note that it does not return!
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            TRYCATCH(L0, L3, L3);
-
-            END(1, 4);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * Tests a nested try/finally with implicit exit from one subroutine to the
-     * other subroutine. Equivalent to the following java code:
-     * 
-     * <pre>
-     * void m(boolean b) {
-     *     try {
-     *         return;
-     *     } finally {
-     *         while (b) {
-     *             try {
-     *                 return;
-     *             } finally {
-     *                 // NOTE --- this break avoids the second return above (weird)
-     *                 if (b)
-     *                     break;
-     *             }
-     *         }
-     *     }
-     * }
-     * </pre>
-     * 
-     * This example is from the paper, "Subroutine Inlining and Bytecode
-     * Abstraction to Simplify Static and Dynamic Analysis" by Cyrille Artho and
-     * Armin Biere.
-     */
-    public void testImplicitExitToAnotherSubroutine() {
-        {
-            Label T1 = new Label();
-            Label C1 = new Label();
-            Label S1 = new Label();
-            Label L = new Label();
-            Label C2 = new Label();
-            Label S2 = new Label();
-            Label W = new Label();
-            Label X = new Label();
-
-            // variable numbers:
-            int b = 1;
-            int e1 = 2;
-            int e2 = 3;
-            int r1 = 4;
-            int r2 = 5;
-
-            setCurrent(jsr);
-
-            ICONST_0();
-            ISTORE(1);
-
-            // T1: first try:
-            LABEL(T1);
-            JSR(S1);
-            RETURN();
-
-            // C1: exception handler for first try
-            LABEL(C1);
-            ASTORE(e1);
-            JSR(S1);
-            ALOAD(e1);
-            ATHROW();
-
-            // S1: first finally handler
-            LABEL(S1);
-            ASTORE(r1);
-            GOTO(W);
-
-            // L: body of while loop, also second try
-            LABEL(L);
-            JSR(S2);
-            RETURN();
-
-            // C2: exception handler for second try
-            LABEL(C2);
-            ASTORE(e2);
-            JSR(S2);
-            ALOAD(e2);
-            ATHROW();
-
-            // S2: second finally handler
-            LABEL(S2);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X);
-            RET(r2);
-
-            // W: test for the while loop
-            LABEL(W);
-            ILOAD(b);
-            IFNE(L); // falls through to X
-
-            // X: exit from finally{} block
-            LABEL(X);
-            RET(r1);
-
-            TRYCATCH(T1, C1, C1);
-            TRYCATCH(L, C2, C2);
-
-            END(1, 6);
-        }
-
-        {
-            Label T1 = new Label();
-            Label C1 = new Label();
-            Label S1_1a = new Label();
-            Label S1_1b = new Label();
-            Label S1_2a = new Label();
-            Label S1_2b = new Label();
-            Label L_1 = new Label();
-            Label L_2 = new Label();
-            Label C2_1 = new Label();
-            Label C2_2 = new Label();
-            Label S2_1_1a = new Label();
-            Label S2_1_1b = new Label();
-            Label S2_1_2a = new Label();
-            Label S2_1_2b = new Label();
-            Label S2_2_1a = new Label();
-            Label S2_2_1b = new Label();
-            Label S2_2_2a = new Label();
-            Label S2_2_2b = new Label();
-            Label W_1 = new Label();
-            Label W_2 = new Label();
-            Label X_1 = new Label();
-            Label X_2 = new Label();
-
-            // variable numbers:
-            int b = 1;
-            int e1 = 2;
-            int e2 = 3;
-            int r1 = 4;
-            int r2 = 5;
-
-            setCurrent(exp);
-
-            // --- Main Subroutine ---
-
-            ICONST_0();
-            ISTORE(1);
-
-            // T1: first try:
-            LABEL(T1);
-            ACONST_NULL();
-            GOTO(S1_1a);
-            LABEL(S1_1b);
-            RETURN();
-
-            // C1: exception handler for first try
-            LABEL(C1);
-            ASTORE(e1);
-            ACONST_NULL();
-            GOTO(S1_2a);
-            LABEL(S1_2b);
-            ALOAD(e1);
-            ATHROW();
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // --- First instantiation of first subroutine ---
-
-            // S1: first finally handler
-            LABEL(S1_1a);
-            ASTORE(r1);
-            GOTO(W_1);
-
-            // L_1: body of while loop, also second try
-            LABEL(L_1);
-            ACONST_NULL();
-            GOTO(S2_1_1a);
-            LABEL(S2_1_1b);
-            RETURN();
-
-            // C2_1: exception handler for second try
-            LABEL(C2_1);
-            ASTORE(e2);
-            ACONST_NULL();
-            GOTO(S2_1_2a);
-            LABEL(S2_1_2b);
-            ALOAD(e2);
-            ATHROW();
-
-            // W_1: test for the while loop
-            LABEL(W_1);
-            ILOAD(b);
-            IFNE(L_1); // falls through to X_1
-
-            // X_1: exit from finally{} block
-            LABEL(X_1);
-            GOTO(S1_1b);
-
-            // --- Second instantiation of first subroutine ---
-
-            // S1: first finally handler
-            LABEL(S1_2a);
-            ASTORE(r1);
-            GOTO(W_2);
-
-            // L_2: body of while loop, also second try
-            LABEL(L_2);
-            ACONST_NULL();
-            GOTO(S2_2_1a);
-            LABEL(S2_2_1b);
-            RETURN();
-
-            // C2_2: exception handler for second try
-            LABEL(C2_2);
-            ASTORE(e2);
-            ACONST_NULL();
-            GOTO(S2_2_2a);
-            LABEL(S2_2_2b);
-            ALOAD(e2);
-            ATHROW();
-
-            // W_2: test for the while loop
-            LABEL(W_2);
-            ILOAD(b);
-            IFNE(L_2); // falls through to X_2
-
-            // X_2: exit from finally{} block
-            LABEL(X_2);
-            GOTO(S1_2b);
-
-            // --- Second subroutine's 4 instantiations ---
-
-            // S2_1_1a:
-            LABEL(S2_1_1a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_1);
-            GOTO(S2_1_1b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // S2_1_2a:
-            LABEL(S2_1_2a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_1);
-            GOTO(S2_1_2b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // S2_2_1a:
-            LABEL(S2_2_1a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_2);
-            GOTO(S2_2_1b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // S2_2_2a:
-            LABEL(S2_2_2a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_2);
-            GOTO(S2_2_2b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            TRYCATCH(T1, C1, C1);
-            TRYCATCH(L_1, C2_1, C2_1); // duplicated try/finally for each...
-            TRYCATCH(L_2, C2_2, C2_2); // ...instantiation of first sub
-
-            END(1, 6);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * This tests two subroutines, neither of which exit. Instead, they both
-     * branch to a common set of code which returns from the method. This code
-     * is not reachable except through these subroutines, and since they do not
-     * invoke each other, it must be copied into both of them.
-     * 
-     * I don't believe this can be represented in Java.
-     */
-    public void testCommonCodeWhichMustBeDuplicated() {
-        {
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-
-            setCurrent(jsr);
-            ICONST_0();
-            ISTORE(1);
-
-            // Invoke the two subroutines, each twice:
-            JSR(L1);
-            JSR(L1);
-            JSR(L2);
-            JSR(L2);
-            RETURN();
-
-            // L1: subroutine 1
-            LABEL(L1);
-            IINC(1, 1);
-            GOTO(L3); // ...note that it does not return!
-
-            // L2: subroutine 2
-            LABEL(L2);
-            IINC(1, 2);
-            GOTO(L3); // ...note that it does not return!
-
-            // L3: common code to both subroutines: exit method
-            LABEL(L3);
-            RETURN();
-
-            END(1, 2);
-        }
-
-        {
-            Label L1_1a = new Label();
-            Label L1_1b = new Label();
-            Label L1_2a = new Label();
-            Label L1_2b = new Label();
-            Label L2_1a = new Label();
-            Label L2_1b = new Label();
-            Label L2_2a = new Label();
-            Label L2_2b = new Label();
-            Label L3_1 = new Label();
-            Label L3_2 = new Label();
-            Label L3_3 = new Label();
-            Label L3_4 = new Label();
-
-            setCurrent(exp);
-            ICONST_0();
-            ISTORE(1);
-
-            // Invoke the two subroutines, each twice:
-            ACONST_NULL();
-            GOTO(L1_1a);
-            LABEL(L1_1b);
-            ACONST_NULL();
-            GOTO(L1_2a);
-            LABEL(L1_2b);
-            ACONST_NULL();
-            GOTO(L2_1a);
-            LABEL(L2_1b);
-            ACONST_NULL();
-            GOTO(L2_2a);
-            LABEL(L2_2b);
-            RETURN();
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L1_1a: instantiation 1 of subroutine 1
-            LABEL(L1_1a);
-            IINC(1, 1);
-            GOTO(L3_1); // ...note that it does not return!
-            LABEL(L3_1);
-            RETURN();
-
-            // L1_2a: instantiation 2 of subroutine 1
-            LABEL(L1_2a);
-            IINC(1, 1);
-            GOTO(L3_2); // ...note that it does not return!
-            LABEL(L3_2);
-            RETURN();
-
-            // L2_1a: instantiation 1 of subroutine 2
-            LABEL(L2_1a);
-            IINC(1, 2);
-            GOTO(L3_3); // ...note that it does not return!
-            LABEL(L3_3);
-            RETURN();
-
-            // L2_2a: instantiation 2 of subroutine 2
-            LABEL(L2_2a);
-            IINC(1, 2);
-            GOTO(L3_4); // ...note that it does not return!
-            LABEL(L3_4);
-            RETURN();
-
-            END(1, 2);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * This tests a simple subroutine where the control flow jumps back and
-     * forth between the subroutine and the caller.
-     * 
-     * This would not normally be produced by a java compiler.
-     */
-    public void testInterleavedCode() {
-        {
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-
-            setCurrent(jsr);
-            ICONST_0();
-            ISTORE(1);
-
-            // Invoke the subroutine, each twice:
-            JSR(L1);
-            GOTO(L2);
-
-            // L1: subroutine 1
-            LABEL(L1);
-            ASTORE(2);
-            IINC(1, 1);
-            GOTO(L3);
-
-            // L2: second part of main subroutine
-            LABEL(L2);
-            IINC(1, 2);
-            GOTO(L4);
-
-            // L3: second part of subroutine 1
-            LABEL(L3);
-            IINC(1, 4);
-            RET(2);
-
-            // L4: third part of main subroutine
-            LABEL(L4);
-            JSR(L1);
-            RETURN();
-
-            END(1, 3);
-        }
-
-        {
-            Label L1_1a = new Label();
-            Label L1_1b = new Label();
-            Label L1_2a = new Label();
-            Label L1_2b = new Label();
-            Label L2 = new Label();
-            Label L3_1 = new Label();
-            Label L3_2 = new Label();
-            Label L4 = new Label();
-
-            setCurrent(exp);
-
-            // Main routine:
-            ICONST_0();
-            ISTORE(1);
-            ACONST_NULL();
-            GOTO(L1_1a);
-            LABEL(L1_1b);
-            GOTO(L2);
-            LABEL(L2);
-            IINC(1, 2);
-            GOTO(L4);
-            LABEL(L4);
-            ACONST_NULL();
-            GOTO(L1_2a);
-            LABEL(L1_2b);
-            RETURN();
-
-            // L1_1: instantiation #1
-            LABEL(L1_1a);
-            ASTORE(2);
-            IINC(1, 1);
-            GOTO(L3_1);
-            LABEL(L3_1);
-            IINC(1, 4);
-            GOTO(L1_1b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            // L1_2: instantiation #2
-            LABEL(L1_2a);
-            ASTORE(2);
-            IINC(1, 1);
-            GOTO(L3_2);
-            LABEL(L3_2);
-            IINC(1, 4);
-            GOTO(L1_2b);
-            LABEL(new Label()); // extra label emitted due to impl quirks
-
-            END(1, 3);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * Tests a nested try/finally with implicit exit from one subroutine to the
-     * other subroutine, and with a surrounding try/catch thrown in the mix.
-     * Equivalent to the following java code:
-     * 
-     * <pre>
-     * void m(int b) {
-     *     try {
-     *         try {
-     *             return;
-     *         } finally {
-     *             while (b) {
-     *                 try {
-     *                     return;
-     *                 } finally {
-     *                     // NOTE --- this break avoids the second return above
-     *                     // (weird)
-     *                     if (b)
-     *                         break;
-     *                 }
-     *             }
-     *         }
-     *     } catch (Exception e) {
-     *         b += 3;
-     *         return;
-     *     }
-     * }
-     * </pre>
-     */
-    public void testImplicitExitInTryCatch() {
-        {
-            Label T1 = new Label();
-            Label C1 = new Label();
-            Label S1 = new Label();
-            Label L = new Label();
-            Label C2 = new Label();
-            Label S2 = new Label();
-            Label W = new Label();
-            Label X = new Label();
-            Label OT = new Label();
-            Label OC = new Label();
-
-            // variable numbers:
-            int b = 1;
-            int e1 = 2;
-            int e2 = 3;
-            int r1 = 4;
-            int r2 = 5;
-
-            setCurrent(jsr);
-
-            ICONST_0();
-            ISTORE(1);
-
-            // OT: outermost try
-            LABEL(OT);
-
-            // T1: first try:
-            LABEL(T1);
-            JSR(S1);
-            RETURN();
-
-            // C1: exception handler for first try
-            LABEL(C1);
-            ASTORE(e1);
-            JSR(S1);
-            ALOAD(e1);
-            ATHROW();
-
-            // S1: first finally handler
-            LABEL(S1);
-            ASTORE(r1);
-            GOTO(W);
-
-            // L: body of while loop, also second try
-            LABEL(L);
-            JSR(S2);
-            RETURN();
-
-            // C2: exception handler for second try
-            LABEL(C2);
-            ASTORE(e2);
-            JSR(S2);
-            ALOAD(e2);
-            ATHROW();
-
-            // S2: second finally handler
-            LABEL(S2);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X);
-            RET(r2);
-
-            // W: test for the while loop
-            LABEL(W);
-            ILOAD(b);
-            IFNE(L); // falls through to X
-
-            // X: exit from finally{} block
-            LABEL(X);
-            RET(r1);
-
-            // OC: outermost catch
-            LABEL(OC);
-            IINC(b, 3);
-            RETURN();
-
-            TRYCATCH(T1, C1, C1);
-            TRYCATCH(L, C2, C2);
-            TRYCATCH(OT, OC, OC);
-
-            END(1, 6);
-        }
-
-        {
-            Label T1 = new Label();
-            Label C1 = new Label();
-            Label S1_1a = new Label();
-            Label S1_1b = new Label();
-            Label S1_2a = new Label();
-            Label S1_2b = new Label();
-            Label L_1 = new Label();
-            Label L_2 = new Label();
-            Label C2_1 = new Label();
-            Label C2_2 = new Label();
-            Label S2_1_1a = new Label();
-            Label S2_1_1b = new Label();
-            Label S2_1_2a = new Label();
-            Label S2_1_2b = new Label();
-            Label S2_2_1a = new Label();
-            Label S2_2_1b = new Label();
-            Label S2_2_2a = new Label();
-            Label S2_2_2b = new Label();
-            Label W_1 = new Label();
-            Label W_2 = new Label();
-            Label X_1 = new Label();
-            Label X_2 = new Label();
-            Label OT_1 = S1_1a;
-            Label OT_2 = S1_2a;
-            Label OT_1_1 = S2_1_1a;
-            Label OT_1_2 = S2_1_2a;
-            Label OT_2_1 = S2_2_1a;
-            Label OT_2_2 = S2_2_2a;
-            Label OC = new Label();
-            Label OC_1 = new Label();
-            Label OC_2 = new Label();
-            Label OC_1_1 = new Label();
-            Label OC_1_2 = new Label();
-            Label OC_2_1 = new Label();
-            Label OC_2_2 = new Label();
-
-            // variable numbers:
-            int b = 1;
-            int e1 = 2;
-            int e2 = 3;
-            int r1 = 4;
-            int r2 = 5;
-
-            setCurrent(exp);
-
-            // --- Main Subroutine ---
-
-            ICONST_0();
-            ISTORE(1);
-
-            // T1: outermost try / first try:
-            LABEL(T1);
-            ACONST_NULL();
-            GOTO(S1_1a);
-            LABEL(S1_1b);
-            RETURN();
-
-            // C1: exception handler for first try
-            LABEL(C1);
-            ASTORE(e1);
-            ACONST_NULL();
-            GOTO(S1_2a);
-            LABEL(S1_2b);
-            ALOAD(e1);
-            ATHROW();
-
-            // OC: Outermost catch
-            LABEL(OC);
-            IINC(b, 3);
-            RETURN();
-
-            // --- First instantiation of first subroutine ---
-
-            // S1: first finally handler
-            LABEL(S1_1a);
-            ASTORE(r1);
-            GOTO(W_1);
-
-            // L_1: body of while loop, also second try
-            LABEL(L_1);
-            ACONST_NULL();
-            GOTO(S2_1_1a);
-            LABEL(S2_1_1b);
-            RETURN();
-
-            // C2_1: exception handler for second try
-            LABEL(C2_1);
-            ASTORE(e2);
-            ACONST_NULL();
-            GOTO(S2_1_2a);
-            LABEL(S2_1_2b);
-            ALOAD(e2);
-            ATHROW();
-
-            // W_1: test for the while loop
-            LABEL(W_1);
-            ILOAD(b);
-            IFNE(L_1); // falls through to X_1
-
-            // X_1: exit from finally{} block
-            LABEL(X_1);
-            GOTO(S1_1b);
-
-            LABEL(OC_1);
-
-            // --- Second instantiation of first subroutine ---
-
-            // S1: first finally handler
-            LABEL(S1_2a);
-            ASTORE(r1);
-            GOTO(W_2);
-
-            // L_2: body of while loop, also second try
-            LABEL(L_2);
-            ACONST_NULL();
-            GOTO(S2_2_1a);
-            LABEL(S2_2_1b);
-            RETURN();
-
-            // C2_2: exception handler for second try
-            LABEL(C2_2);
-            ASTORE(e2);
-            ACONST_NULL();
-            GOTO(S2_2_2a);
-            LABEL(S2_2_2b);
-            ALOAD(e2);
-            ATHROW();
-
-            // W_2: test for the while loop
-            LABEL(W_2);
-            ILOAD(b);
-            IFNE(L_2); // falls through to X_2
-
-            // X_2: exit from finally{} block
-            LABEL(X_2);
-            GOTO(S1_2b);
-
-            LABEL(OC_2);
-
-            // --- Second subroutine's 4 instantiations ---
-
-            // S2_1_1a:
-            LABEL(S2_1_1a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_1);
-            GOTO(S2_1_1b);
-            LABEL(OC_1_1);
-
-            // S2_1_2a:
-            LABEL(S2_1_2a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_1);
-            GOTO(S2_1_2b);
-            LABEL(OC_1_2);
-
-            // S2_2_1a:
-            LABEL(S2_2_1a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_2);
-            GOTO(S2_2_1b);
-            LABEL(OC_2_1);
-
-            // S2_2_2a:
-            LABEL(S2_2_2a);
-            ASTORE(r2);
-            ILOAD(b);
-            IFNE(X_2);
-            GOTO(S2_2_2b);
-            LABEL(OC_2_2);
-
-            // main subroutine handlers:
-            TRYCATCH(T1, C1, C1);
-            TRYCATCH(T1, OC, OC);
-
-            // first instance of first sub try/catch handlers:
-            TRYCATCH(L_1, C2_1, C2_1);
-            TRYCATCH(OT_1, OC_1, OC); // note: reuses handler code from main
-            // sub
-
-            // second instance of first sub try/catch handlers:
-            TRYCATCH(L_2, C2_2, C2_2);
-            TRYCATCH(OT_2, OC_2, OC);
-
-            // all 4 instances of second sub:
-            TRYCATCH(OT_1_1, OC_1_1, OC);
-            TRYCATCH(OT_1_2, OC_1_2, OC);
-            TRYCATCH(OT_2_1, OC_2_1, OC);
-            TRYCATCH(OT_2_2, OC_2_2, OC);
-
-            END(1, 6);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    /**
-     * Tests a method which has line numbers and local variable declarations.
-     * 
-     * <pre>
-     *   public void a() {
-     * 1    int a = 0;
-     * 2    try {
-     * 3      a++;
-     * 4    } finally {
-     * 5      a--;
-     * 6    }
-     *   }
-     *   LV "a" from 1 to 6
-     * </pre>
-     */
-    public void testBasicLineNumberAndLocalVars() {
-        {
-            Label LM1 = new Label();
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3 = new Label();
-            Label L4 = new Label();
-
-            setCurrent(jsr);
-            LABEL(LM1);
-            LINE(1, LM1);
-            ICONST_0();
-            ISTORE(1);
-
-            /* L0: body of try block */
-            LABEL(L0);
-            LINE(3, L0);
-            IINC(1, 1);
-            GOTO(L1);
-
-            /* L2: exception handler */
-            LABEL(L2);
-            ASTORE(3);
-            JSR(L3);
-            ALOAD(3);
-            ATHROW();
-
-            /* L3: subroutine */
-            LABEL(L3);
-            LINE(5, L3);
-            ASTORE(2);
-            IINC(1, -1);
-            RET(2);
-
-            /* L1: non-exceptional exit from try block */
-            LABEL(L1);
-            JSR(L3);
-            LABEL(L4); // L4
-            RETURN();
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L1, L4, L2);
-            LOCALVAR("a", "I", 1, LM1, L4);
-
-            END(1, 4);
-        }
-
-        {
-            Label LM1 = new Label();
-            Label L0 = new Label();
-            Label L1 = new Label();
-            Label L2 = new Label();
-            Label L3_1a = new Label();
-            Label L3_1b = new Label();
-            Label L3_1c = new Label();
-            Label L3_2a = new Label();
-            Label L3_2b = new Label();
-            Label L3_2c = new Label();
-            Label L4 = new Label();
-
-            setCurrent(exp);
-            LABEL(LM1);
-            LINE(1, LM1);
-            ICONST_0();
-            ISTORE(1);
-            // L0: try/catch block
-            LABEL(L0);
-            LINE(3, L0);
-            IINC(1, 1);
-            GOTO(L1);
-
-            // L2: Exception handler:
-            LABEL(L2);
-            ASTORE(3);
-            ACONST_NULL();
-            GOTO(L3_1a);
-            LABEL(L3_1b); // L3_1b;
-            ALOAD(3);
-            ATHROW();
-
-            // L1: On non-exceptional exit, try block leads here:
-            LABEL(L1);
-            ACONST_NULL();
-            GOTO(L3_2a);
-            LABEL(L3_2b); // L3_2b
-            LABEL(L4); // L4
-            RETURN();
-
-            // L3_1a: First instantiation of subroutine:
-            LABEL(L3_1a);
-            LINE(5, L3_1a);
-            ASTORE(2);
-            IINC(1, -1);
-            GOTO(L3_1b);
-            LABEL(L3_1c);
-
-            // L3_2a: Second instantiation of subroutine:
-            LABEL(L3_2a);
-            LINE(5, L3_2a);
-            ASTORE(2);
-            IINC(1, -1);
-            GOTO(L3_2b);
-            LABEL(L3_2c);
-
-            TRYCATCH(L0, L2, L2);
-            TRYCATCH(L1, L4, L2);
-            LOCALVAR("a", "I", 1, LM1, L4);
-            LOCALVAR("a", "I", 1, L3_1a, L3_1c);
-            LOCALVAR("a", "I", 1, L3_2a, L3_2c);
-
-            END(1, 4);
-        }
-
-        assertEquals(exp, jsr);
-    }
-
-    public void assertEquals(final MethodNode exp, final MethodNode actual) {
-        String textexp = getText(exp);
-        String textact = getText(actual);
-        System.err.println("Expected=" + textexp);
-        System.err.println("Actual=" + textact);
-        assertEquals(textexp, textact);
-    }
-
-    private String getText(final MethodNode mn) {
-        Textifier tv = new Textifier();
-        TraceMethodVisitor tmv = new TraceMethodVisitor(tv);
-        mn.accept(tmv);
-
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < tv.text.size(); i++) {
-            sb.append(tv.text.get(i));
-        }
-        return sb.toString();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/LocalVariablesSorterTest.java b/asm4/test/conform/org/objectweb/asm/commons/LocalVariablesSorterTest.java
deleted file mode 100644
index 294834a..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/LocalVariablesSorterTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * LocalVariableSorter tests.
- * 
- * @author Eric Bruneton
- */
-public class LocalVariablesSorterTest extends AbstractTest {
-
-    private final static TestClassLoader LOADER = new TestClassLoader();
-
-    public static TestSuite suite() throws Exception {
-        return new LocalVariablesSorterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                return new LocalVariablesSorter(access, desc, super
-                        .visitMethod(access, name, desc, signature, exceptions));
-            }
-        }, ClassReader.EXPAND_FRAMES);
-        byte[] b = cw.toByteArray();
-        try {
-            LOADER.defineClass(n, b);
-        } catch (ClassFormatError cfe) {
-            fail(cfe.getMessage());
-        } catch (Throwable ignored) {
-        }
-    }
-
-    // ------------------------------------------------------------------------
-
-    static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/LocalVariablesSorterTest2.java b/asm4/test/conform/org/objectweb/asm/commons/LocalVariablesSorterTest2.java
deleted file mode 100644
index 013da27..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/LocalVariablesSorterTest2.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.IllegalClassFormatException;
-import java.lang.instrument.Instrumentation;
-import java.security.ProtectionDomain;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * LocalVariablesSorter tests.
- * 
- * @author Eric Bruneton
- */
-public class LocalVariablesSorterTest2 extends AbstractTest {
-
-    public static void premain(final String agentArgs,
-            final Instrumentation inst) {
-        inst.addTransformer(new ClassFileTransformer() {
-            public byte[] transform(final ClassLoader loader,
-                    final String className, final Class<?> classBeingRedefined,
-                    final ProtectionDomain domain, final byte[] classFileBuffer)
-                    throws IllegalClassFormatException {
-                String n = className.replace('/', '.');
-                if (agentArgs.length() == 0 || n.indexOf(agentArgs) != -1) {
-                    return transformClass(classFileBuffer);
-                } else {
-                    return null;
-                }
-            }
-        });
-    }
-
-    static byte[] transformClass(final byte[] clazz) {
-        ClassReader cr = new ClassReader(clazz);
-        ClassWriter cw = new ClassWriter(0);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                return new LocalVariablesSorter(access, desc, cv.visitMethod(
-                        access, name, desc, signature, exceptions));
-            }
-
-        }, ClassReader.EXPAND_FRAMES);
-        return cw.toByteArray();
-    }
-
-    public static TestSuite suite() throws Exception {
-        TestSuite suite = new LocalVariablesSorterTest2().getSuite();
-        suite.addTest(new VerifierTest());
-        return suite;
-    }
-
-    @Override
-    public void test() throws Exception {
-        try {
-            Class.forName(n, true, getClass().getClassLoader());
-        } catch (NoClassDefFoundError ncdfe) {
-            // ignored
-        } catch (UnsatisfiedLinkError ule) {
-            // ignored
-        } catch (ClassFormatError cfe) {
-            fail(cfe.getMessage());
-        } catch (VerifyError ve) {
-            String s = n.replace('.', '/') + ".class";
-            InputStream is = getClass().getClassLoader().getResourceAsStream(s);
-            ClassReader cr = new ClassReader(is);
-            byte[] b = transformClass(cr.b);
-            StringWriter sw1 = new StringWriter();
-            StringWriter sw2 = new StringWriter();
-            sw2.write(ve.toString() + "\n");
-            ClassVisitor cv1 = new TraceClassVisitor(new PrintWriter(sw1));
-            ClassVisitor cv2 = new TraceClassVisitor(new PrintWriter(sw2));
-            cr.accept(cv1, 0);
-            new ClassReader(b).accept(cv2, 0);
-            String s1 = sw1.toString();
-            String s2 = sw2.toString();
-            assertEquals("different data", s1, s2);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/RemappingClassAdapterTest.java b/asm4/test/conform/org/objectweb/asm/commons/RemappingClassAdapterTest.java
deleted file mode 100644
index 4467fb2..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/RemappingClassAdapterTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.ListIterator;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.FieldNode;
-import org.objectweb.asm.tree.FrameNode;
-import org.objectweb.asm.tree.InnerClassNode;
-import org.objectweb.asm.tree.LdcInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.MultiANewArrayInsnNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-import org.objectweb.asm.tree.TypeInsnNode;
-
-public class RemappingClassAdapterTest extends TestCase implements Opcodes {
-
-    public void testRemappingClassAdapter() throws Exception {
-        Map<String, String> map = new HashMap<String, String>();
-        map.put("Boo", "B1");
-        map.put("Coo", "C1");
-        map.put("Doo", "D1");
-        Remapper remapper = new SimpleRemapper(map);
-
-        ClassNode cn = new ClassNode();
-        dump(new RemappingClassAdapter(cn, remapper));
-
-        assertEquals("D1", cn.name);
-        assertEquals("B1", cn.superName);
-        assertEquals(Arrays.asList(new String[] { "I", "I", "C1", "J", "B1" }),
-                cn.interfaces);
-
-        assertEquals("LB1;", field(cn, 0).desc);
-        assertEquals("[LB1;", field(cn, 1).desc);
-
-        assertEquals("D1", innerClass(cn, 0).name);
-        assertEquals("B1", innerClass(cn, 0).outerName);
-        // assertEquals("Doo", innerClass(cn, 0).innerName);
-
-        assertEquals("B1", cn.outerClass);
-        assertEquals("([[LB1;LC1;LD1;)LC1;", cn.outerMethodDesc);
-
-        MethodNode mn0 = cn.methods.get(0);
-        ListIterator<AbstractInsnNode> it = mn0.instructions.iterator();
-
-        FieldInsnNode n0 = (FieldInsnNode) it.next();
-        assertEquals("D1", n0.owner);
-        assertEquals("LB1;", n0.desc);
-
-        assertEquals(Type.getType("LB1;"), ((LdcInsnNode) it.next()).cst);
-        assertEquals(Type.getType("[LD1;"), ((LdcInsnNode) it.next()).cst);
-        assertEquals(Type.getType("[I"), ((LdcInsnNode) it.next()).cst);
-        assertEquals(Type.getType("J"), ((LdcInsnNode) it.next()).cst);
-
-        assertEquals("B1", ((TypeInsnNode) it.next()).desc);
-        assertEquals("[LD1;", ((TypeInsnNode) it.next()).desc);
-        assertEquals("[I", ((TypeInsnNode) it.next()).desc);
-        assertEquals("J", ((TypeInsnNode) it.next()).desc);
-
-        MultiANewArrayInsnNode n3 = (MultiANewArrayInsnNode) it.next();
-        assertEquals("[[LB1;", n3.desc);
-
-        MethodInsnNode n4 = (MethodInsnNode) it.next();
-        assertEquals("D1", n4.owner);
-        assertEquals("([[LB1;LC1;LD1;)LC1;", n4.desc);
-
-        FrameNode fn0 = (FrameNode) it.next();
-        assertEquals(Collections.EMPTY_LIST, fn0.local);
-        assertEquals(Collections.EMPTY_LIST, fn0.stack);
-
-        assertEquals(Arrays.asList(new Object[] { "B1", "C1", "D1" }),
-                ((FrameNode) it.next()).local);
-        assertEquals(
-                Arrays.asList(new Object[] { Opcodes.INTEGER, "C1",
-                        Opcodes.INTEGER, "D1" }), ((FrameNode) it.next()).local);
-        assertEquals(Arrays.asList(new Object[] { Opcodes.INTEGER,
-                Opcodes.INTEGER }), ((FrameNode) it.next()).local);
-        // assertEquals(Collections.EMPTY_LIST, fn0.stack);
-
-        TryCatchBlockNode tryCatchBlockNode = mn0.tryCatchBlocks.get(0);
-        assertEquals("C1", tryCatchBlockNode.type);
-
-        MethodNode mn1 = cn.methods.get(1);
-        assertEquals("([[LB1;LC1;LD1;)V", mn1.desc);
-        assertEquals(Arrays.asList(new String[] { "I", "J" }), mn1.exceptions);
-    }
-
-    private FieldNode field(ClassNode cn, int n) {
-        return cn.fields.get(n);
-    }
-
-    private InnerClassNode innerClass(ClassNode cn, int n) {
-        return cn.innerClasses.get(n);
-    }
-
-    public static void dump(ClassVisitor cv) throws Exception {
-        cv.visit(V1_5, 0, "Doo", null, "Boo", new String[] { "I", "I", "Coo",
-                "J", "Boo" });
-
-        cv.visitInnerClass("Doo", "Boo", "Doo", 0);
-
-        cv.visitOuterClass("Boo", "foo", "([[LBoo;LCoo;LDoo;)LCoo;");
-
-        cv.visitField(0, "boo", "LBoo;", null, null).visitEnd();
-        cv.visitField(0, "boo1", "[LBoo;", null, null).visitEnd();
-        cv.visitField(0, "s", "Ljava/lang/String;", null, null).visitEnd();
-        cv.visitField(0, "i", "I", null, null).visitEnd();
-
-        MethodVisitor mv;
-
-        mv = cv.visitMethod(0, "foo", "()V", null, null);
-        mv.visitCode();
-        mv.visitFieldInsn(GETFIELD, "Doo", "boo", "LBoo;");
-
-        mv.visitLdcInsn(Type.getType("LBoo;"));
-        mv.visitLdcInsn(Type.getType("[LDoo;"));
-        mv.visitLdcInsn(Type.getType("[I"));
-        mv.visitLdcInsn(Type.getType("J"));
-
-        mv.visitTypeInsn(ANEWARRAY, "Boo");
-        mv.visitTypeInsn(ANEWARRAY, "[LDoo;");
-        mv.visitTypeInsn(ANEWARRAY, "[I");
-        mv.visitTypeInsn(ANEWARRAY, "J");
-
-        mv.visitMultiANewArrayInsn("[[LBoo;", 2);
-        mv.visitMethodInsn(INVOKEVIRTUAL, "Doo", "goo",
-                "([[LBoo;LCoo;LDoo;)LCoo;");
-
-        mv.visitFrame(Opcodes.F_NEW, 0, new Object[5], 0, new Object[10]);
-        mv.visitFrame(Opcodes.F_NEW, 3, new Object[] { "Boo", "Coo", "Doo" },
-                0, new Object[0]);
-        mv.visitFrame(Opcodes.F_NEW, 4, new Object[] { Opcodes.INTEGER, "Coo",
-                Opcodes.INTEGER, "Doo" }, 0, new Object[0]);
-        mv.visitFrame(Opcodes.F_NEW, 2, new Object[] { Opcodes.INTEGER,
-                Opcodes.INTEGER }, 0, new Object[0]);
-
-        Label l = new Label();
-
-        mv.visitLocalVariable("boo", "LBoo;", null, l, l, 1);
-        mv.visitLocalVariable("boo1", "[LBoo;", null, l, l, 3);
-        mv.visitLocalVariable("boo2", "[[LBoo;", null, l, l, 4);
-        mv.visitMaxs(0, 0);
-
-        mv.visitTryCatchBlock(l, l, l, "Coo");
-
-        mv.visitEnd();
-
-        mv = cv.visitMethod(0, "goo", "([[LBoo;LCoo;LDoo;)V", null,
-                new String[] { "I", "J" });
-        mv.visitEnd();
-
-        cv.visitEnd();
-    }
-
-    // /*
-    public static class Boo {
-    }
-
-    public static interface Coo {
-    }
-
-    public static class Doo extends Boo implements Coo {
-        Boo boo = new Boo();
-        Boo[] boo1 = new Boo[2];
-        String s = "";
-        int i = 5;
-
-        static final Class<?> c1 = Boo.class;
-        static final Class<?> c2 = Boo[].class;
-
-        public Doo() {
-        }
-
-        public Doo(int i, Coo coo, Boo boo) {
-        }
-
-        void foo() {
-            class Eoo {
-                String s;
-            }
-
-            Eoo e = new Eoo();
-            e.s = "aaa";
-
-            // visitFieldInsn(int, String, String, String)
-            // visitLocalVariable(String, String, String, Label, Label, int)
-            Boo boo = this.boo;
-
-            // visitLdcInsn(Object)
-            Class<?> cc = Boo.class;
-
-            // visitTypeInsn(int, String)
-            Boo[] boo1 = new Boo[2];
-
-            // visitMultiANewArrayInsn(String, int)
-            Boo[][] boo2 = new Boo[2][2];
-
-            // visitMethodInsn(int, String, String, String)
-            goo(boo2, this, this);
-        }
-
-        Coo goo(Boo[][] boo2, Coo coo, Doo doo) {
-            return null;
-        }
-    }
-    // */
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/RemappingClassAdapterTest2.java b/asm4/test/conform/org/objectweb/asm/commons/RemappingClassAdapterTest2.java
deleted file mode 100644
index 65a4dc5..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/RemappingClassAdapterTest2.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-
-package org.objectweb.asm.commons;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-
-public class RemappingClassAdapterTest2 extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new RemappingClassAdapterTest2().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassWriter cw = new ClassWriter(0);
-        ClassReader cr = new ClassReader(is);
-        Map<String, String> map = new HashMap<String, String>() {
-            @Override
-            public String get(Object key) {
-                return "Foo";
-            }
-        };
-        cr.accept(new RemappingClassAdapter(cw, new SimpleRemapper(map)),
-                ClassReader.EXPAND_FRAMES);
-    }
-
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/SerialVersionUIDAdderTest.java b/asm4/test/conform/org/objectweb/asm/commons/SerialVersionUIDAdderTest.java
deleted file mode 100644
index 561ee55..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/SerialVersionUIDAdderTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-
-/**
- * SerialVerionUIDAdder tests.
- * 
- * @author Eric Bruneton
- */
-public class SerialVersionUIDAdderTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new SerialVersionUIDAdderTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        cr.accept(new SerialVersionUIDAdder(null), 0);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/SerialVersionUIDAdderUnitTest.java b/asm4/test/conform/org/objectweb/asm/commons/SerialVersionUIDAdderUnitTest.java
deleted file mode 100644
index 8019890..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/SerialVersionUIDAdderUnitTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-
-/**
- * Test for the SerialVerionUid computation.
- * 
- * @author Alexandre Vasseur
- * @author Eric Bruneton
- */
-public class SerialVersionUIDAdderUnitTest extends TestCase implements
-        Serializable {
-
-    protected final static int aField = 32;
-
-    static {
-        System.setIn(System.in);
-    }
-
-    public Object[] aMethod() {
-        return null;
-    }
-
-    private long computeSerialVersionUID(final String className)
-            throws IOException {
-        final long[] svuid = new long[1];
-        ClassVisitor cv = new SerialVersionUIDAdder(null) {
-            @Override
-            protected long computeSVUID() throws IOException {
-                svuid[0] = super.computeSVUID();
-                return svuid[0];
-            }
-        };
-        new ClassReader(className).accept(cv, 0);
-        return svuid[0];
-    }
-
-    public void test() throws Throwable {
-        long UID = computeSerialVersionUID(getClass().getName());
-        assertEquals(194753646298127968L, UID);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/commons/StaticInitMergerTest.java b/asm4/test/conform/org/objectweb/asm/commons/StaticInitMergerTest.java
deleted file mode 100644
index a90703c..0000000
--- a/asm4/test/conform/org/objectweb/asm/commons/StaticInitMergerTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.commons;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * StaticInitMerger tests.
- * 
- * @author Eric Bruneton
- */
-public class StaticInitMergerTest extends TestCase implements Opcodes {
-
-    private final static TestClassLoader LOADER = new TestClassLoader();
-
-    public void test() throws Exception {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        ClassVisitor cv = new StaticInitMerger("$clinit$", cw);
-        cv.visit(V1_1, ACC_PUBLIC, "A", null, "java/lang/Object", null);
-        cv.visitField(ACC_PUBLIC + ACC_STATIC, "counter", "I", null, null);
-        for (int i = 0; i < 5; ++i) {
-            MethodVisitor mv = cv.visitMethod(ACC_PUBLIC, "<clinit>", "()V",
-                    null, null);
-            mv.visitFieldInsn(GETSTATIC, "A", "counter", "I");
-            mv.visitInsn(ICONST_1);
-            mv.visitInsn(IADD);
-            mv.visitFieldInsn(PUTSTATIC, "A", "counter", "I");
-            mv.visitInsn(RETURN);
-            mv.visitMaxs(0, 0);
-        }
-        MethodVisitor mv = cv.visitMethod(ACC_PUBLIC, "<init>", "()V", null,
-                null);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        cv.visitEnd();
-
-        Class<?> c = LOADER.defineClass("A", cw.toByteArray());
-        assertEquals(c.getField("counter").getInt(c.newInstance()), 5);
-    }
-
-    // ------------------------------------------------------------------------
-
-    static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/signature/SignatureUnitTest.java b/asm4/test/conform/org/objectweb/asm/signature/SignatureUnitTest.java
deleted file mode 100644
index 337bbe0..0000000
--- a/asm4/test/conform/org/objectweb/asm/signature/SignatureUnitTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.signature;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.util.TraceSignatureVisitorUnitTest;
-import org.objectweb.asm.util.TraceSignatureVisitorUnitTest.TestData;
-
-/**
- * Signature tests.
- * 
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public class SignatureUnitTest extends TestCase {
-
-    public static TestSuite suite() {
-        TestSuite suite = new TestSuite(SignatureUnitTest.class.getName());
-        for (int i = 0; i < TraceSignatureVisitorUnitTest.DATA.length; i++) {
-            suite.addTest(new SignatureUnitTest(new TestData(
-                    TraceSignatureVisitorUnitTest.DATA[i])));
-        }
-        return suite;
-    }
-
-    private TestData data;
-
-    private SignatureUnitTest(final TestData data) {
-        super("testSignature");
-        this.data = data;
-    }
-
-    public void testSignature() {
-        SignatureWriter wrt = new SignatureWriter();
-        SignatureReader rdr = new SignatureReader(data.signature);
-        switch (data.type) {
-        case 'C':
-        case 'M':
-            rdr.accept(wrt);
-            break;
-        case 'F':
-            rdr.acceptType(wrt);
-            break;
-        default:
-            return;
-        }
-        assertEquals(data.signature, wrt.toString());
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + " " + data.signature;
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/signature/SignatureWriterTest.java b/asm4/test/conform/org/objectweb/asm/signature/SignatureWriterTest.java
deleted file mode 100644
index 3dc97a9..0000000
--- a/asm4/test/conform/org/objectweb/asm/signature/SignatureWriterTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.signature;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * Signature tests.
- * 
- * @author Eric Bruneton
- */
-public class SignatureWriterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new SignatureWriterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        cr.accept(new ClassVisitor(Opcodes.ASM4) {
-            @Override
-            public void visit(int version, int access, String name,
-                    String signature, String superName, String[] interfaces) {
-                if (signature != null) {
-                    SignatureReader sr = new SignatureReader(signature);
-                    SignatureWriter sw = new SignatureWriter();
-                    sr.accept(sw);
-                    assertEquals(signature, sw.toString());
-                }
-            }
-
-            @Override
-            public FieldVisitor visitField(int access, String name,
-                    String desc, String signature, Object value) {
-                if (signature != null) {
-                    SignatureReader sr = new SignatureReader(signature);
-                    SignatureWriter sw = new SignatureWriter();
-                    sr.acceptType(sw);
-                    assertEquals(signature, sw.toString());
-                }
-                return null;
-            }
-
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                if (signature != null) {
-                    SignatureReader sr = new SignatureReader(signature);
-                    SignatureWriter sw = new SignatureWriter();
-                    sr.accept(sw);
-                    assertEquals(signature, sw.toString());
-                }
-                return null;
-            }
-
-        }, 0);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Annotation.java b/asm4/test/conform/org/objectweb/asm/test/cases/Annotation.java
deleted file mode 100644
index afa6e7b..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Annotation.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Type;
-
-/**
- * Generates an annotation class with values of all types and a class using it.
- * 
- * @author Eric Bruneton
- */
-public class Annotation extends Generator {
-
-    final static int M = ACC_PUBLIC + ACC_ABSTRACT;
-
-    final static String STRING = "Ljava/lang/String;";
-
-    final static String CLASS = "Ljava/lang/Class;";
-
-    final static String DOC = "Ljava/lang/annotation/Documented;";
-
-    final static String DEPRECATED = "Ljava/lang/Deprecated;";
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Annotation.class", dumpAnnotation());
-        generate(dir, "pkg/Annotated.class", dumpAnnotated());
-    }
-
-    public byte[] dumpAnnotation() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        MethodVisitor mv;
-        AnnotationVisitor av0, av1;
-
-        cw.visit(V1_5, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT
-                + ACC_INTERFACE, "pkg/Annotation", null, "java/lang/Object",
-                new String[] { "java/lang/annotation/Annotation" });
-
-        mv = cw.visitMethod(M, "byteValue", "()B", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Byte((byte) 1));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "charValue", "()C", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Character((char) 1));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "booleanValue", "()Z", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, Boolean.TRUE);
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "intValue", "()I", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Integer(1));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "shortValue", "()S", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Short((short) 1));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "longValue", "()J", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Long(1L));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "floatValue", "()F", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Float("1.0"));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "doubleValue", "()D", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new Double("1.0"));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "stringValue", "()" + STRING, null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, "1");
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "classValue", "()" + CLASS, null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, Type.getType("Lpkg/Annotation;"));
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "enumValue", "()Lpkg/Enum;", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visitEnum(null, "Lpkg/Enum;", "V1");
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "annotationValue", "()" + DOC, null, null);
-        av0 = mv.visitAnnotationDefault();
-        av1 = av0.visitAnnotation(null, DOC);
-        av1.visitEnd();
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "byteArrayValue", "()[B", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new byte[] { 0, 1 });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "charArrayValue", "()[C", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new char[] { '0', '1' });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "booleanArrayValue", "()[Z", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new boolean[] { false, true });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "intArrayValue", "()[I", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new int[] { 0, 1 });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "shortArrayValue", "()[S", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new short[] { (short) 0, (short) 1 });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "longArrayValue", "()[J", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new long[] { 0L, 1L });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "floatArrayValue", "()[F", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new float[] { 0.0f, 1.0f });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "doubleArrayValue", "()[D", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av0.visit(null, new double[] { 0.0d, 1.0d });
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "stringArrayValue", "()" + STRING, null, null);
-        av0 = mv.visitAnnotationDefault();
-        av1 = av0.visitArray(null);
-        av1.visit(null, "0");
-        av1.visit(null, "1");
-        av1.visitEnd();
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "classArrayValue", "()[" + CLASS, null, null);
-        av0 = mv.visitAnnotationDefault();
-        av1 = av0.visitArray(null);
-        av1.visit(null, Type.getType("Lpkg/Annotation;"));
-        av1.visit(null, Type.getType("Lpkg/Annotation;"));
-        av1.visitEnd();
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "enumArrayValue", "()[Lpkg/Enum;", null, null);
-        av0 = mv.visitAnnotationDefault();
-        av1 = av0.visitArray(null);
-        av1.visitEnum(null, "Lpkg/Enum;", "V0");
-        av1.visitEnum(null, "Lpkg/Enum;", "V1");
-        av1.visitEnd();
-        av0.visitEnd();
-        mv.visitEnd();
-
-        mv = cw.visitMethod(M, "annotationArrayValue", "()[" + DOC, null, null);
-        av0 = mv.visitAnnotationDefault();
-        av1 = av0.visitArray(null);
-        av1.visitAnnotation(null, DOC).visitEnd();
-        av1.visitAnnotation(null, DOC).visitEnd();
-        av1.visitEnd();
-        av0.visitEnd();
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    public byte[] dumpAnnotated() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-        AnnotationVisitor av0, av1;
-
-        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, "pkg/Annotated", null,
-                "java/lang/Object", null);
-
-        // visible class annotation
-        cw.visitAnnotation(DEPRECATED, true).visitEnd();
-
-        // invisible class annotation, with values of all types
-        av0 = cw.visitAnnotation("Lpkg/Annotation;", false);
-        av0.visit("byteValue", new Byte((byte) 0));
-        av0.visit("charValue", new Character((char) 48));
-        av0.visit("booleanValue", Boolean.FALSE);
-        av0.visit("intValue", new Integer(0));
-        av0.visit("shortValue", new Short((short) 0));
-        av0.visit("longValue", new Long(0L));
-        av0.visit("floatValue", new Float("0.0"));
-        av0.visit("doubleValue", new Double("0.0"));
-        av0.visit("stringValue", "0");
-        av0.visitEnum("enumValue", "Lpkg/Enum;", "V0");
-        av0.visitAnnotation("annotationValue", DOC).visitEnd();
-        av0.visit("classValue", Type.getType("Lpkg/Annotation;"));
-        av0.visit("byteArrayValue", new byte[] { 1, 0 });
-        av0.visit("charArrayValue", new char[] { '1', '0' });
-        av0.visit("booleanArrayValue", new boolean[] { true, false });
-        av0.visit("intArrayValue", new int[] { 1, 0 });
-        av0.visit("shortArrayValue", new short[] { (short) 1, (short) 0 });
-        av0.visit("longArrayValue", new long[] { 1L, 0L });
-        av0.visit("floatArrayValue", new float[] { 1.0f, 0.0f });
-        av0.visit("doubleArrayValue", new double[] { 1.0d, 0.0d });
-        av1 = av0.visitArray("stringArrayValue");
-        av1.visit(null, "1");
-        av1.visit(null, "0");
-        av1.visitEnd();
-        av0.visitArray("classArrayValue").visitEnd();
-        av1 = av0.visitArray("enumArrayValue");
-        av1.visitEnum(null, "Lpkg/Enum;", "V1");
-        av1.visitEnum(null, "Lpkg/Enum;", "V2");
-        av1.visitEnd();
-        av0.visitArray("annotationArrayValue").visitEnd();
-        av0.visitEnd();
-
-        fv = cw.visitField(ACC_PUBLIC, "f", "I", null, null);
-        // visible field annotation
-        fv.visitAnnotation(DEPRECATED, true).visitEnd();
-        // invisible field annotation
-        av0 = fv.visitAnnotation("Lpkg/Annotation;", false);
-        av0.visitEnum("enumValue", "Lpkg/Enum;", "V0");
-        av0.visitEnd();
-        fv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(IIIIIIIIII)V", null, null);
-        // visible method annotation
-        mv.visitAnnotation(DEPRECATED, true).visitEnd();
-        // invisible method annotation
-        av0 = mv.visitAnnotation("Lpkg/Annotation;", false);
-        av0.visitAnnotation("annotationValue", DOC).visitEnd();
-        av0.visitEnd();
-        // synthetic parameter annotation
-        mv.visitParameterAnnotation(0, "Ljava/lang/Synthetic;", false);
-        // visible parameter annotation
-        mv.visitParameterAnnotation(8, DEPRECATED, true).visitEnd();
-        // invisible parameter annotation
-        av0 = mv.visitParameterAnnotation(8, "Lpkg/Annotation;", false);
-        av0.visitArray("stringArrayValue").visitEnd();
-        av0.visitEnd();
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Attribute.java b/asm4/test/conform/org/objectweb/asm/test/cases/Attribute.java
deleted file mode 100644
index b59238b..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Attribute.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.attrs.CodeComment;
-import org.objectweb.asm.attrs.Comment;
-
-/**
- * Generates a class with non standard attributes. Covers class, field, method
- * and code attributes. Also covers the V1_3 class version and the SYNTHETIC
- * access flag for classes.
- * 
- * @author Eric Bruneton
- */
-public class Attribute extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Attribute.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-
-        cw.visit(V1_3, ACC_PUBLIC + ACC_SYNTHETIC, "pkg/Attribute", null,
-                "java/lang/Object", null);
-
-        cw.visitAttribute(new Comment());
-
-        fv = cw.visitField(ACC_PUBLIC, "f", "I", null, null);
-        fv.visitAttribute(new Comment());
-        fv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitAttribute(new Comment());
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-
-        /*
-         * the following instructions are designed so that this method will be
-         * resized by the method resizing test, in order to cover the code that
-         * recomputes the code attribute labels in the resizeInstructions method
-         * (see MethodWriter).
-         */
-        Label l0 = new Label();
-        mv.visitInsn(ICONST_0);
-        mv.visitJumpInsn(IFEQ, l0);
-        // many NOPs will be introduced here by the method resizing test
-        mv.visitJumpInsn(GOTO, l0);
-        mv.visitLabel(l0);
-
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitAttribute(new CodeComment());
-        mv.visitEnd();
-
-        cw.visitEnd();
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Debug.java b/asm4/test/conform/org/objectweb/asm/test/cases/Debug.java
deleted file mode 100644
index 8a1dd19..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Debug.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Generates a class with debug information. Covers line number tables, local
- * variable tables, source file, source debug, etc. Also covers the
- * serialVersionUID field (to cover a branch in SerialVersionUIDAdder).
- * 
- * @author Eric Bruneton
- */
-public class Debug extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Debug.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-
-        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, "pkg/Debug", null,
-                "java/lang/Object", new String[] { "java/io/Serializable" });
-
-        cw.visitSource("Debug.java", "source-debug");
-
-        FieldVisitor fv = cw.visitField(ACC_FINAL + ACC_STATIC,
-                "serialVersionUID", "J", null, new Long(1L));
-        fv.visitEnd();
-
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null,
-                null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        mv.visitLabel(l0);
-        mv.visitLineNumber(3, l0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(ICONST_0);
-        mv.visitJumpInsn(IFEQ, l1);
-        mv.visitJumpInsn(GOTO, l1);
-        mv.visitLabel(l1);
-        mv.visitLineNumber(3, l1);
-        mv.visitInsn(RETURN);
-        mv.visitLabel(l2);
-        mv.visitLocalVariable("this", "Lpkg/Debug;", "Lpkg/Debug;", l0, l2, 0);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Enum.java b/asm4/test/conform/org/objectweb/asm/test/cases/Enum.java
deleted file mode 100644
index 525f88f..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Enum.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Type;
-
-/**
- * Generates an enum class.
- * 
- * @author Eric Bruneton
- */
-public class Enum extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Enum.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-
-        cw.visit(V1_5, ACC_PUBLIC + ACC_FINAL + ACC_SUPER + ACC_ENUM,
-                "pkg/Enum", "Ljava/lang/Enum<Lpkg/Enum;>;", "java/lang/Enum",
-                null);
-
-        fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC + ACC_ENUM,
-                "V0", "Lpkg/Enum;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC + ACC_ENUM,
-                "V1", "Lpkg/Enum;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC + ACC_ENUM,
-                "V2", "Lpkg/Enum;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(
-                ACC_PRIVATE + ACC_FINAL + ACC_STATIC + ACC_SYNTHETIC,
-                "$VALUES", "[Lpkg/Enum;", null, null);
-        fv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "values",
-                "()[Lpkg/Enum;", null, null);
-        mv.visitCode();
-        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "$VALUES", "[Lpkg/Enum;");
-        mv.visitMethodInsn(INVOKEVIRTUAL, "[Lpkg/Enum;", "clone",
-                "()Ljava/lang/Object;");
-        mv.visitTypeInsn(CHECKCAST, "[Lpkg/Enum;");
-        mv.visitInsn(ARETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "valueOf",
-                "(Ljava/lang/String;)Lpkg/Enum;", null, null);
-        mv.visitCode();
-        mv.visitLdcInsn(Type.getType("Lpkg/Enum;"));
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Enum", "valueOf",
-                "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;");
-        mv.visitTypeInsn(CHECKCAST, "pkg/Enum");
-        mv.visitInsn(ARETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PRIVATE, "<init>", "(Ljava/lang/String;I)V",
-                "()V", null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 1);
-        mv.visitVarInsn(ILOAD, 2);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Enum", "<init>",
-                "(Ljava/lang/String;I)V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
-        mv.visitCode();
-        mv.visitTypeInsn(NEW, "pkg/Enum");
-        mv.visitInsn(DUP);
-        mv.visitLdcInsn("V0");
-        mv.visitInsn(ICONST_0);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/Enum", "<init>",
-                "(Ljava/lang/String;I)V");
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "V0", "Lpkg/Enum;");
-        mv.visitTypeInsn(NEW, "pkg/Enum");
-        mv.visitInsn(DUP);
-        mv.visitLdcInsn("V1");
-        mv.visitInsn(ICONST_1);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/Enum", "<init>",
-                "(Ljava/lang/String;I)V");
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "V1", "Lpkg/Enum;");
-        mv.visitTypeInsn(NEW, "pkg/Enum");
-        mv.visitInsn(DUP);
-        mv.visitLdcInsn("V2");
-        mv.visitInsn(ICONST_2);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/Enum", "<init>",
-                "(Ljava/lang/String;I)V");
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "V2", "Lpkg/Enum;");
-        mv.visitInsn(ICONST_3);
-        mv.visitTypeInsn(ANEWARRAY, "pkg/Enum");
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "V0", "Lpkg/Enum;");
-        mv.visitInsn(AASTORE);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_1);
-        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "V1", "Lpkg/Enum;");
-        mv.visitInsn(AASTORE);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_2);
-        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "V2", "Lpkg/Enum;");
-        mv.visitInsn(AASTORE);
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "$VALUES", "[Lpkg/Enum;");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Frames.java b/asm4/test/conform/org/objectweb/asm/test/cases/Frames.java
deleted file mode 100644
index 31ffedc..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Frames.java
+++ /dev/null
@@ -1,732 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * Generates classes with StackMap and StackMapTable attributes. Covers all
- * frame (FULL, SAME, etc.) and frame element types (TOP, NULL, INTEGER, etc.).
- * Also covers the V1_6 class version.
- * 
- * @author Eric Bruneton
- */
-public class Frames extends Generator {
-
-    final static int M = ACC_STATIC;
-    final static String I1 = "Ljava/io/Serializable;";
-    final static String I2 = "Ljava/lang/Comparable;";
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        byte[] b = dump();
-        ClassWriter cw = new ClassWriter(0);
-        ClassReader cr = new ClassReader(b);
-        cr.accept(new RenameAdapter(cw), ClassReader.EXPAND_FRAMES);
-
-        generate(dir, "pkg/FrameTable.class", b);
-        generate(dir, "pkg/FrameMap.class", cw.toByteArray());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        MethodVisitor mv;
-        FieldVisitor fv;
-
-        cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "pkg/FrameTable", null,
-                "java/lang/Object", null);
-
-        fv = cw.visitField(M, "long", "Ljava/lang/Long;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "double", "Ljava/lang/Double;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "number", "Ljava/lang/Number;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "serializable", I1, null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "comparable", I2, null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "longArray", "[Ljava/lang/Long;", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "intArray", "[I", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "floatArray", "[F", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(M, "objectArray", "[Ljava/lang/Object;", null, null);
-        fv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/Object;)V",
-                null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        uninitializedThisType(cw);
-        uninitializedLocalType(cw);
-        uninitializedStackType(cw);
-        nullType(cw);
-        topType(cw);
-        arrayTypes(cw);
-
-        mergeTypes(cw);
-        mergeStackTypes(cw);
-        mergeNullArray(cw);
-
-        appendAndChopFrame(cw);
-        sameLocals1stackItemFrame(cw);
-        sameLocals1stackItemFrame2(cw);
-        sameLocals1stackItemFrameExtended(cw);
-        sameFrameExtended(cw);
-
-        deadCode(cw);
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    private void uninitializedThisType(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(I)V", null,
-                null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        Label l0 = new Label();
-        mv.visitLabel(l0);
-        mv.visitTypeInsn(NEW, "pkg/FrameTable");
-        mv.visitInsn(DUP);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l1 = new Label();
-        mv.visitJumpInsn(IFNE, l1);
-        mv.visitInsn(ACONST_NULL);
-        Label l2 = new Label();
-        mv.visitJumpInsn(GOTO, l2);
-        mv.visitFrame(F_FULL, 2, new Object[] { UNINITIALIZED_THIS, INTEGER },
-                3, new Object[] { UNINITIALIZED_THIS, l0, l0 });
-        mv.visitLabel(l1);
-        mv.visitTypeInsn(NEW, "java/lang/Object");
-        mv.visitInsn(DUP);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitFrame(F_FULL, 2, new Object[] { UNINITIALIZED_THIS, INTEGER },
-                4, new Object[] { UNINITIALIZED_THIS, l0, l0,
-                        "java/lang/Object" });
-        mv.visitLabel(l2);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/FrameTable", "<init>",
-                "(Ljava/lang/Object;)V");
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/FrameTable", "<init>",
-                "(Ljava/lang/Object;)V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void uninitializedLocalType(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "uninitializedLocalType",
-                "(Z)V", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        mv.visitLabel(l0);
-        mv.visitTypeInsn(NEW, "java/lang/Long");
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitVarInsn(ALOAD, 2);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l1 = new Label();
-        mv.visitJumpInsn(IFEQ, l1);
-        mv.visitInsn(LCONST_0);
-        Label l2 = new Label();
-        mv.visitJumpInsn(GOTO, l2);
-        mv.visitFrame(F_FULL, 3,
-                new Object[] { "pkg/FrameTable", INTEGER, l0 }, 1,
-                new Object[] { l0 });
-        mv.visitLabel(l1);
-        mv.visitInsn(LCONST_1);
-        mv.visitFrame(F_FULL, 3,
-                new Object[] { "pkg/FrameTable", INTEGER, l0 }, 2,
-                new Object[] { l0, LONG });
-        mv.visitLabel(l2);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Long", "<init>", "(J)V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void uninitializedStackType(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "uninitializedStackType",
-                "(Z)V", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        mv.visitLabel(l0);
-        mv.visitTypeInsn(NEW, "java/lang/Long");
-        mv.visitInsn(DUP);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l1 = new Label();
-        mv.visitJumpInsn(IFEQ, l1);
-        mv.visitInsn(LCONST_0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Long", "<init>", "(J)V");
-        Label l2 = new Label();
-        mv.visitJumpInsn(GOTO, l2);
-        mv.visitFrame(F_FULL, 1, new Object[] { "pkg/FrameTable" }, 2,
-                new Object[] { l0, l0 });
-        mv.visitLabel(l1);
-        mv.visitInsn(LCONST_1);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Long", "<init>", "(J)V");
-        mv.visitFrame(F_SAME1, 0, null, 1, new Object[] { "java/lang/Long" });
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void nullType(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "nullType",
-                "(Ljava/lang/String;Ljava/lang/String;)V", null, null);
-        mv.visitCode();
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ALOAD, 1);
-        Label l0 = new Label();
-        mv.visitJumpInsn(IFNONNULL, l0);
-        mv.visitVarInsn(ALOAD, 2);
-        Label l1 = new Label();
-        mv.visitJumpInsn(GOTO, l1);
-        mv.visitFrame(F_FULL, 3, new Object[] { "pkg/FrameTable",
-                "java/lang/String", NULL }, 2, new Object[] { "pkg/FrameTable",
-                NULL });
-        mv.visitLabel(l0);
-        mv.visitVarInsn(ALOAD, 1);
-        mv.visitFrame(F_FULL, 3, new Object[] { "pkg/FrameTable",
-                "java/lang/String", NULL }, 3, new Object[] { "pkg/FrameTable",
-                NULL, "java/lang/String" });
-        mv.visitLabel(l1);
-        mv.visitMethodInsn(INVOKEVIRTUAL, "pkg/FrameTable", "nullType",
-                "(Ljava/lang/String;Ljava/lang/String;)V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void topType(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "topType",
-                "(ZBCSIFJDLjava/lang/Object;)V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ILOAD, 5);
-        mv.visitVarInsn(ISTORE, 13);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l0 = new Label();
-        mv.visitJumpInsn(IFEQ, l0);
-        mv.visitInsn(RETURN);
-        mv.visitFrame(F_APPEND, 2, new Object[] { TOP, INTEGER }, 0, null);
-        mv.visitLabel(l0);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void arrayTypes(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "fullFrame",
-                "(Ljava/lang/String;[[Z[B[C[S[I[F[J[D[Ljava/lang/Object;)V",
-                null, null);
-        mv.visitCode();
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 11);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 13);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 15);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 17);
-        mv.visitVarInsn(ALOAD, 1);
-        Label l0 = new Label();
-        mv.visitJumpInsn(IFNONNULL, l0);
-        mv.visitInsn(RETURN);
-        mv.visitFrame(F_FULL, 15, new Object[] { "pkg/FrameTable",
-                "java/lang/String", "[[Z", "[B", "[C", "[S", "[I", "[F", "[J",
-                "[D", "[Ljava/lang/Object;", LONG, LONG, LONG, LONG }, 0,
-                new Object[] {});
-        mv.visitLabel(l0);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void mergeTypes(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "mergeTypes", "(Z)V",
-                null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "long",
-                "Ljava/lang/Long;");
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "number",
-                "Ljava/lang/Number;");
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "number",
-                "Ljava/lang/Long;");
-        mv.visitVarInsn(ASTORE, 4);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "comparable",
-                "Ljava/lang/Comparable;");
-        mv.visitVarInsn(ASTORE, 5);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 6);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "double",
-                "Ljava/lang/Double;");
-        mv.visitVarInsn(ASTORE, 7);
-        mv.visitInsn(ICONST_0);
-        mv.visitVarInsn(ISTORE, 8);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "intArray", "[I");
-        mv.visitVarInsn(ASTORE, 9);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "double",
-                "Ljava/lang/Double;");
-        mv.visitVarInsn(ASTORE, 10);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 11);
-
-        mv.visitFrame(F_FULL, 12,
-                new Object[] { "pkg/FrameTable", INTEGER, "java/lang/Number",
-                        "java/lang/Number", "java/lang/Number",
-                        "java/lang/Object", NULL, "java/lang/Double", TOP,
-                        "java/lang/Object", "java/lang/Object",
-                        "[Ljava/lang/Object;" }, 0, null);
-        mv.visitLabel(l0);
-        mv.visitVarInsn(ALOAD, 11);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitInsn(AASTORE);
-
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "double",
-                "Ljava/lang/Double;");
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "double",
-                "Ljava/lang/Double;");
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "number",
-                "Ljava/lang/Number;");
-        mv.visitVarInsn(ASTORE, 4);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "serializable",
-                "Ljava/io/Serializable;");
-        mv.visitVarInsn(ASTORE, 5);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 6);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 7);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 8);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "floatArray", "[F");
-        mv.visitVarInsn(ASTORE, 9);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "intArray", "[I");
-        mv.visitVarInsn(ASTORE, 10);
-        mv.visitInsn(ICONST_1);
-        mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
-        mv.visitVarInsn(ASTORE, 11);
-
-        mv.visitJumpInsn(GOTO, l0);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void mergeStackTypes(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "mergeStackTypes",
-                "(Z)V", null, null);
-        mv.visitCode();
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_1);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l0 = new Label();
-        mv.visitJumpInsn(IFEQ, l0);
-        mv.visitInsn(ICONST_0);
-        Label l1 = new Label();
-        mv.visitJumpInsn(GOTO, l1);
-        mv.visitFrame(F_FULL, 1, new Object[] { "pkg/FrameTable" }, 2,
-                new Object[] { INTEGER, INTEGER });
-        mv.visitLabel(l0);
-        mv.visitInsn(DUP);
-        mv.visitFrame(F_FULL, 1, new Object[] { "pkg/FrameTable" }, 3,
-                new Object[] { INTEGER, INTEGER, INTEGER });
-        mv.visitLabel(l1);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void mergeNullArray(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "mergeNullArray", "(Z)I",
-                null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ILOAD, 1);
-        Label l1 = new Label();
-        mv.visitJumpInsn(IFEQ, l1);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l2 = new Label();
-        mv.visitJumpInsn(IFEQ, l2);
-        mv.visitFieldInsn(GETSTATIC, "pkg/FrameTable", "longArray",
-                "[Ljava/lang/Long;");
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitFrame(F_APPEND, 1, new Object[] { "[Ljava/lang/Long;" }, 0,
-                null);
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ALOAD, 2);
-        Label l3 = new Label();
-        mv.visitJumpInsn(IFNULL, l3);
-        mv.visitVarInsn(ALOAD, 2);
-        mv.visitInsn(ARRAYLENGTH);
-        Label l4 = new Label();
-        mv.visitJumpInsn(IFNE, l4);
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        mv.visitLabel(l3);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 3);
-        Label l5 = new Label();
-        mv.visitJumpInsn(GOTO, l5);
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        mv.visitLabel(l4);
-        mv.visitVarInsn(ALOAD, 2);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(AALOAD);
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFNE, l5);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        mv.visitLabel(l5);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(IRETURN);
-        mv.visitFrame(F_CHOP, 1, null, 0, null);
-        mv.visitLabel(l1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(IRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void appendAndChopFrame(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "appendAndChopFrame",
-                "(I)V", null, null);
-        mv.visitCode();
-        mv.visitInsn(ICONST_0);
-        mv.visitVarInsn(ISTORE, 2);
-        mv.visitFrame(F_APPEND, 1, new Object[] { INTEGER }, 0, null);
-        Label l0 = new Label();
-        mv.visitLabel(l0);
-        mv.visitVarInsn(ILOAD, 2);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l1 = new Label();
-        mv.visitJumpInsn(IF_ICMPGE, l1);
-        mv.visitIincInsn(2, 1);
-        mv.visitJumpInsn(GOTO, l0);
-        mv.visitFrame(F_CHOP, 1, null, 0, null);
-        mv.visitLabel(l1);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void sameLocals1stackItemFrame(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
-                "sameLocals1stackItemFrame", "()I", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l0, null);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IRETURN);
-        mv.visitFrame(F_SAME1, 0, null, 1,
-                new Object[] { "java/lang/Throwable" });
-        mv.visitLabel(l0);
-        mv.visitVarInsn(ASTORE, 1);
-        mv.visitLabel(l1);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void sameLocals1stackItemFrame2(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
-                "sameLocals1stackItemFrame2", "()V", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception");
-        Label l3 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l3, null);
-        Label l4 = new Label();
-        mv.visitTryCatchBlock(l2, l4, l3, null);
-        Label l5 = new Label();
-        mv.visitTryCatchBlock(l3, l5, l3, null);
-        mv.visitLabel(l0);
-        mv.visitTypeInsn(NEW, "java/lang/Object");
-        mv.visitInsn(DUP);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitVarInsn(ASTORE, 1);
-        mv.visitLabel(l1);
-        Label l6 = new Label();
-        mv.visitJumpInsn(GOTO, l6);
-        mv.visitFrame(F_SAME1, 0, null, 1,
-                new Object[] { "java/lang/Exception" });
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitLabel(l4);
-        mv.visitJumpInsn(GOTO, l6);
-        mv.visitFrame(F_SAME1, 0, null, 1,
-                new Object[] { "java/lang/Throwable" });
-        mv.visitLabel(l3);
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitLabel(l5);
-        mv.visitVarInsn(ALOAD, 3);
-        mv.visitInsn(ATHROW);
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        mv.visitLabel(l6);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void sameLocals1stackItemFrameExtended(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
-                "sameLocals1stackItemFrameExtended", "()I", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l2, null);
-        Label l3 = new Label();
-        mv.visitTryCatchBlock(l2, l3, l2, null);
-        mv.visitLabel(l0);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 1);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 3);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 5);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 7);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 9);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 11);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 13);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 15);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 17);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 19);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 21);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 23);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 25);
-        mv.visitLabel(l1);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IRETURN);
-        mv.visitFrame(F_SAME1, 0, null, 1,
-                new Object[] { "java/lang/Throwable" });
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ASTORE, 27);
-        mv.visitLabel(l3);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void sameFrameExtended(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "sameFrameExtended",
-                "(Z)V", null, null);
-        mv.visitCode();
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        Label l0 = new Label();
-        mv.visitLabel(l0);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 2);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 4);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 6);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 8);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 10);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 12);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 14);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 16);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 18);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 20);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 22);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 24);
-        mv.visitLdcInsn(new Long(11L));
-        mv.visitVarInsn(LSTORE, 26);
-        mv.visitVarInsn(ILOAD, 1);
-        Label l1 = new Label();
-        mv.visitJumpInsn(IFEQ, l1);
-        mv.visitInsn(RETURN);
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        mv.visitLabel(l1);
-        mv.visitJumpInsn(GOTO, l0);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void deadCode(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "deadCode", "(Z)V", null,
-                null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        Label l3 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l1, "java/lang/Exception");
-        mv.visitTryCatchBlock(l2, l3, l3, "java/lang/Exception");
-        mv.visitJumpInsn(GOTO, l2);
-        mv.visitFrame(F_SAME, 0, null, 0, null);
-        mv.visitLabel(l0);
-        mv.visitInsn(RETURN);
-        mv.visitFrame(F_SAME1, 0, null, 1,
-                new Object[] { "java/lang/Exception" });
-        mv.visitLabel(l1);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitInsn(RETURN);
-        mv.visitFrame(F_FULL, 0, new Object[] { "pkg/FrameTable", INTEGER }, 0,
-                null);
-        mv.visitLabel(l2);
-        mv.visitInsn(RETURN);
-        mv.visitFrame(F_SAME1, 0, null, 1,
-                new Object[] { "java/lang/Exception" });
-        mv.visitLabel(l3);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    /**
-     * Ad hoc class adapter used to rename the FrameTable class and to change
-     * its class version.
-     * 
-     * @author Eric Bruneton
-     */
-    static class RenameAdapter extends ClassVisitor {
-
-        public RenameAdapter(final ClassVisitor cv) {
-            super(Opcodes.ASM4, cv);
-        }
-
-        @Override
-        public void visit(final int version, final int access,
-                final String name, final String signature,
-                final String superName, final String[] interfaces) {
-            super.visit(V1_5, access, "pkg/FrameMap", signature, superName,
-                    interfaces);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                final String desc, final String signature,
-                final String[] exceptions) {
-            return new MethodVisitor(Opcodes.ASM4, super.visitMethod(access,
-                    name, desc, signature, exceptions)) {
-                @Override
-                public void visitFrame(final int type, final int nLocal,
-                        final Object[] local, final int nStack,
-                        final Object[] stack) {
-                    Object[] clocal = new Object[local.length];
-                    for (int i = 0; i < clocal.length; ++i) {
-                        clocal[i] = local[i];
-                        if ("pkg/FrameTable".equals(clocal[i])) {
-                            clocal[i] = "pkg/FrameMap";
-                        }
-                    }
-                    Object[] cstack = new Object[stack.length];
-                    for (int i = 0; i < cstack.length; ++i) {
-                        cstack[i] = stack[i];
-                        if ("pkg/FrameTable".equals(cstack[i])) {
-                            cstack[i] = "pkg/FrameMap";
-                        }
-                    }
-                    super.visitFrame(type, nLocal, clocal, nStack, cstack);
-                }
-
-                @Override
-                public void visitTypeInsn(final int opcode, final String desc) {
-                    if (desc.equals("pkg/FrameTable")) {
-                        super.visitTypeInsn(opcode, "pkg/FrameMap");
-                    } else {
-                        super.visitTypeInsn(opcode, desc);
-                    }
-                }
-
-                @Override
-                public void visitMethodInsn(final int opcode,
-                        final String owner, final String name, final String desc) {
-                    if (owner.equals("pkg/FrameTable")) {
-                        super.visitMethodInsn(opcode, "pkg/FrameMap", name,
-                                desc);
-                    } else {
-                        super.visitMethodInsn(opcode, owner, name, desc);
-                    }
-                }
-            };
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Generator.java b/asm4/test/conform/org/objectweb/asm/test/cases/Generator.java
deleted file mode 100644
index 133b522..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Generator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.objectweb.asm.Opcodes;
-
-/**
- * Generates classes designed so that the "conform" test suite, applied to these
- * classes, covers all the ASM code base.
- * 
- * @author Eric Bruneton
- */
-public class Generator implements Opcodes {
-
-    public static void main(final String[] args) throws IOException {
-        Generator generators[] = { new Annotation(), new Attribute(),
-                new Debug(), new Enum(), new Frames(), new Insns(),
-                new Interface(), new Invalid(), new JSR(), new Outer(),
-                new Wide(), new InvokeDynamic() };
-        for (int i = 0; i < generators.length; ++i) {
-            generators[i].generate(args[0]);
-        }
-    }
-
-    protected void generate(final String dir) throws IOException {
-    }
-
-    protected void generate(final String dir, final String path,
-            final byte[] clazz) throws IOException {
-        File f = new File(new File(dir), path);
-        if (!f.getParentFile().exists() && !f.getParentFile().mkdirs()) {
-            throw new IOException("Cannot create directory "
-                    + f.getParentFile());
-        }
-        FileOutputStream o = new FileOutputStream(f);
-        o.write(clazz);
-        o.close();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Insns.java b/asm4/test/conform/org/objectweb/asm/test/cases/Insns.java
deleted file mode 100644
index bfd0899..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Insns.java
+++ /dev/null
@@ -1,750 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Type;
-
-/**
- * Generates a class that contain all bytecode instruction types (except JSR and
- * RET). Also covers access flags, signatures, and unicode characters.
- * 
- * @author Eric Bruneton
- */
-public class Insns extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Insns.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-
-        cw.visit(
-                V1_5,
-                ACC_PUBLIC + ACC_SUPER,
-                "pkg/Insns",
-                "<E:Ljava/lang/Object;F:Ljava/lang/Exception;>Ljava/util/ArrayList<Ljava/lang/String;>;LInterface<TE;>;",
-                "java/util/ArrayList", new String[] { "Interface" });
-
-        fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "z", "Z", null,
-                new Integer(1));
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_PROTECTED, "b", "B", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_PUBLIC, "c", "C", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_STATIC, "s", "S", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_PRIVATE + ACC_TRANSIENT, "i", "I", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(ACC_PRIVATE + ACC_VOLATILE, "l", "J", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(0, "f", "F", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(0, "d", "D", null, null);
-        fv.visitEnd();
-
-        fv = cw.visitField(0, "str", "Ljava/lang/String;", null, "");
-        fv.visitEnd();
-
-        fv = cw.visitField(0, "e", "Ljava/lang/Object;", "TE;", null);
-        fv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/util/ArrayList", "<init>",
-                "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC + ACC_SYNCHRONIZED, "m",
-                "(ZBCSIFJDLjava/lang/Object;)Ljava/lang/Object;",
-                "(ZBCSIFJDTE;)TE;", null);
-        mv.visitCode();
-        mv.visitInsn(ACONST_NULL);
-        mv.visitInsn(ARETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        // instruction types
-        constInsns(cw);
-        varInsns(cw);
-        arrayInsns(cw);
-        stackInsns(cw);
-        mathInsns(cw);
-        castInsns(cw);
-        jumpInsns(cw);
-        returnInsns(cw);
-        fieldInsns(cw);
-        methodInsns(cw);
-        monitorInsns(cw);
-
-        // various method types not covered by other test cases
-        varargMethod(cw);
-        bridgeMethod(cw);
-        nativeMethod(cw);
-        clinitMethod(cw);
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    private void constInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "constInsns", "()V",
-                null, null);
-        mv.visitInsn(NOP);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitInsn(ICONST_M1);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_1);
-        mv.visitInsn(ICONST_2);
-        mv.visitInsn(ICONST_3);
-        mv.visitInsn(ICONST_4);
-        mv.visitInsn(ICONST_5);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(LCONST_1);
-        mv.visitInsn(FCONST_0);
-        mv.visitInsn(FCONST_1);
-        mv.visitInsn(FCONST_2);
-        mv.visitInsn(DCONST_0);
-        mv.visitInsn(DCONST_1);
-        mv.visitIntInsn(BIPUSH, 16);
-        mv.visitIntInsn(SIPUSH, 256);
-        mv.visitLdcInsn(new Integer(65536));
-        mv.visitLdcInsn(new Long(128L));
-        mv.visitLdcInsn(new Float("128.0"));
-        mv.visitLdcInsn(new Double("128.0"));
-        mv.visitLdcInsn("\n\r\u0009\"\\");
-        mv.visitLdcInsn("\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u1111\u0111\u0011\u0001");
-        mv.visitLdcInsn(Type.getType("Ljava/lang/Object;"));
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void varInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "varInsns", "(IJFDD)V",
-                null, null);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(IINC, 1);
-        mv.visitVarInsn(ISTORE, 1);
-        mv.visitVarInsn(LLOAD, 2);
-        mv.visitVarInsn(LSTORE, 2);
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitVarInsn(FSTORE, 4);
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitVarInsn(DSTORE, 5);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ASTORE, 0);
-        mv.visitInsn(ICONST_0);
-        mv.visitVarInsn(ISTORE, 3);
-        mv.visitInsn(LCONST_0);
-        mv.visitVarInsn(LSTORE, 6);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void arrayInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "arrayInsns", "()V",
-                null, null);
-        // boolean arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_BOOLEAN);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(BASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(BALOAD);
-        // byte arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_BYTE);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(BASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(BALOAD);
-        // char arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_CHAR);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(CASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(CALOAD);
-        // short arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_SHORT);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(SASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(SALOAD);
-        // int arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_INT);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IALOAD);
-        // long arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_LONG);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(LASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(LALOAD);
-        // float arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_FLOAT);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(FCONST_0);
-        mv.visitInsn(FASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(FALOAD);
-        // double arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitIntInsn(NEWARRAY, T_DOUBLE);
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DCONST_0);
-        mv.visitInsn(DASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DALOAD);
-        // object arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
-        mv.visitInsn(DUP);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitInsn(AASTORE);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(AALOAD);
-        // multi dimensional arrays
-        mv.visitInsn(ICONST_1);
-        mv.visitTypeInsn(ANEWARRAY, "[I");
-        mv.visitInsn(ICONST_1);
-        mv.visitInsn(ICONST_2);
-        mv.visitInsn(ICONST_3);
-        mv.visitMultiANewArrayInsn("[[[I", 3);
-        // array length
-        mv.visitInsn(ARRAYLENGTH);
-        // end method
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void stackInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "stackInsns", "()V",
-                null, null);
-        // pop
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(POP);
-        // pop2 (two variants)
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(POP2);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(POP2);
-        // dup
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP);
-        // dup_x1
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP_X1);
-        // dup_x2 (two variants)
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP_X2);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP_X2);
-        // dup2 (two variants)
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP2);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(DUP2);
-        // dup2_x1 (two variants)
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP2_X1);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(DUP2_X1);
-        // dup2_x2 (four variants)
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP2_X2);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(DUP2_X2);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(DUP2_X2);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(DUP2_X2);
-        // swap
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(ICONST_1);
-        mv.visitInsn(SWAP);
-        // end method
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void mathInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "mathInsns", "(IJFD)V",
-                null, null);
-        // int math insns
-        for (int i = 0; i < 12; ++i) {
-            mv.visitVarInsn(ILOAD, 1);
-        }
-        mv.visitInsn(IADD);
-        mv.visitInsn(ISUB);
-        mv.visitInsn(IMUL);
-        mv.visitInsn(IDIV);
-        mv.visitInsn(IREM);
-        mv.visitInsn(INEG);
-        mv.visitInsn(ISHL);
-        mv.visitInsn(ISHR);
-        mv.visitInsn(IUSHR);
-        mv.visitInsn(IAND);
-        mv.visitInsn(IOR);
-        mv.visitInsn(IXOR);
-        // long math insns
-        for (int i = 0; i < 9; ++i) {
-            mv.visitVarInsn(LLOAD, 2);
-        }
-        mv.visitInsn(LADD);
-        mv.visitInsn(LSUB);
-        mv.visitInsn(LMUL);
-        mv.visitInsn(LDIV);
-        mv.visitInsn(LREM);
-        mv.visitInsn(LNEG);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(LSHL);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(LSHR);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(LUSHR);
-        mv.visitInsn(LAND);
-        mv.visitInsn(LOR);
-        mv.visitInsn(LXOR);
-        // float math insns
-        for (int i = 0; i < 6; ++i) {
-            mv.visitVarInsn(FLOAD, 4);
-        }
-        mv.visitInsn(FADD);
-        mv.visitInsn(FSUB);
-        mv.visitInsn(FMUL);
-        mv.visitInsn(FDIV);
-        mv.visitInsn(FREM);
-        mv.visitInsn(FNEG);
-        // double math insns
-        for (int i = 0; i < 6; ++i) {
-            mv.visitVarInsn(DLOAD, 5);
-        }
-        mv.visitInsn(DADD);
-        mv.visitInsn(DSUB);
-        mv.visitInsn(DMUL);
-        mv.visitInsn(DDIV);
-        mv.visitInsn(DREM);
-        mv.visitInsn(DNEG);
-        // end method
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void castInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "castInsns", "(IJFD)V",
-                null, null);
-        // I2x
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(I2L);
-        mv.visitVarInsn(LSTORE, 2);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(I2F);
-        mv.visitVarInsn(FSTORE, 4);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(I2D);
-        mv.visitVarInsn(DSTORE, 5);
-        // L2x
-        mv.visitVarInsn(LLOAD, 2);
-        mv.visitInsn(L2I);
-        mv.visitVarInsn(ISTORE, 1);
-        mv.visitVarInsn(LLOAD, 2);
-        mv.visitInsn(L2F);
-        mv.visitVarInsn(FSTORE, 4);
-        mv.visitVarInsn(LLOAD, 2);
-        mv.visitInsn(L2D);
-        mv.visitVarInsn(DSTORE, 5);
-        // F2x
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitInsn(F2I);
-        mv.visitVarInsn(ISTORE, 1);
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitInsn(F2L);
-        mv.visitVarInsn(LSTORE, 2);
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitInsn(F2D);
-        mv.visitVarInsn(DSTORE, 5);
-        // D2x
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitInsn(D2I);
-        mv.visitVarInsn(ISTORE, 1);
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitInsn(D2L);
-        mv.visitVarInsn(LSTORE, 2);
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitInsn(D2F);
-        mv.visitVarInsn(FSTORE, 4);
-        // I2B
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(I2B);
-        mv.visitFieldInsn(PUTFIELD, "pkg/Insns", "b", "B");
-        // I2C
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(I2C);
-        mv.visitFieldInsn(PUTFIELD, "pkg/Insns", "c", "C");
-        // I2S
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(I2S);
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Insns", "s", "S");
-        // checkcast
-        mv.visitInsn(ACONST_NULL);
-        mv.visitTypeInsn(CHECKCAST, "java/lang/String");
-        mv.visitInsn(ACONST_NULL);
-        mv.visitTypeInsn(CHECKCAST, "[[I");
-        // instanceof
-        mv.visitInsn(ACONST_NULL);
-        mv.visitTypeInsn(INSTANCEOF, "java/lang/String");
-        // end method
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void jumpInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "jumpInsns", "(IJFD)V",
-                null, null);
-        Label l0 = new Label();
-        // ifxx
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFNE, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFEQ, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFLE, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFGE, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFLT, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IFGT, l0);
-        // ificmpxx
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IF_ICMPNE, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IF_ICMPEQ, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IF_ICMPLE, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IF_ICMPGE, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IF_ICMPLT, l0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitJumpInsn(IF_ICMPGT, l0);
-        // lcmp
-        mv.visitVarInsn(LLOAD, 2);
-        mv.visitVarInsn(LLOAD, 2);
-        mv.visitInsn(LCMP);
-        mv.visitJumpInsn(IFNE, l0);
-        // fcmpx
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitInsn(FCMPL);
-        mv.visitJumpInsn(IFNE, l0);
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitVarInsn(FLOAD, 4);
-        mv.visitInsn(FCMPG);
-        mv.visitJumpInsn(IFNE, l0);
-        // dcmpx
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitInsn(DCMPL);
-        mv.visitJumpInsn(IFNE, l0);
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitVarInsn(DLOAD, 5);
-        mv.visitInsn(DCMPG);
-        mv.visitJumpInsn(IFNE, l0);
-        // ifacmp
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitJumpInsn(IF_ACMPNE, l0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitJumpInsn(IF_ACMPEQ, l0);
-        // ifnull
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitJumpInsn(IFNULL, l0);
-        mv.visitInsn(ICONST_0);
-        mv.visitVarInsn(ISTORE, 7);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitJumpInsn(IFNONNULL, l0);
-        mv.visitInsn(ICONST_0);
-        mv.visitVarInsn(ISTORE, 7);
-        mv.visitVarInsn(ALOAD, 0);
-        // tableswitch
-        Label l1 = new Label();
-        Label l2 = new Label();
-        Label l3 = new Label();
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitTableSwitchInsn(0, 2, l3/* default */, l1, l2, l3);
-        mv.visitLabel(l1);
-        mv.visitInsn(ICONST_1);
-        mv.visitVarInsn(ISTORE, 7);
-        mv.visitJumpInsn(GOTO, l3);
-        mv.visitLabel(l2);
-        mv.visitInsn(ICONST_2);
-        mv.visitVarInsn(ISTORE, 7);
-        mv.visitJumpInsn(GOTO, l3);
-        mv.visitLabel(l3);
-        mv.visitVarInsn(ILOAD, 7);
-        // lookupswitch
-        Label l4 = new Label();
-        Label l5 = new Label();
-        Label l6 = new Label();
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitLookupSwitchInsn(l6, new int[] { 0, 1, 2 }, new Label[] { l4,
-                l5, l6 });
-        mv.visitLabel(l4);
-        mv.visitInsn(ICONST_1);
-        mv.visitVarInsn(ISTORE, 7);
-        mv.visitJumpInsn(GOTO, l6);
-        mv.visitLabel(l5);
-        mv.visitInsn(ICONST_2);
-        mv.visitVarInsn(ISTORE, 7);
-        mv.visitJumpInsn(GOTO, l6);
-        mv.visitLabel(l6);
-        mv.visitVarInsn(ILOAD, 7);
-        // throw
-        mv.visitInsn(ACONST_NULL);
-        mv.visitInsn(ATHROW);
-        // misc instructions to cover code in MethodWriter.resizeInsns
-        mv.visitLabel(l0);
-        mv.visitInsn(ICONST_1);
-        mv.visitInsn(ICONST_2);
-        mv.visitMultiANewArrayInsn("[[I", 2);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()V");
-        // end method
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void returnInsns(final ClassWriter cw) {
-        MethodVisitor mv;
-        mv = cw.visitMethod(ACC_STATIC, "ireturnInsn", "()I", null, null);
-        mv.visitCode();
-        mv.visitInsn(ICONST_0);
-        mv.visitInsn(IRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        mv = cw.visitMethod(ACC_PRIVATE, "lreturnInsn", "()J", null, null);
-        mv.visitCode();
-        mv.visitInsn(LCONST_0);
-        mv.visitInsn(LRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        mv = cw.visitMethod(0, "freturnInsn", "()F", null, null);
-        mv.visitCode();
-        mv.visitInsn(FCONST_0);
-        mv.visitInsn(FRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        mv = cw.visitMethod(0, "dreturnInsn", "()D", null, null);
-        mv.visitCode();
-        mv.visitInsn(DCONST_0);
-        mv.visitInsn(DRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void fieldInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "fieldInsns", "()V",
-                null, null);
-        mv.visitFieldInsn(GETSTATIC, "pkg/Insns", "s", "S");
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Insns", "s", "S");
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitFieldInsn(GETFIELD, "pkg/Insns", "i", "I");
-        mv.visitFieldInsn(PUTFIELD, "pkg/Insns", "i", "I");
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitFieldInsn(GETFIELD, "pkg/Insns", "l", "J");
-        mv.visitFieldInsn(PUTFIELD, "pkg/Insns", "l", "J");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void methodInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "methodInsns", "()V",
-                null, null);
-        // invokstatic
-        mv.visitMethodInsn(INVOKESTATIC, "pkg/Insns", "ireturn", "()I");
-        // invokespecial
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/Insns", "lreturn", "()J");
-        // invokevirtual
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKEVIRTUAL, "pkg/Insns", "freturn", "()F");
-        // invokeinterface
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void monitorInsns(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "monitorInsns", "()V",
-                null, null);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitInsn(MONITORENTER);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitInsn(MONITOREXIT);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void varargMethod(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(
-                ACC_PUBLIC + ACC_VARARGS + ACC_STRICT, "varargMethod",
-                "([Ljava/lang/Object;)V", "([Ljava/lang/Object;)V^TF;",
-                new String[] { "java/lang/Exception" });
-        mv.visitCode();
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void bridgeMethod(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "get",
-                "(I)Ljava/lang/String;", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/util/ArrayList", "get",
-                "(I)Ljava/lang/Object;");
-        mv.visitTypeInsn(CHECKCAST, "java/lang/String");
-        mv.visitInsn(ARETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "get",
-                "(I)Ljava/lang/Object;", "(I)TE;", null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitMethodInsn(INVOKEVIRTUAL, "pkg/Insns", "get",
-                "(I)Ljava/lang/String;");
-        mv.visitInsn(ARETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private void nativeMethod(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_NATIVE,
-                "nativeMethod", "()V", null, null);
-        mv.visitEnd();
-    }
-
-    private void clinitMethod(final ClassWriter cw) {
-        MethodVisitor mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null,
-                null);
-        mv.visitCode();
-        mv.visitInsn(ICONST_1);
-        mv.visitFieldInsn(PUTSTATIC, "pkg/Insns", "s", "S");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Interface.java b/asm4/test/conform/org/objectweb/asm/test/cases/Interface.java
deleted file mode 100644
index d44de36..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Interface.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Generates an interface class. Also covers signatures, default package and non
- * null minor class version number.
- * 
- * @author Eric Bruneton
- */
-public class Interface extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "Interface.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-
-        cw.visit(1 << 16 | V1_5, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE,
-                "Interface", "<E:Ljava/lang/Object;>Ljava/lang/Object;",
-                "java/lang/Object", null);
-
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "m",
-                "(ZBCSIFJDLjava/lang/Object;)Ljava/lang/Object;",
-                "(ZBCSIFJDTE;)TE;", null);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Invalid.java b/asm4/test/conform/org/objectweb/asm/test/cases/Invalid.java
deleted file mode 100644
index 7f32cea..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Invalid.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Generates a class with missing stack frames (to check that the new JDK7
- * verifier is triggered, without fallback to the old verifier).
- * 
- * @author Eric Bruneton
- */
-public class Invalid extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "invalid/Invalid.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(0);
-        MethodVisitor mv;
-
-        cw.visit(V1_7, ACC_PUBLIC, "invalid/Invalid", null, "java/lang/Object",
-                null);
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitVarInsn(ALOAD, 0);
-        Label ifnull = new Label();
-        Label endif = new Label();
-        mv.visitJumpInsn(IFNULL, ifnull);
-        mv.visitInsn(ICONST_0);
-        mv.visitJumpInsn(GOTO, endif);
-        mv.visitLabel(ifnull);
-        mv.visitInsn(FCONST_0);
-        mv.visitLabel(endif);
-        mv.visitVarInsn(ISTORE, 0);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(1, 1);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/InvokeDynamic.java b/asm4/test/conform/org/objectweb/asm/test/cases/InvokeDynamic.java
deleted file mode 100644
index 39ced1f..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/InvokeDynamic.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/***

- * ASM tests

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * 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.

- */

-package org.objectweb.asm.test.cases;

-

-import java.io.IOException;

-

-import org.objectweb.asm.ClassWriter;

-import org.objectweb.asm.Handle;

-import org.objectweb.asm.MethodVisitor;

-import org.objectweb.asm.Type;

-

-/**

- * Generates a class using the invokedynamic instruction. Also covers method

- * types and method handles.

- * 

- * @author Eric Bruneton

- */

-public class InvokeDynamic extends Generator {

-

-    @Override

-    public void generate(final String dir) throws IOException {

-        generate(dir, "pkg/InvokeDynamic.class", dump());

-    }

-

-    public byte[] dump() {

-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);

-        MethodVisitor mv;

-

-        cw.visit(V1_7, ACC_PUBLIC, "pkg/InvokeDynamic", null,

-                "java/lang/Object", null);

-

-        mv = cw.visitMethod(ACC_PUBLIC, "foo", "()V", null, null);

-        mv.visitCode();

-        Handle h = new Handle(

-                H_INVOKESTATIC,

-                "C",

-                "bsm1",

-                "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;");

-        mv.visitInvokeDynamicInsn("bar1", "()V", h, Type.getType("()V"));

-        h = new Handle(

-                H_INVOKESTATIC,

-                "C",

-                "bsm2",

-                "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;");

-        mv.visitInvokeDynamicInsn("bar2", "()V", h, Type.getType("()V"), h);

-        mv.visitInsn(RETURN);

-        mv.visitEnd();

-

-        cw.visitEnd();

-        return cw.toByteArray();

-    }

-}

diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/JSR.java b/asm4/test/conform/org/objectweb/asm/test/cases/JSR.java
deleted file mode 100644
index 6bac970..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/JSR.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Generates classes with JSR/RET instructions. Covers forward and backward JSR
- * and JSR_W instructions. Also covers the wide form of IFNULL instruction, and
- * the V1_1 class version (these jump instructions are not directly generated in
- * their 'wide' form, but are transformed to this form by the method resizing
- * test).
- * 
- * @author Eric Bruneton
- * 
- */
-public class JSR extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/JSR1.class", dumpForwardJSR());
-        generate(dir, "pkg/JSR2.class", dumpBackwardJSR());
-    }
-
-    public byte[] dumpForwardJSR() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        MethodVisitor mv;
-
-        cw.visit(V1_1, ACC_PUBLIC, "pkg/JSR1", null, "java/lang/Object", null);
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "forwardJSR", "([I)V", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        Label l3 = new Label();
-        Label l4 = new Label();
-        Label l5 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l2, null);
-        mv.visitTryCatchBlock(l2, l3, l2, null);
-        mv.visitLabel(l0);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 1);
-        mv.visitMethodInsn(INVOKEVIRTUAL, "pkg/JSR1", "forwardJSR", "([I)V");
-        mv.visitJumpInsn(JSR, l4); // forward JSR, will give forward JSR_W
-
-        // many NOPs will be introduced here by the method resizing test
-
-        mv.visitLabel(l1);
-        mv.visitJumpInsn(GOTO, l5);
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitJumpInsn(JSR, l4);
-        mv.visitLabel(l3);
-        mv.visitVarInsn(ALOAD, 2);
-        mv.visitInsn(ATHROW);
-        mv.visitLabel(l4);
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitInsn(DCONST_0);
-        mv.visitVarInsn(DSTORE, 4);
-        mv.visitVarInsn(RET, 3);
-        mv.visitLabel(l5);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    public byte[] dumpBackwardJSR() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        MethodVisitor mv;
-
-        cw.visit(V1_1, ACC_PUBLIC, "pkg/JSR2", null, "java/lang/Object", null);
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "backwardJSR", "([I)V", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        Label l3 = new Label();
-        Label l4 = new Label();
-        Label l5 = new Label();
-        Label l6 = new Label();
-        mv.visitTryCatchBlock(l0, l1, l2, null);
-        mv.visitTryCatchBlock(l2, l3, l2, null);
-        mv.visitInsn(ICONST_0);
-        mv.visitVarInsn(ISTORE, 4);
-        mv.visitJumpInsn(GOTO, l0);
-        mv.visitLabel(l4);
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitIincInsn(4, 1);
-        mv.visitVarInsn(RET, 3);
-
-        /* extra instructions only used to trigger method resizing */
-        mv.visitLabel(l0);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitJumpInsn(IFNULL, l6); // will give wide IFNULL
-        // many NOPs will be introduced here by the method resizing test
-        mv.visitJumpInsn(GOTO, l6);
-        mv.visitLabel(l6);
-
-        mv.visitJumpInsn(JSR, l4); // backward JSR, will give JSR_W
-        mv.visitLabel(l1);
-        mv.visitJumpInsn(GOTO, l5);
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitJumpInsn(JSR, l4);
-        mv.visitLabel(l3);
-        mv.visitVarInsn(ALOAD, 2);
-        mv.visitInsn(ATHROW);
-        mv.visitLabel(l5);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Outer.java b/asm4/test/conform/org/objectweb/asm/test/cases/Outer.java
deleted file mode 100644
index 2d1437f..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Outer.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Generates a class with two inner classes. Covers all features used by inner
- * classes (visitInner, visitOuter, synthetic members, etc). Also covers the
- * V1_4 class version and the DEPRECATED access flag.
- * 
- * @author Eric Bruneton
- */
-public class Outer extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Outer.class", dump());
-        generate(dir, "pkg/Outer$1.class", dump1());
-        generate(dir, "pkg/Outer$Inner.class", dumpInner());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-
-        cw.visit(V1_4, ACC_PUBLIC + ACC_SUPER + ACC_DEPRECATED, "pkg/Outer",
-                null, "java/lang/Object", null);
-
-        cw.visitInnerClass("pkg/Outer$Inner", "pkg/Outer", "C", 0);
-        cw.visitInnerClass("pkg/Outer$1", null, null, 0);
-
-        fv = cw.visitField(ACC_PRIVATE + ACC_DEPRECATED, "i", "I", null, null);
-        fv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_DEPRECATED, "m", "()V", null, null);
-        mv.visitCode();
-        mv.visitTypeInsn(NEW, "pkg/Outer$1");
-        mv.visitInsn(DUP);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/Outer$1", "<init>",
-                "(Lpkg/Outer;)V");
-        mv.visitInsn(POP);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_STATIC + ACC_SYNTHETIC, "access$000",
-                "(Lpkg/Outer;)I", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitFieldInsn(GETFIELD, "pkg/Outer", "i", "I");
-        mv.visitInsn(IRETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    public static byte[] dump1() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-
-        cw.visit(V1_4, ACC_SUPER, "pkg/Outer$1", null, "pkg/Outer", null);
-
-        cw.visitOuterClass("pkg/Outer", "m", "()V");
-        cw.visitInnerClass("pkg/Outer$1", null, null, 0);
-
-        fv = cw.visitField(ACC_FINAL + ACC_SYNTHETIC, "this$0", "Lpkg/Outer;",
-                null, null);
-        fv.visitEnd();
-
-        mv = cw.visitMethod(0, "<init>", "(Lpkg/Outer;)V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 1);
-        mv.visitFieldInsn(PUTFIELD, "pkg/Outer$1", "this$0", "Lpkg/Outer;");
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "pkg/Outer", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;",
-                null, null);
-        mv.visitCode();
-        mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
-        mv.visitInsn(DUP);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>",
-                "()V");
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitFieldInsn(GETFIELD, "pkg/Outer$1", "this$0", "Lpkg/Outer;");
-        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
-                "(Ljava/lang/Object;)Ljava/lang/StringBuilder;");
-        mv.visitLdcInsn(" ");
-        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
-                "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitFieldInsn(GETFIELD, "pkg/Outer$1", "this$0", "Lpkg/Outer;");
-        mv.visitMethodInsn(INVOKESTATIC, "pkg/Outer", "access$000",
-                "(Lpkg/Outer;)I");
-        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
-                "(I)Ljava/lang/StringBuilder;");
-        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder",
-                "toString", "()Ljava/lang/String;");
-        mv.visitInsn(ARETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    public static byte[] dumpInner() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        FieldVisitor fv;
-        MethodVisitor mv;
-
-        cw.visit(V1_4, ACC_SUPER, "pkg/Outer$Inner", null, "java/lang/Object",
-                null);
-
-        cw.visitInnerClass("pkg/Outer$Inner", "pkg/Outer", "C", 0);
-
-        fv = cw.visitField(ACC_FINAL + ACC_SYNTHETIC, "this$0", "Lpkg/Outer;",
-                null, null);
-        fv.visitEnd();
-
-        mv = cw.visitMethod(0, "<init>", "(Lpkg/Outer;)V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ALOAD, 1);
-        mv.visitFieldInsn(PUTFIELD, "pkg/Outer$Inner", "this$0", "Lpkg/Outer;");
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/test/cases/Wide.java b/asm4/test/conform/org/objectweb/asm/test/cases/Wide.java
deleted file mode 100644
index 1fb0b91..0000000
--- a/asm4/test/conform/org/objectweb/asm/test/cases/Wide.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.test.cases;
-
-import java.io.IOException;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Generates a class which uses a lot of locals and constant pool values. Covers
- * the 'wide' form of instructions that have one (xLOAD and xSTORE, LDC, IINC,
- * GOTO and IF instructions - these jump instructions are not directly generated
- * in their 'wide' form, but are transformed to this form by the method resizing
- * test). Also covers the V1_2 class version.
- * 
- * @author Eric Bruneton
- */
-public class Wide extends Generator {
-
-    @Override
-    public void generate(final String dir) throws IOException {
-        generate(dir, "pkg/Wide.class", dump());
-    }
-
-    public byte[] dump() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        MethodVisitor mv;
-
-        cw.visit(V1_2, ACC_PUBLIC, "pkg/Wide", null, "java/lang/Object", null);
-
-        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        for (int i = 0; i < 256; ++i) {
-            mv.visitLdcInsn(Integer.toString(i)); // wide form
-            mv.visitInsn(POP);
-        }
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        mv = cw.visitMethod(ACC_PUBLIC, "wideLocals", "(I)I", null, null);
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        mv.visitJumpInsn(GOTO, l1); // will give GOTO_W
-
-        mv.visitLabel(l0);
-        mv.visitIincInsn(300, 1); // covers 'update maxlocals' in MethodWriter
-        mv.visitVarInsn(ILOAD, 300); // will give wide form
-        mv.visitJumpInsn(IFEQ, l1); // will give long forward jump
-
-        // many NOPs will be introduced here by the method resizing test
-
-        mv.visitVarInsn(ILOAD, 300); // will give wide form
-        mv.visitInsn(IRETURN);
-
-        mv.visitLabel(l1);
-        for (int i = 1; i < 300; ++i) {
-            mv.visitVarInsn(ILOAD, i);
-            if (i <= 5) {
-                mv.visitInsn(ICONST_0 + i);
-            } else if (i <= Byte.MAX_VALUE) {
-                mv.visitIntInsn(BIPUSH, i);
-            } else {
-                mv.visitIntInsn(SIPUSH, i);
-            }
-            mv.visitInsn(IADD);
-            mv.visitVarInsn(ISTORE, i + 1);
-        }
-        mv.visitInsn(ICONST_0);
-        mv.visitJumpInsn(IFEQ, l0); // will give long backward jump
-        mv.visitJumpInsn(GOTO, l0); // will give long backward goto
-
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/ClassNodeTest.java b/asm4/test/conform/org/objectweb/asm/tree/ClassNodeTest.java
deleted file mode 100644
index 3eab6e3..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/ClassNodeTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * ClassNode tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassNodeTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new ClassNodeTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, 0);
-        // clone instructions for testing clone methods
-        for (int i = 0; i < cn.methods.size(); ++i) {
-            MethodNode mn = cn.methods.get(i);
-            Iterator<AbstractInsnNode> it = mn.instructions.iterator();
-            Map<LabelNode, LabelNode> m = new HashMap<LabelNode, LabelNode>() {
-                @Override
-                public LabelNode get(final Object o) {
-                    return (LabelNode) o;
-                }
-            };
-            while (it.hasNext()) {
-                AbstractInsnNode insn = it.next();
-                mn.instructions.set(insn, insn.clone(m));
-            }
-        }
-        // test accept with visitors that remove class members
-        cn.accept(new ClassVisitor(Opcodes.ASM4) {
-            @Override
-            public FieldVisitor visitField(int access, String name,
-                    String desc, String signature, Object value) {
-                return null;
-            }
-
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                return null;
-            }
-        });
-        ClassWriter cw = new ClassWriter(0);
-        cn.accept(cw);
-        assertEquals(cr, new ClassReader(cw.toByteArray()));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/ClassNodeUnitTest.java b/asm4/test/conform/org/objectweb/asm/tree/ClassNodeUnitTest.java
deleted file mode 100644
index 988038b..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/ClassNodeUnitTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-
-/**
- * ClassNode unit tests.
- * 
- * @author Eric Bruneton
- */
-public class ClassNodeUnitTest extends TestCase implements Opcodes {
-
-    public void testFrameNode() {
-        FrameNode fn = new FrameNode(F_SAME, 0, null, 0, null);
-        assertEquals(AbstractInsnNode.FRAME, fn.getType());
-    }
-
-    public void testInsnNode() {
-        InsnNode in = new InsnNode(NOP);
-        assertEquals(in.getOpcode(), NOP);
-        assertEquals(AbstractInsnNode.INSN, in.getType());
-    }
-
-    public void testIntInsnNode() {
-        IntInsnNode iin = new IntInsnNode(BIPUSH, 0);
-        iin.setOpcode(SIPUSH);
-        assertEquals(SIPUSH, iin.getOpcode());
-        assertEquals(AbstractInsnNode.INT_INSN, iin.getType());
-    }
-
-    public void testVarInsnNode() {
-        VarInsnNode vn = new VarInsnNode(ALOAD, 0);
-        vn.setOpcode(ASTORE);
-        assertEquals(ASTORE, vn.getOpcode());
-        assertEquals(AbstractInsnNode.VAR_INSN, vn.getType());
-    }
-
-    public void testTypeInsnNode() {
-        TypeInsnNode tin = new TypeInsnNode(NEW, "java/lang/Object");
-        tin.setOpcode(CHECKCAST);
-        assertEquals(CHECKCAST, tin.getOpcode());
-        assertEquals(AbstractInsnNode.TYPE_INSN, tin.getType());
-    }
-
-    public void testFieldInsnNode() {
-        FieldInsnNode fn = new FieldInsnNode(GETSTATIC, "owner", "name", "I");
-        fn.setOpcode(PUTSTATIC);
-        assertEquals(PUTSTATIC, fn.getOpcode());
-        assertEquals(AbstractInsnNode.FIELD_INSN, fn.getType());
-    }
-
-    public void testMethodInsnNode() {
-        MethodInsnNode mn = new MethodInsnNode(INVOKESTATIC, "owner", "name",
-                "I");
-        mn.setOpcode(INVOKESPECIAL);
-        assertEquals(INVOKESPECIAL, mn.getOpcode());
-        assertEquals(AbstractInsnNode.METHOD_INSN, mn.getType());
-    }
-
-    public void testInvokeDynamicInsnNode() {
-        Handle bsm = new Handle(Opcodes.H_INVOKESTATIC, "owner", "name", "()V");
-        InvokeDynamicInsnNode mn = new InvokeDynamicInsnNode("name", "()V",
-                bsm, new Object[0]);
-
-        assertEquals(INVOKEDYNAMIC, mn.getOpcode());
-        assertEquals(AbstractInsnNode.INVOKE_DYNAMIC_INSN, mn.getType());
-    }
-
-    public void testJumpInsnNode() {
-        JumpInsnNode jn = new JumpInsnNode(GOTO, new LabelNode());
-        jn.setOpcode(IFEQ);
-        assertEquals(IFEQ, jn.getOpcode());
-        assertEquals(AbstractInsnNode.JUMP_INSN, jn.getType());
-    }
-
-    public void testLabelNode() {
-        LabelNode ln = new LabelNode();
-        assertEquals(AbstractInsnNode.LABEL, ln.getType());
-        assertTrue(ln.getLabel() != null);
-        // dummy assignment to instruct FindBugs that Label.info can
-        // reference other objects than LabelNode instances
-        ln.getLabel().info = new Object();
-    }
-
-    public void testIincInsnNode() {
-        IincInsnNode iincn = new IincInsnNode(1, 1);
-        assertEquals(AbstractInsnNode.IINC_INSN, iincn.getType());
-    }
-
-    public void testLdcInsnNode() {
-        LdcInsnNode ldcn = new LdcInsnNode("s");
-        assertEquals(AbstractInsnNode.LDC_INSN, ldcn.getType());
-    }
-
-    public void testLookupSwitchInsnNode() {
-        LookupSwitchInsnNode lsn = new LookupSwitchInsnNode(null, null, null);
-        assertEquals(AbstractInsnNode.LOOKUPSWITCH_INSN, lsn.getType());
-    }
-
-    public void testTableSwitchInsnNode() {
-        TableSwitchInsnNode tsn = new TableSwitchInsnNode(0, 1, null,
-                (LabelNode[]) null);
-        assertEquals(AbstractInsnNode.TABLESWITCH_INSN, tsn.getType());
-    }
-
-    public void testMultiANewArrayInsnNode() {
-        MultiANewArrayInsnNode manan = new MultiANewArrayInsnNode("[[I", 2);
-        assertEquals(AbstractInsnNode.MULTIANEWARRAY_INSN, manan.getType());
-    }
-
-    public void testCloneMethod() {
-        MethodNode n = new MethodNode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        n.visitCode();
-        n.visitLabel(l0);
-        n.visitInsn(Opcodes.NOP);
-        n.visitLabel(l1);
-        n.visitEnd();
-        MethodNode n1 = new MethodNode();
-        n.accept(n1);
-        n.accept(n1);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/InsnListUnitTest.java b/asm4/test/conform/org/objectweb/asm/tree/InsnListUnitTest.java
deleted file mode 100644
index a9f4feb..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/InsnListUnitTest.java
+++ /dev/null
@@ -1,780 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * InsnList unit tests.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class InsnListUnitTest extends TestCase {
-
-    InsnList l1;
-
-    InsnList l2;
-
-    InsnNode in1;
-
-    InsnNode in2;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        l1 = new CheckedInsnList();
-        l2 = new CheckedInsnList();
-        in1 = new InsnNode(0);
-        in2 = new InsnNode(0);
-        l2.add(in1);
-        l2.add(in2);
-    }
-
-    protected void assertEquals(final AbstractInsnNode[] expected,
-            final AbstractInsnNode[] value) {
-        assertEquals(expected.length, value.length);
-        for (int i = 0; i < value.length; ++i) {
-            assertEquals(expected[i], value[i]);
-        }
-    }
-
-    public void testSize() {
-        assertEquals(0, l1.size());
-    }
-
-    public void testGetFirst() {
-        assertEquals(null, l1.getFirst());
-    }
-
-    public void testGetLast() {
-        assertEquals(null, l1.getLast());
-    }
-
-    public void testInvalidGet() {
-        try {
-            l1.get(0);
-            fail();
-        } catch (IndexOutOfBoundsException e) {
-        }
-    }
-
-    public void testContains() {
-        assertEquals(false, l1.contains(new InsnNode(0)));
-    }
-
-    public void testIterator() {
-        InsnNode insn = new InsnNode(0);
-
-        // iteration
-        ListIterator<AbstractInsnNode> it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        assertTrue(it.hasNext());
-        assertEquals(in2, it.next());
-        assertFalse(it.hasNext());
-        assertTrue(it.hasPrevious());
-        assertEquals(in2, it.previous());
-        assertTrue(it.hasPrevious());
-        assertEquals(in1, it.previous());
-        assertFalse(it.hasPrevious());
-
-        l2.add(insn);
-
-        // remove()
-        it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        assertTrue(it.hasNext());
-        assertEquals(in2, it.next());
-        assertTrue(it.hasNext());
-        it.remove(); // remove in2
-        assertTrue(it.hasNext());
-        assertEquals(insn, it.next());
-        assertFalse(it.hasNext());
-        assertTrue(it.hasPrevious());
-
-        it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        assertTrue(it.hasNext());
-        assertEquals(insn, it.next());
-        assertFalse(it.hasNext());
-
-        l2.remove(insn);
-        l2.insert(in1, in2);
-
-        // add() then next()
-        it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        it.add(insn);
-        assertEquals(in2, it.next());
-
-        l2.remove(insn);
-
-        // add() then previous()
-        it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        it.add(insn);
-        assertEquals(insn, it.previous());
-        assertEquals(insn, it.next());
-        assertTrue(it.hasNext());
-        assertEquals(in2, it.next());
-        assertFalse(it.hasNext());
-
-        l2.remove(insn);
-
-        // set() then previous()
-        it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        it.set(insn);
-        assertEquals(insn, it.previous());
-        assertEquals(insn, it.next());
-        assertTrue(it.hasNext());
-
-        l2.remove(insn);
-        l2.insertBefore(in2, in1);
-
-        // add() then next()
-        it = l2.iterator();
-        assertTrue(it.hasNext());
-        assertEquals(in1, it.next());
-        it.set(insn);
-        assertEquals(in2, it.next());
-    }
-
-    public void testIterator2() {
-        ListIterator<AbstractInsnNode> it = l2.iterator(l2.size());
-
-        assertFalse(it.hasNext());
-        assertTrue(it.hasPrevious());
-        assertEquals(1, it.previousIndex());
-        assertEquals(in2, it.previous());
-        assertTrue(it.hasPrevious());
-        assertEquals(0, it.previousIndex());
-        assertEquals(in1, it.previous());
-        assertFalse(it.hasPrevious());
-
-        assertEquals(-1, it.previousIndex());
-
-        assertTrue(it.hasNext());
-        assertEquals(0, it.nextIndex());
-        assertEquals(in1, it.next());
-        assertTrue(it.hasNext());
-        assertEquals(1, it.nextIndex());
-
-        InsnNode insn = new InsnNode(0);
-        it.add(insn);
-
-        assertEquals(2, it.nextIndex());
-        assertEquals(in2, it.next());
-        assertFalse(it.hasNext());
-        assertEquals(3, it.nextIndex());
-    }
-
-    public void testIterator3() {
-        try {
-            new InsnList().iterator().next();
-            fail();
-        } catch (NoSuchElementException e) {
-        }
-    }
-
-    public void testInvalidIndexOf() {
-        try {
-            l1.indexOf(new InsnNode(0));
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testToArray() {
-        assertEquals(0, l1.toArray().length);
-    }
-
-    public void testInvalidSet() {
-        try {
-            l1.set(new InsnNode(0), new InsnNode(0));
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testSet() {
-        l1.add(new InsnNode(0));
-        AbstractInsnNode insn = new InsnNode(0);
-        l1.set(l1.getFirst(), insn);
-        assertEquals(1, l1.size());
-        assertEquals(insn, l1.getFirst());
-
-        l1.remove(insn);
-        l1.add(new InsnNode(0));
-
-        l1.set(l1.get(0), insn);
-        assertEquals(1, l1.size());
-        assertEquals(insn, l1.getFirst());
-
-        l1.remove(insn);
-        l1.add(new InsnNode(0));
-        l1.add(new InsnNode(0));
-
-        l1.set(l1.get(1), insn);
-        assertEquals(2, l1.size());
-        assertEquals(insn, l1.get(1));
-    }
-
-    public void testInvalidAdd() {
-        try {
-            l1.add(in1);
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testAddEmpty() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        assertEquals(1, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(insn, l1.getLast());
-        assertEquals(insn, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(0, l1.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { insn }, l1.toArray());
-        assertEquals(null, insn.getPrevious());
-        assertEquals(null, insn.getNext());
-    }
-
-    public void testAddNonEmpty() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(new InsnNode(0));
-        l1.add(insn);
-        assertEquals(2, l1.size());
-        assertEquals(insn, l1.getLast());
-        assertEquals(1, l1.indexOf(insn));
-        assertEquals(insn, l1.get(1));
-        assertEquals(true, l1.contains(insn));
-    }
-
-    public void testAddEmptyList() {
-        l1.add(new InsnList());
-        assertEquals(0, l1.size());
-        assertEquals(null, l1.getFirst());
-        assertEquals(null, l1.getLast());
-        assertEquals(new AbstractInsnNode[0], l1.toArray());
-    }
-
-    public void testInvalidAddAll() {
-        try {
-            l1.add(l1);
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testAddAllEmpty() {
-        l1.add(l2);
-        assertEquals(2, l1.size());
-        assertEquals(in1, l1.getFirst());
-        assertEquals(in2, l1.getLast());
-        assertEquals(in1, l1.get(0));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(0, l1.indexOf(in1));
-        assertEquals(1, l1.indexOf(in2));
-        assertEquals(new AbstractInsnNode[] { in1, in2 }, l1.toArray());
-    }
-
-    public void testAddAllNonEmpty() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.add(l2);
-        assertEquals(3, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(in2, l1.getLast());
-        assertEquals(insn, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(0, l1.indexOf(insn));
-        assertEquals(1, l1.indexOf(in1));
-        assertEquals(2, l1.indexOf(in2));
-        assertEquals(new AbstractInsnNode[] { insn, in1, in2 }, l1.toArray());
-    }
-
-    public void testInvalidInsert() {
-        try {
-            l1.insert(in1);
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testInsertEmpty() {
-        InsnNode insn = new InsnNode(0);
-        l1.insert(insn);
-        assertEquals(1, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(insn, l1.getLast());
-        assertEquals(insn, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(0, l1.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { insn }, l1.toArray());
-    }
-
-    public void testInsertNonEmpty() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(new InsnNode(0));
-        l1.insert(insn);
-        assertEquals(2, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(insn, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(0, l1.indexOf(insn));
-    }
-
-    public void testInvalidInsertAll() {
-        try {
-            l1.insert(l1);
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testInsertAllEmptyList() {
-        l1.insert(new InsnList());
-        assertEquals(0, l1.size());
-        assertEquals(null, l1.getFirst());
-        assertEquals(null, l1.getLast());
-        assertEquals(new AbstractInsnNode[0], l1.toArray());
-    }
-
-    public void testInsertAllEmpty() {
-        l1.insert(l2);
-        assertEquals(2, l1.size(), 2);
-        assertEquals(in1, l1.getFirst());
-        assertEquals(in2, l1.getLast());
-        assertEquals(in1, l1.get(0));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(0, l1.indexOf(in1));
-        assertEquals(1, l1.indexOf(in2));
-        assertEquals(new AbstractInsnNode[] { in1, in2 }, l1.toArray());
-    }
-
-    public void testInsertAllNonEmpty() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.insert(l2);
-        assertEquals(3, l1.size());
-        assertEquals(in1, l1.getFirst());
-        assertEquals(insn, l1.getLast());
-        assertEquals(in1, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(0, l1.indexOf(in1));
-        assertEquals(1, l1.indexOf(in2));
-        assertEquals(2, l1.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { in1, in2, insn }, l1.toArray());
-    }
-
-    public void testInvalidInsert2() {
-        try {
-            l1.insert(new InsnNode(0), new InsnNode(0));
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testInsert2NotLast() {
-        InsnNode insn = new InsnNode(0);
-        l2.insert(in1, insn);
-        assertEquals(3, l2.size());
-        assertEquals(in1, l2.getFirst());
-        assertEquals(in2, l2.getLast());
-        assertEquals(in1, l2.get(0));
-        assertEquals(true, l2.contains(insn));
-        assertEquals(1, l2.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { in1, insn, in2 }, l2.toArray());
-    }
-
-    public void testInsert2Last() {
-        InsnNode insn = new InsnNode(0);
-        l2.insert(in2, insn);
-        assertEquals(3, l2.size());
-        assertEquals(in1, l2.getFirst());
-        assertEquals(insn, l2.getLast());
-        assertEquals(in1, l2.get(0));
-        assertEquals(true, l2.contains(insn));
-        assertEquals(2, l2.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { in1, in2, insn }, l2.toArray());
-    }
-
-    public void testInsertBefore() {
-        InsnNode insn = new InsnNode(0);
-        l2.insertBefore(in2, insn);
-        assertEquals(3, l2.size());
-        assertEquals(in1, l2.getFirst());
-        assertEquals(in2, l2.getLast());
-        assertEquals(insn, l2.get(1));
-        assertEquals(true, l2.contains(insn));
-        assertEquals(1, l2.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { in1, insn, in2 }, l2.toArray());
-    }
-
-    public void testInsertBeforeFirst() {
-        InsnNode insn = new InsnNode(0);
-        l2.insertBefore(in1, insn);
-        assertEquals(3, l2.size());
-        assertEquals(insn, l2.getFirst());
-        assertEquals(in2, l2.getLast());
-        assertEquals(insn, l2.get(0));
-        assertEquals(true, l2.contains(insn));
-        assertEquals(0, l2.indexOf(insn));
-        assertEquals(new AbstractInsnNode[] { insn, in1, in2 }, l2.toArray());
-    }
-
-    public void testInvalidInsertBefore() {
-        try {
-            l1.insertBefore(new InsnNode(0), new InsnNode(0));
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testInvalidInsertAll2() {
-        try {
-            l1.insert(new InsnNode(0), new InsnList());
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testInsertAll2EmptyList() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.insert(insn, new InsnList());
-        assertEquals(1, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(insn, l1.getLast());
-        assertEquals(new AbstractInsnNode[] { insn }, l1.toArray());
-    }
-
-    public void testInsertAll2NotLast() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.add(new InsnNode(0));
-        l1.insert(insn, l2);
-        assertEquals(4, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(insn, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(0, l1.indexOf(insn));
-        assertEquals(1, l1.indexOf(in1));
-        assertEquals(2, l1.indexOf(in2));
-    }
-
-    public void testInsertAll2Last() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.insert(insn, l2);
-        assertEquals(3, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(in2, l1.getLast());
-        assertEquals(insn, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(0, l1.indexOf(insn));
-        assertEquals(1, l1.indexOf(in1));
-        assertEquals(2, l1.indexOf(in2));
-        assertEquals(new AbstractInsnNode[] { insn, in1, in2 }, l1.toArray());
-    }
-
-    public void testInvalidInsertBeforeAll() {
-        try {
-            l1.insertBefore(new InsnNode(0), new InsnList());
-            fail();
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testInsertBeforeAll2EmptyList() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.insertBefore(insn, new InsnList());
-        assertEquals(1, l1.size());
-        assertEquals(insn, l1.getFirst());
-        assertEquals(insn, l1.getLast());
-        assertEquals(new AbstractInsnNode[] { insn }, l1.toArray());
-    }
-
-    public void testInsertBeforeAll2NotLast() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(new InsnNode(0));
-        l1.add(insn);
-        l1.insertBefore(insn, l2);
-        assertEquals(4, l1.size());
-        assertEquals(in1, l1.get(1));
-        assertEquals(in2, l1.get(2));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(3, l1.indexOf(insn));
-        assertEquals(1, l1.indexOf(in1));
-        assertEquals(2, l1.indexOf(in2));
-    }
-
-    public void testInsertBeforeAll2First() {
-        InsnNode insn = new InsnNode(0);
-        l1.insert(insn);
-        l1.insertBefore(insn, l2);
-        assertEquals(3, l1.size());
-        assertEquals(in1, l1.getFirst());
-        assertEquals(insn, l1.getLast());
-        assertEquals(in1, l1.get(0));
-        assertEquals(true, l1.contains(insn));
-        assertEquals(true, l1.contains(in1));
-        assertEquals(true, l1.contains(in2));
-        assertEquals(2, l1.indexOf(insn));
-        assertEquals(0, l1.indexOf(in1));
-        assertEquals(1, l1.indexOf(in2));
-        assertEquals(new AbstractInsnNode[] { in1, in2, insn }, l1.toArray());
-    }
-
-    public void testInvalidRemove() {
-        try {
-            l1.remove(new InsnNode(0));
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testRemoveSingle() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.remove(insn);
-        assertEquals(0, l1.size());
-        assertEquals(null, l1.getFirst());
-        assertEquals(null, l1.getLast());
-        assertEquals(false, l1.contains(insn));
-        assertEquals(new AbstractInsnNode[0], l1.toArray());
-        assertEquals(null, insn.getPrevious());
-        assertEquals(null, insn.getNext());
-    }
-
-    public void testRemoveFirst() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(insn);
-        l1.add(new InsnNode(0));
-        l1.remove(insn);
-        assertEquals(false, l1.contains(insn));
-        assertEquals(null, insn.getPrevious());
-        assertEquals(null, insn.getNext());
-    }
-
-    public void testRemoveMiddle() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(new InsnNode(0));
-        l1.add(insn);
-        l1.add(new InsnNode(0));
-        l1.remove(insn);
-        assertEquals(false, l1.contains(insn));
-        assertEquals(null, insn.getPrevious());
-        assertEquals(null, insn.getNext());
-    }
-
-    public void testRemoveLast() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(new InsnNode(0));
-        l1.add(insn);
-        l1.remove(insn);
-        assertEquals(false, l1.contains(insn));
-        assertEquals(null, insn.getPrevious());
-        assertEquals(null, insn.getNext());
-    }
-
-    public void testClear() {
-        InsnNode insn = new InsnNode(0);
-        l1.add(new InsnNode(0));
-        l1.add(insn);
-        l1.add(new InsnNode(0));
-        l1.clear();
-        assertEquals(0, l1.size());
-        assertEquals(null, l1.getFirst());
-        assertEquals(null, l1.getLast());
-        assertEquals(false, l1.contains(insn));
-        assertEquals(new AbstractInsnNode[0], l1.toArray());
-        assertEquals(null, insn.getPrevious());
-        assertEquals(null, insn.getNext());
-    }
-
-    public void testAcceptor1() {
-        l1.add(new InsnNode(55));
-        l1.add(new InsnNode(77));
-
-        final InsnList lst = new InsnList();
-        l1.accept(new MethodVisitor(Opcodes.ASM4) {
-            @Override
-            public void visitInsn(int opcode) {
-                lst.add(new InsnNode(opcode));
-            }
-        });
-
-        assertEquals(55, lst.get(0).opcode);
-        assertEquals(77, lst.get(1).opcode);
-    }
-
-    public void testResetLabels() throws Exception {
-        LabelNode labelNode = new LabelNode();
-
-        l1.add(new InsnNode(55));
-        l1.add(labelNode);
-        l1.add(new InsnNode(55));
-
-        Label label = labelNode.getLabel();
-        assertNotNull(label);
-
-        l1.resetLabels();
-
-        assertNotSame(label, labelNode.getLabel());
-    }
-}
-
-class CheckedInsnList extends InsnList {
-
-    @Override
-    public int indexOf(final AbstractInsnNode insn) {
-        if (!contains(insn)) {
-            throw new IllegalArgumentException();
-        }
-        return super.indexOf(insn);
-    }
-
-    @Override
-    public void set(final AbstractInsnNode location, final AbstractInsnNode insn) {
-        if (!(contains(location) && insn.index == -1)) {
-            throw new IllegalArgumentException();
-        }
-        super.set(location, insn);
-    }
-
-    @Override
-    public void add(final AbstractInsnNode insn) {
-        if (insn.index != -1) {
-            throw new IllegalArgumentException();
-        }
-        super.add(insn);
-    }
-
-    @Override
-    public void add(final InsnList insns) {
-        if (insns == this) {
-            throw new IllegalArgumentException();
-        }
-        super.add(insns);
-    }
-
-    @Override
-    public void insert(final AbstractInsnNode insn) {
-        if (insn.index != -1) {
-            throw new IllegalArgumentException();
-        }
-        super.insert(insn);
-    }
-
-    @Override
-    public void insert(final InsnList insns) {
-        if (insns == this) {
-            throw new IllegalArgumentException();
-        }
-        super.insert(insns);
-    }
-
-    @Override
-    public void insert(final AbstractInsnNode location,
-            final AbstractInsnNode insn) {
-        if (!(contains(location) && insn.index == -1)) {
-            throw new IllegalArgumentException();
-        }
-        super.insert(location, insn);
-    }
-
-    @Override
-    public void insert(final AbstractInsnNode location, final InsnList insns) {
-        if (!(contains(location) && insns != this)) {
-            throw new IllegalArgumentException();
-        }
-        super.insert(location, insns);
-    }
-
-    @Override
-    public void insertBefore(final AbstractInsnNode location,
-            final AbstractInsnNode insn) {
-        if (!(contains(location) && insn.index == -1)) {
-            throw new IllegalArgumentException();
-        }
-        super.insertBefore(location, insn);
-    }
-
-    @Override
-    public void insertBefore(final AbstractInsnNode location,
-            final InsnList insns) {
-        if (!(contains(location) && insns != this)) {
-            throw new IllegalArgumentException();
-        }
-        super.insertBefore(location, insns);
-    }
-
-    @Override
-    public void remove(final AbstractInsnNode insn) {
-        if (!contains(insn)) {
-            throw new IllegalArgumentException();
-        }
-        super.remove(insn);
-    }
-
-    @Override
-    public void clear() {
-        super.removeAll(true);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/AnalyzerUnitTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/AnalyzerUnitTest.java
deleted file mode 100644
index 9e5a835..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/AnalyzerUnitTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriterComputeMaxsUnitTest;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * Analyzer unit tests for methods with JSR instructions.
- * 
- * @author Eric Bruneton
- */
-public class AnalyzerUnitTest extends ClassWriterComputeMaxsUnitTest {
-
-    @Override
-    protected boolean isComputeMaxs() {
-        return false;
-    }
-
-    @Override
-    protected void assertMaxs(final int maxStack, final int maxLocals) {
-        mv.visitMaxs(maxStack, maxLocals);
-        mv.visitEnd();
-        cw.visitEnd();
-        byte[] b = cw.toByteArray();
-        ClassReader cr = new ClassReader(b);
-        cr.accept(new ClassVisitor(Opcodes.ASM4) {
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                if (name.equals("m")) {
-                    return new MethodNode(access, name, desc, signature,
-                            exceptions) {
-                        @Override
-                        public void visitEnd() {
-                            Analyzer<BasicValue> a = new Analyzer<BasicValue>(
-                                    new BasicInterpreter());
-                            try {
-                                Frame<BasicValue>[] frames = a.analyze("C",
-                                        this);
-                                int mStack = 0;
-                                int mLocals = 0;
-                                for (int i = 0; i < frames.length; ++i) {
-                                    if (frames[i] != null) {
-                                        mStack = Math.max(mStack,
-                                                frames[i].getStackSize());
-                                        mLocals = Math.max(mLocals,
-                                                frames[i].getLocals());
-                                    }
-                                }
-                                assertEquals("maxStack", maxStack, mStack);
-                                assertEquals("maxLocals", maxLocals, mLocals);
-                            } catch (Exception e) {
-                                fail(e.getMessage());
-                            }
-                        }
-                    };
-                } else {
-                    return null;
-                }
-            }
-        }, 0);
-
-        try {
-            TestClassLoader loader = new TestClassLoader();
-            Class<?> c = loader.defineClass("C", b);
-            c.newInstance();
-        } catch (Throwable t) {
-            fail(t.getMessage());
-        }
-    }
-
-    @Override
-    protected void assertGraph(final String graph) {
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/BasicInterpreterTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/BasicInterpreterTest.java
deleted file mode 100644
index 79d654e..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/BasicInterpreterTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * Analysis tests.
- * 
- * @author Eric Bruneton
- */
-public class BasicInterpreterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new BasicInterpreterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, 0);
-        List<MethodNode> methods = cn.methods;
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            Analyzer<BasicValue> a = new Analyzer<BasicValue>(
-                    new BasicInterpreter());
-            a.analyze(cn.name, method);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/BasicVerifierTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/BasicVerifierTest.java
deleted file mode 100644
index ff7dba7..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/BasicVerifierTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * Analysis tests.
- * 
- * @author Eric Bruneton
- */
-public class BasicVerifierTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new BasicVerifierTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, 0);
-        List<MethodNode> methods = cn.methods;
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            Analyzer<?> a = new Analyzer<BasicValue>(new BasicVerifier());
-            a.analyze(cn.name, method);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java
deleted file mode 100644
index ffe4808..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * Verifier tests.
- * 
- * @author Eric Bruneton
- */
-public class SimpleVerifierTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new SimpleVerifierTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, 0);
-        List<MethodNode> methods = cn.methods;
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            Analyzer<?> a = new Analyzer<BasicValue>(new SimpleVerifier());
-            a.analyze(cn.name, method);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/SimpleVerifierUnitTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/SimpleVerifierUnitTest.java
deleted file mode 100644
index b6b2834..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/SimpleVerifierUnitTest.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * SimpleVerifier unit tests.
- * 
- * @author Eric Bruneton
- */
-public class SimpleVerifierUnitTest extends TestCase implements Opcodes {
-
-    private Analyzer<?> a;
-
-    private MethodNode mn;
-
-    @Override
-    protected void setUp() {
-        Type c = Type.getType("LC;");
-        Type d = Type.getType("Ljava/lang/Number;");
-        a = new Analyzer<BasicValue>(new SimpleVerifier(c, d, false));
-        mn = new MethodNode(ACC_PUBLIC, "m", "()V", null, null);
-    }
-
-    private void assertValid() throws AnalyzerException {
-        mn.visitInsn(RETURN);
-        mn.visitMaxs(10, 10);
-        a.analyze("C", mn);
-        Frame<?>[] frames = a.getFrames();
-        for (int i = 0; i < frames.length; ++i) {
-            if (frames[i] != null) {
-                frames[i].toString();
-            }
-        }
-        a.getHandlers(0);
-    }
-
-    private void assertInvalid() {
-        mn.visitInsn(RETURN);
-        mn.visitMaxs(10, 10);
-        try {
-            a.analyze("C", mn);
-            fail();
-        } catch (AnalyzerException e) {
-            success();
-        } catch (RuntimeException e) {
-        }
-    }
-
-    public void testInvalidOpcode() {
-        mn.visitInsn(-1);
-        assertInvalid();
-    }
-
-    public void testInvalidPop() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(POP);
-        assertInvalid();
-    }
-
-    public void testInvalidPop2() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(POP2);
-        assertInvalid();
-    }
-
-    public void testInvalidDup() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(DUP);
-        assertInvalid();
-    }
-
-    public void testInvalidDupx1() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(DUP_X1);
-        assertInvalid();
-    }
-
-    public void testInvalidDupx2() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(DUP_X2);
-        assertInvalid();
-    }
-
-    public void testInvalidDup2() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(DUP2);
-        assertInvalid();
-    }
-
-    public void testInvalidDup2x1() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(DUP2_X1);
-        assertInvalid();
-    }
-
-    public void testInvalidDup2x2() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(DUP2_X2);
-        assertInvalid();
-    }
-
-    public void testInvalidSwap() {
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(SWAP);
-        assertInvalid();
-    }
-
-    public void testInvalidGetLocal() {
-        mn.visitVarInsn(ALOAD, 10);
-        assertInvalid();
-    }
-
-    public void testInvalidSetLocal() {
-        mn.visitInsn(ACONST_NULL);
-        mn.visitVarInsn(ASTORE, 10);
-        assertInvalid();
-    }
-
-    public void testInvalidEmptyStack() {
-        mn.visitInsn(POP);
-        assertInvalid();
-    }
-
-    public void testInvalidFullStack() {
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        assertInvalid();
-    }
-
-    public void testInconsistentStackHeights() {
-        Label l0 = new Label();
-        mn.visitInsn(ICONST_0);
-        mn.visitJumpInsn(IFEQ, l0);
-        mn.visitInsn(ICONST_0);
-        mn.visitLabel(l0);
-        assertInvalid();
-    }
-
-    public void testInvalidNewArray() {
-        mn.visitInsn(ICONST_1);
-        mn.visitIntInsn(NEWARRAY, -1);
-        assertInvalid();
-    }
-
-    public void testInvalidAload() {
-        mn.visitInsn(ICONST_0);
-        mn.visitVarInsn(ISTORE, 1);
-        mn.visitVarInsn(ALOAD, 1);
-        assertInvalid();
-    }
-
-    public void testInvalidAstore() {
-        mn.visitInsn(ICONST_0);
-        mn.visitVarInsn(ASTORE, 1);
-        assertInvalid();
-    }
-
-    public void testInvalidIstore() {
-        mn.visitInsn(ACONST_NULL);
-        mn.visitVarInsn(ISTORE, 1);
-        assertInvalid();
-    }
-
-    public void testInvalidCheckcast() {
-        mn.visitInsn(ICONST_0);
-        mn.visitTypeInsn(CHECKCAST, "java/lang/String");
-        assertInvalid();
-    }
-
-    public void testInvalidArraylength() {
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ARRAYLENGTH);
-        assertInvalid();
-    }
-
-    public void testInvalidAthrow() {
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ATHROW);
-        assertInvalid();
-    }
-
-    public void testInvalidIneg() {
-        mn.visitInsn(FCONST_0);
-        mn.visitInsn(INEG);
-        assertInvalid();
-    }
-
-    public void testInvalidIadd() {
-        mn.visitInsn(FCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(IADD);
-        assertInvalid();
-    }
-
-    public void testInvalidIsub() {
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(FCONST_0);
-        mn.visitInsn(ISUB);
-        assertInvalid();
-    }
-
-    public void testInvalidIastore() {
-        mn.visitInsn(ICONST_1);
-        mn.visitIntInsn(NEWARRAY, T_INT);
-        mn.visitInsn(FCONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(IASTORE);
-        assertInvalid();
-    }
-
-    public void testInvalidFastore() {
-        mn.visitInsn(ICONST_1);
-        mn.visitIntInsn(NEWARRAY, T_FLOAT);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(FASTORE);
-        assertInvalid();
-    }
-
-    public void testInvalidLastore() {
-        mn.visitInsn(ICONST_1);
-        mn.visitInsn(ICONST_0);
-        mn.visitInsn(LCONST_0);
-        mn.visitInsn(LASTORE);
-        assertInvalid();
-    }
-
-    public void testInvalidMultianewarray() {
-        mn.visitInsn(FCONST_1);
-        mn.visitInsn(ICONST_2);
-        mn.visitMultiANewArrayInsn("[[I", 2);
-        assertInvalid();
-    }
-
-    public void testInvalidInvokevirtual() {
-        mn.visitInsn(ACONST_NULL);
-        mn.visitTypeInsn(CHECKCAST, "java/lang/Object");
-        mn.visitMethodInsn(INVOKEVIRTUAL, "java/util/ArrayList", "size", "()I");
-        assertInvalid();
-    }
-
-    public void testInvalidInvokeinterface() {
-        mn.visitInsn(ACONST_NULL);
-        mn.visitTypeInsn(CHECKCAST, "java/util/List");
-        mn.visitInsn(FCONST_0);
-        mn.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get",
-                "(I)Ljava/lang/Object;");
-        assertInvalid();
-    }
-
-    public void testInvalidRet() {
-        mn.visitVarInsn(RET, 1);
-        assertInvalid();
-    }
-
-    public void testInvalidFalloff() {
-        mn.visitMaxs(10, 10);
-        try {
-            a.analyze("C", mn);
-            fail();
-        } catch (AnalyzerException e) {
-            success();
-        } catch (RuntimeException e) {
-        }
-    }
-
-    public void testInvalidSubroutineFalloff() {
-        Label l0 = new Label();
-        Label l1 = new Label();
-        mn.visitJumpInsn(GOTO, l0);
-        mn.visitLabel(l1);
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitVarInsn(RET, 1);
-        mn.visitLabel(l0);
-        mn.visitJumpInsn(JSR, l1);
-        mn.visitMaxs(10, 10);
-        try {
-            a.analyze("C", mn);
-            fail();
-        } catch (AnalyzerException e) {
-            success();
-        } catch (RuntimeException e) {
-        }
-    }
-
-    public void testNestedSubroutines() throws AnalyzerException {
-        Label l0 = new Label();
-        Label l1 = new Label();
-        mn.visitJumpInsn(JSR, l0);
-        mn.visitInsn(RETURN);
-        mn.visitLabel(l0);
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitJumpInsn(JSR, l1);
-        mn.visitJumpInsn(JSR, l1);
-        mn.visitVarInsn(RET, 1);
-        mn.visitLabel(l1);
-        mn.visitVarInsn(ASTORE, 2);
-        mn.visitVarInsn(RET, 2);
-        assertValid();
-    }
-
-    public void testSubroutineLocalsAccess() throws AnalyzerException {
-        MethodVisitor mv = mn;
-        mv.visitCode();
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        Label l3 = new Label();
-        mv.visitTryCatchBlock(l0, l0, l1, null);
-        mv.visitTryCatchBlock(l0, l2, l2, "java/lang/RuntimeException");
-        mv.visitLabel(l0);
-        mv.visitJumpInsn(JSR, l3);
-        mv.visitInsn(RETURN);
-        mv.visitLabel(l1);
-        mv.visitVarInsn(ASTORE, 1);
-        mv.visitJumpInsn(JSR, l3);
-        mv.visitVarInsn(ALOAD, 1);
-        mv.visitInsn(ATHROW);
-        mv.visitLabel(l3);
-        mv.visitVarInsn(ASTORE, 2);
-        mv.visitInsn(ACONST_NULL);
-        mv.visitVarInsn(ASTORE, 3);
-        mv.visitVarInsn(RET, 2);
-        mv.visitLabel(l2);
-        mv.visitVarInsn(ASTORE, 4);
-        mv.visitVarInsn(ALOAD, 4);
-        mv.visitInsn(ATHROW);
-        assertValid();
-    }
-
-    public void _testOverlappingSubroutines() {
-        // TODO currently Analyzer can not detect this situation. The problem
-        // is that other overlapping subroutine situations are valid, such as
-        // when a nested subroutine implicitly returns to its parent
-        // subroutine, without a RET.
-        Label l0 = new Label();
-        Label l1 = new Label();
-        Label l2 = new Label();
-        mn.visitJumpInsn(JSR, l0);
-        mn.visitJumpInsn(JSR, l1);
-        mn.visitInsn(RETURN);
-        mn.visitLabel(l0);
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitJumpInsn(GOTO, l2);
-        mn.visitLabel(l1);
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitLabel(l2);
-        mn.visitVarInsn(RET, 1);
-        assertInvalid();
-    }
-
-    public void testMerge() throws AnalyzerException {
-        Label l0 = new Label();
-        mn.visitVarInsn(ALOAD, 0);
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitInsn(ACONST_NULL);
-        mn.visitTypeInsn(CHECKCAST, "java/lang/Number");
-        mn.visitVarInsn(ASTORE, 2);
-        mn.visitVarInsn(ALOAD, 0);
-        mn.visitVarInsn(ASTORE, 3);
-        mn.visitLabel(l0);
-        mn.visitInsn(ACONST_NULL);
-        mn.visitTypeInsn(CHECKCAST, "java/lang/Number");
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitVarInsn(ALOAD, 0);
-        mn.visitVarInsn(ASTORE, 2);
-        mn.visitInsn(ACONST_NULL);
-        mn.visitTypeInsn(CHECKCAST, "java/lang/Integer");
-        mn.visitVarInsn(ASTORE, 3);
-        mn.visitJumpInsn(GOTO, l0);
-        assertValid();
-    }
-
-    public void testClassNotFound() {
-        Label l0 = new Label();
-        mn.visitVarInsn(ALOAD, 0);
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitLabel(l0);
-        mn.visitInsn(ACONST_NULL);
-        mn.visitTypeInsn(CHECKCAST, "D");
-        mn.visitVarInsn(ASTORE, 1);
-        mn.visitJumpInsn(GOTO, l0);
-        mn.visitMaxs(10, 10);
-        try {
-            a.analyze("C", mn);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    /**
-     * Dummy method to avoid a FindBugs warning.
-     */
-    private static void success() {
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/SmallSetUnitTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/SmallSetUnitTest.java
deleted file mode 100644
index a599ffc..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/SmallSetUnitTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-/**
- * SmallSet unit tests.
- * 
- * @author Eric Bruneton
- */
-public class SmallSetUnitTest extends TestCase {
-
-    private final Object A = new Object();
-    private final Object B = new Object();
-    private final Object C = new Object();
-    private final Object D = new Object();
-
-    public void testSubsetUnion() {
-        SmallSet<Object> s1 = new SmallSet<Object>(A, B);
-        SmallSet<Object> s2 = new SmallSet<Object>(A, null);
-        Set<Object> u = s1.union(s2);
-        Set<Object> v = s2.union(s1);
-        assertEquals(u, v);
-        s1.remove();
-    }
-
-    public void testDisjointUnion() {
-        SmallSet<Object> s1 = new SmallSet<Object>(A, B);
-        SmallSet<Object> s2 = new SmallSet<Object>(C, D);
-        Set<Object> u = s1.union(s2);
-        Set<Object> v = s2.union(s1);
-        assertEquals(u, v);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/SourceInterpreterTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/SourceInterpreterTest.java
deleted file mode 100644
index fbecfe8..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/SourceInterpreterTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * SourceInterpreter tests.
- * 
- * @author Eric Bruneton
- */
-public class SourceInterpreterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new SourceInterpreterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, 0);
-        List<MethodNode> methods = cn.methods;
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            Analyzer<?> a = new Analyzer<SourceValue>(new SourceInterpreter());
-            a.analyze(cn.name, method);
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/tree/analysis/ValueUnitTest.java b/asm4/test/conform/org/objectweb/asm/tree/analysis/ValueUnitTest.java
deleted file mode 100644
index ecb001b..0000000
--- a/asm4/test/conform/org/objectweb/asm/tree/analysis/ValueUnitTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.tree.analysis;
-
-import junit.framework.TestCase;
-
-/**
- * BasicValue and SourceValue unit tests.
- * 
- * @author Eric Bruneton
- */
-public class ValueUnitTest extends TestCase {
-
-    public void testBasicValue() {
-        assertFalse(BasicValue.INT_VALUE.equals(new Object()));
-        BasicValue.INT_VALUE.hashCode();
-        BasicValue.UNINITIALIZED_VALUE.toString();
-        BasicValue.RETURNADDRESS_VALUE.toString();
-        BasicValue.REFERENCE_VALUE.toString();
-    }
-
-    public void testSourceValue() {
-        new SourceValue(1).hashCode();
-        assertFalse(new SourceValue(1).equals(null));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/ASMifierTest.java b/asm4/test/conform/org/objectweb/asm/util/ASMifierTest.java
deleted file mode 100644
index 603da7f..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/ASMifierTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import junit.framework.TestSuite;
-
-import org.codehaus.janino.ClassLoaderIClassLoader;
-import org.codehaus.janino.DebuggingInformation;
-import org.codehaus.janino.IClassLoader;
-import org.codehaus.janino.Parser;
-import org.codehaus.janino.Scanner;
-import org.codehaus.janino.UnitCompiler;
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.attrs.CodeComment;
-import org.objectweb.asm.attrs.Comment;
-
-/**
- * ASMifier tests.
- * 
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public class ASMifierTest extends AbstractTest {
-
-    public static final TestClassLoader LOADER = new TestClassLoader();
-
-    public static TestSuite suite() throws Exception {
-        return new ASMifierTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-
-        if (cr.b.length > 20000) {
-            return;
-        }
-
-        StringWriter sw = new StringWriter();
-        TraceClassVisitor cv = new TraceClassVisitor(null, new ASMifier(),
-                new PrintWriter(sw));
-        cr.accept(cv, new Attribute[] { new Comment(), new CodeComment() }, 0);
-
-        String generated = sw.toString();
-
-        byte[] generatorClassData;
-        try {
-            generatorClassData = Compiler.compile(n, generated);
-        } catch (Exception ex) {
-            System.err.println(generated);
-            System.err.println("------------------");
-            throw ex;
-        }
-
-        String nd = n + "Dump";
-        if (n.indexOf('.') != -1) {
-            nd = "asm." + nd;
-        }
-
-        Class<?> c = LOADER.defineClass(nd, generatorClassData);
-        Method m = c.getMethod("dump", new Class[0]);
-        byte[] b = (byte[]) m.invoke(null, new Object[0]);
-
-        assertEquals(cr, new ClassReader(b));
-    }
-
-    public static class TestClassLoader extends ClassLoader {
-
-        public Class<?> defineClass(final String name, final byte[] b) {
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-
-    public static class Compiler {
-
-        final static IClassLoader CL = new ClassLoaderIClassLoader(
-                new URLClassLoader(new URL[0]));
-
-        public static byte[] compile(final String name, final String source)
-                throws Exception {
-            Parser p = new Parser(new Scanner(name, new StringReader(source)));
-            UnitCompiler uc = new UnitCompiler(p.parseCompilationUnit(), CL);
-            return uc.compileUnit(DebuggingInformation.ALL)[0].toByteArray();
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/ASMifierUnitTest.java b/asm4/test/conform/org/objectweb/asm/util/ASMifierUnitTest.java
deleted file mode 100644
index 3ba4e0f..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/ASMifierUnitTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import junit.framework.TestCase;
-
-/**
- * ASMifierClassVisitor unit tests
- * 
- * @author Eric Bruneton
- */
-public class ASMifierUnitTest extends TestCase {
-
-    public void testASMifierClassVisitor() throws Exception {
-        String s = getClass().getName();
-        ASMifier.main(new String[0]);
-        ASMifier.main(new String[] { "-debug" });
-        ASMifier.main(new String[] { s });
-        ASMifier.main(new String[] { "-debug", s });
-        ASMifier.main(new String[] { "output/test/cases/Interface.class" });
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/CheckClassAdapterTest.java b/asm4/test/conform/org/objectweb/asm/util/CheckClassAdapterTest.java
deleted file mode 100644
index 4a43e53..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/CheckClassAdapterTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-
-/**
- * CheckClassAdapter tests.
- * 
- * @author Eric Bruneton
- */
-public class CheckClassAdapterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new CheckClassAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        cr.accept(new CheckClassAdapter(cw), 0);
-        assertEquals(cr, new ClassReader(cw.toByteArray()));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/CheckClassAdapterUnitTest.java b/asm4/test/conform/org/objectweb/asm/util/CheckClassAdapterUnitTest.java
deleted file mode 100644
index 9e920a2..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/CheckClassAdapterUnitTest.java
+++ /dev/null
@@ -1,887 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.HashMap;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.attrs.Comment;
-
-public class CheckClassAdapterUnitTest extends TestCase implements Opcodes {
-
-    public void testCheckClassVisitor() throws Exception {
-        String s = getClass().getName();
-        CheckClassAdapter.main(new String[0]);
-        CheckClassAdapter.main(new String[] { s });
-        CheckClassAdapter
-                .main(new String[] { "output/test/cases/Interface.class" });
-    }
-
-    public void testVerifyValidClass() throws Exception {
-        ClassReader cr = new ClassReader(getClass().getName());
-        CheckClassAdapter.verify(cr, true, new PrintWriter(System.err));
-    }
-
-    public void testVerifyInvalidClass() {
-        ClassWriter cw = new ClassWriter(0);
-        cw.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "m", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitVarInsn(ISTORE, 30);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(1, 31);
-        mv.visitEnd();
-        cw.visitEnd();
-        ClassReader cr = new ClassReader(cw.toByteArray());
-        CheckClassAdapter.verify(cr, true, new PrintWriter(System.err));
-    }
-
-    public void testIllegalClassAccessFlag() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        try {
-            cv.visit(V1_1, 1 << 20, "C", null, "java/lang/Object", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalSuperClass() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        try {
-            cv.visit(V1_1, ACC_PUBLIC, "java/lang/Object", null,
-                    "java/lang/Object", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalInterfaceSuperClass() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        try {
-            cv.visit(V1_1, ACC_INTERFACE, "I", null, "C", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassSignature() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        try {
-            cv.visit(V1_1, ACC_PUBLIC, "C", "LC;I", "java/lang/Object", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassAccessFlagSet() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        try {
-            cv.visit(V1_1, ACC_FINAL + ACC_ABSTRACT, "C", null,
-                    "java/lang/Object", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassMemberVisitBeforeStart() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        try {
-            cv.visitSource(null, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassAttribute() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        try {
-            cv.visitAttribute(null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMultipleVisitCalls() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        try {
-            cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMultipleVisitSourceCalls() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        cv.visitSource(null, null);
-        try {
-            cv.visitSource(null, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalOuterClassName() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        try {
-            cv.visitOuterClass(null, null, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMultipleVisitOuterClassCalls() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        cv.visitOuterClass("name", null, null);
-        try {
-            cv.visitOuterClass(null, null, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldAccessFlagSet() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        try {
-            cv.visitField(ACC_PUBLIC + ACC_PRIVATE, "i", "I", null, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldSignature() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        try {
-            cv.visitField(ACC_PUBLIC, "i", "I", "L;", null);
-            fail();
-        } catch (Exception e) {
-        }
-        try {
-            cv.visitField(ACC_PUBLIC, "i", "I", "LC+", null);
-            fail();
-        } catch (Exception e) {
-        }
-        try {
-            cv.visitField(ACC_PUBLIC, "i", "I", "LC;I", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassMemberVisitAfterEnd() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        cv.visitEnd();
-        try {
-            cv.visitSource(null, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldMemberVisitAfterEnd() {
-        FieldVisitor fv = new CheckFieldAdapter(null);
-        fv.visitEnd();
-        try {
-            fv.visitAttribute(new Comment());
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldAttribute() {
-        FieldVisitor fv = new CheckFieldAdapter(null);
-        try {
-            fv.visitAttribute(null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalAnnotationDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        try {
-            mv.visitParameterAnnotation(0, "'", true);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalAnnotationName() {
-        AnnotationVisitor av = new CheckAnnotationAdapter(null);
-        try {
-            av.visit(null, new Integer(0));
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalAnnotationValue() {
-        AnnotationVisitor av = new CheckAnnotationAdapter(null);
-        try {
-            av.visit("name", new Object());
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalAnnotationEnumValue() {
-        AnnotationVisitor av = new CheckAnnotationAdapter(null);
-        try {
-            av.visitEnum("name", "Lpkg/Enum;", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalAnnotationValueAfterEnd() {
-        AnnotationVisitor av = new CheckAnnotationAdapter(null);
-        av.visitEnd();
-        try {
-            av.visit("name", new Integer(0));
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodMemberVisitAfterEnd() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitEnd();
-        try {
-            mv.visitAttribute(new Comment());
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodAttribute() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        try {
-            mv.visitAttribute(null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodSignature() {
-        ClassVisitor cv = new CheckClassAdapter(null);
-        cv.visit(V1_1, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-        try {
-            cv.visitMethod(ACC_PUBLIC, "m", "()V", "<T::LI.J<*+LA;>;>()V^LA;X",
-                    null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnVisitBeforeStart() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        try {
-            mv.visitInsn(NOP);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFrameType() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFrame(123, 0, null, 0, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFrameLocalCount() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFrame(F_SAME, 1, new Object[] { INTEGER }, 0, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFrameStackCount() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFrame(F_SAME, 0, null, 1, new Object[] { INTEGER });
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFrameLocalArray() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFrame(F_APPEND, 1, new Object[0], 0, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFrameStackArray() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFrame(F_SAME1, 0, null, 1, new Object[0]);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFrameValue() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFrame(F_FULL, 1, new Object[] { "LC;" }, 0, null);
-            fail();
-        } catch (Exception e) {
-        }
-        try {
-            mv.visitFrame(F_FULL, 1, new Object[] { new Integer(0) }, 0, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsn() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitInsn(-1);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalByteInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitIntInsn(BIPUSH, Integer.MAX_VALUE);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalShortInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitIntInsn(SIPUSH, Integer.MAX_VALUE);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalVarInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitVarInsn(ALOAD, -1);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalIntInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitIntInsn(NEWARRAY, 0);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTypeInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitTypeInsn(NEW, "[I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLabelInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        Label l = new Label();
-        mv.visitLabel(l);
-        try {
-            mv.visitLabel(l);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalDebugLabelUse() throws IOException {
-        ClassReader cr = new ClassReader("java.lang.Object");
-        ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
-        ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) {
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                final MethodVisitor next = cv.visitMethod(access, name, desc,
-                        signature, exceptions);
-                if (next == null) {
-                    return next;
-                }
-                return new MethodVisitor(Opcodes.ASM4, new CheckMethodAdapter(
-                        next)) {
-                    private Label entryLabel = null;
-
-                    @Override
-                    public void visitLabel(Label label) {
-                        if (entryLabel == null) {
-                            entryLabel = label;
-                        }
-                        mv.visitLabel(label);
-                    }
-
-                    @Override
-                    public void visitMaxs(int maxStack, int maxLocals) {
-                        Label unwindhandler = new Label();
-                        mv.visitLabel(unwindhandler);
-                        mv.visitInsn(Opcodes.ATHROW); // rethrow
-                        mv.visitTryCatchBlock(entryLabel, unwindhandler,
-                                unwindhandler, null);
-                        mv.visitMaxs(maxStack, maxLocals);
-                    }
-                };
-            }
-        };
-        try {
-            cr.accept(cv, ClassReader.EXPAND_FRAMES);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTableSwitchParameters1() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitTableSwitchInsn(1, 0, new Label(), new Label[0]);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTableSwitchParameters2() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitTableSwitchInsn(0, 1, null, new Label[0]);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTableSwitchParameters3() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitTableSwitchInsn(0, 1, new Label(), (Label[]) null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTableSwitchParameters4() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitTableSwitchInsn(0, 1, new Label(), new Label[0]);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLookupSwitchParameters1() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitLookupSwitchInsn(new Label(), null, new Label[0]);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLookupSwitchParameters2() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitLookupSwitchInsn(new Label(), new int[0], null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLookupSwitchParameters3() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitLookupSwitchInsn(new Label(), new int[0], new Label[1]);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnNullOwner() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, null, "i", "I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnOwner() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "-", "i", "I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnNullName() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", null, "I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnName() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "-", "I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnName2() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "a-", "I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnNullDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "i", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnVoidDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "i", "V");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnPrimitiveDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "i", "II");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnArrayDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "i", "[");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnReferenceDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "i", "L");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalFieldInsnReferenceDesc2() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitFieldInsn(GETFIELD, "C", "i", "L-;");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnNullName() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", null, "()V");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnName() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", "-", "()V");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnName2() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", "a-", "()V");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnNullDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", "m", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", "m", "I");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnParameterDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", "m", "(V)V");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMethodInsnReturnDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMethodInsn(INVOKEVIRTUAL, "C", "m", "()VV");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLdcInsnOperand() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitLdcInsn(new Object());
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMultiANewArrayDesc() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMultiANewArrayInsn("I", 1);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMultiANewArrayDims() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMultiANewArrayInsn("[[I", 0);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalMultiANewArrayDims2() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitMultiANewArrayInsn("[[I", 3);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTryCatchBlock() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        Label m = new Label();
-        Label n = new Label();
-        mv.visitLabel(m);
-        try {
-            mv.visitTryCatchBlock(m, n, n, null);
-            fail();
-        } catch (Exception e) {
-        }
-        try {
-            mv.visitTryCatchBlock(n, m, n, null);
-            fail();
-        } catch (Exception e) {
-        }
-        try {
-            mv.visitTryCatchBlock(n, n, m, null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalDataflow() {
-        MethodVisitor mv = new CheckMethodAdapter(ACC_PUBLIC, "m", "(I)V",
-                null, new HashMap<Label, Integer>());
-        mv.visitCode();
-        mv.visitVarInsn(ILOAD, 1);
-        mv.visitInsn(IRETURN);
-        mv.visitMaxs(1, 2);
-        try {
-            mv.visitEnd();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalDataflobjectweb() {
-        MethodVisitor mv = new CheckMethodAdapter(ACC_PUBLIC, "m", "(I)I",
-                null, new HashMap<Label, Integer>());
-        mv.visitCode();
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 2);
-        try {
-            mv.visitEnd();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLocalVariableLabels() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        Label m = new Label();
-        Label n = new Label();
-        mv.visitLabel(n);
-        mv.visitInsn(NOP);
-        mv.visitLabel(m);
-        try {
-            mv.visitLocalVariable("i", "I", null, m, n, 0);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalLineNumerLabel() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        try {
-            mv.visitLineNumber(0, new Label());
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalInsnVisitAfterEnd() {
-        MethodVisitor mv = new CheckMethodAdapter(null);
-        mv.visitCode();
-        mv.visitMaxs(0, 0);
-        try {
-            mv.visitInsn(NOP);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/CheckSignatureAdapterTest.java b/asm4/test/conform/org/objectweb/asm/util/CheckSignatureAdapterTest.java
deleted file mode 100644
index 9bd1161..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/CheckSignatureAdapterTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.signature.SignatureReader;
-import org.objectweb.asm.signature.SignatureWriter;
-
-/**
- * CheckSignatureAdapter tests.
- * 
- * @author Eric Bruneton
- */
-public class CheckSignatureAdapterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new CheckSignatureAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        cr.accept(new ClassVisitor(Opcodes.ASM4) {
-            @Override
-            public void visit(int version, int access, String name,
-                    String signature, String superName, String[] interfaces) {
-                if (signature != null) {
-                    SignatureReader sr = new SignatureReader(signature);
-                    SignatureWriter sw = new SignatureWriter();
-                    sr.accept(new CheckSignatureAdapter(
-                            CheckSignatureAdapter.CLASS_SIGNATURE, sw));
-                    assertEquals(signature, sw.toString());
-                }
-            }
-
-            @Override
-            public FieldVisitor visitField(int access, String name,
-                    String desc, String signature, Object value) {
-                if (signature != null) {
-                    SignatureReader sr = new SignatureReader(signature);
-                    SignatureWriter sw = new SignatureWriter();
-                    sr.acceptType(new CheckSignatureAdapter(
-                            CheckSignatureAdapter.TYPE_SIGNATURE, sw));
-                    assertEquals(signature, sw.toString());
-                }
-                return null;
-            }
-
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                if (signature != null) {
-                    SignatureReader sr = new SignatureReader(signature);
-                    SignatureWriter sw = new SignatureWriter();
-                    sr.accept(new CheckSignatureAdapter(
-                            CheckSignatureAdapter.METHOD_SIGNATURE, sw));
-                    assertEquals(signature, sw.toString());
-                }
-                return null;
-            }
-
-        }, 0);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/CheckSignatureAdapterUnitTest.java b/asm4/test/conform/org/objectweb/asm/util/CheckSignatureAdapterUnitTest.java
deleted file mode 100644
index c134c67..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/CheckSignatureAdapterUnitTest.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.signature.SignatureReader;
-import org.objectweb.asm.signature.SignatureVisitor;
-import org.objectweb.asm.signature.SignatureWriter;
-import org.objectweb.asm.util.TraceSignatureVisitorUnitTest.TestData;
-
-/**
- * CheckSignatureAdapter tests.
- * 
- * @author Eric Bruneton
- */
-public class CheckSignatureAdapterUnitTest extends TestCase {
-
-    public static TestSuite suite() {
-        TestSuite suite = new TestSuite(
-                CheckSignatureAdapterUnitTest.class.getName());
-        for (int i = 0; i < TraceSignatureVisitorUnitTest.DATA.length; i++) {
-            suite.addTest(new CheckSignatureAdapterUnitTest(new TestData(
-                    TraceSignatureVisitorUnitTest.DATA[i])));
-        }
-        suite.addTestSuite(CheckSignatureAdapterUnitTest.class);
-        return suite;
-    }
-
-    private TestData data;
-
-    private SignatureVisitor sv;
-
-    public CheckSignatureAdapterUnitTest() {
-    }
-
-    private CheckSignatureAdapterUnitTest(final TestData data) {
-        super("checkSignature");
-        this.data = data;
-    }
-
-    public void checkSignature() {
-        SignatureWriter wrt = new SignatureWriter();
-        SignatureReader rdr = new SignatureReader(data.signature);
-        switch (data.type) {
-        case 'C':
-            rdr.accept(new CheckSignatureAdapter(
-                    CheckSignatureAdapter.CLASS_SIGNATURE, wrt));
-            break;
-        case 'M':
-            rdr.accept(new CheckSignatureAdapter(
-                    CheckSignatureAdapter.METHOD_SIGNATURE, wrt));
-            break;
-        case 'F':
-            rdr.acceptType(new CheckSignatureAdapter(
-                    CheckSignatureAdapter.TYPE_SIGNATURE, wrt));
-            break;
-        default:
-            return;
-        }
-        assertEquals(data.signature, wrt.toString());
-    }
-
-    public void testIllegalFormalTypeParam() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitFormalTypeParameter("T");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassBound() {
-        setup(CheckSignatureAdapter.CLASS_SIGNATURE);
-        try {
-            sv.visitClassBound();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalInterfaceBound() {
-        setup(CheckSignatureAdapter.CLASS_SIGNATURE);
-        try {
-            sv.visitInterfaceBound();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalSuperclass() {
-        setup(CheckSignatureAdapter.METHOD_SIGNATURE);
-        try {
-            sv.visitSuperclass();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalInterface() {
-        setup(CheckSignatureAdapter.CLASS_SIGNATURE);
-        try {
-            sv.visitInterface();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalParameterType() {
-        setup(CheckSignatureAdapter.CLASS_SIGNATURE);
-        try {
-            sv.visitParameterType();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalReturnType() {
-        setup(CheckSignatureAdapter.METHOD_SIGNATURE);
-        try {
-            sv.visitReturnType();
-            sv.visitReturnType();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalExceptionType() {
-        setup(CheckSignatureAdapter.METHOD_SIGNATURE);
-        try {
-            sv.visitExceptionType();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalBaseType() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitBaseType('I');
-            sv.visitBaseType('I');
-            fail();
-        } catch (Exception e) {
-        }
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitBaseType('V');
-            fail();
-        } catch (Exception e) {
-        }
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitBaseType('A');
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTypeVariable() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitTypeVariable("T");
-            sv.visitTypeVariable("T");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalArrayType() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitArrayType();
-            sv.visitArrayType();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalClassType() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitClassType("A");
-            sv.visitClassType("A");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalInnerClassType() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitInnerClassType("A");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalTypeArgument() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitTypeArgument();
-            fail();
-        } catch (Exception e) {
-        }
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitTypeArgument('+');
-            fail();
-        } catch (Exception e) {
-        }
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitClassType("A");
-            sv.visitTypeArgument('*');
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testIllegalEnd() {
-        setup(CheckSignatureAdapter.TYPE_SIGNATURE);
-        try {
-            sv.visitEnd();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    @Override
-    public String getName() {
-        if (data == null) {
-            return super.getName();
-        } else {
-            return super.getName() + " " + data.signature;
-        }
-    }
-
-    private void setup(int type) {
-        sv = new CheckSignatureAdapter(type, null);
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/TraceClassAdapterTest.java b/asm4/test/conform/org/objectweb/asm/util/TraceClassAdapterTest.java
deleted file mode 100644
index 000690a..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/TraceClassAdapterTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.attrs.CodeComment;
-import org.objectweb.asm.attrs.Comment;
-
-/**
- * CheckClassAdapter tests.
- * 
- * @author Eric Bruneton
- */
-public class TraceClassAdapterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new TraceClassAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        ClassVisitor cv = new TraceClassVisitor(cw, new PrintWriter(
-                new CharArrayWriter()));
-        cr.accept(cv, new Attribute[] { new Comment(), new CodeComment() }, 0);
-        assertEquals(cr, new ClassReader(cw.toByteArray()));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/TraceClassAdapterUnitTest.java b/asm4/test/conform/org/objectweb/asm/util/TraceClassAdapterUnitTest.java
deleted file mode 100644
index b38ecfd..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/TraceClassAdapterUnitTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import junit.framework.TestCase;
-
-/**
- * TraceClassAdapter unit tests
- * 
- * @author Eric Bruneton
- */
-public class TraceClassAdapterUnitTest extends TestCase {
-
-    public void testTraceClassVisitor() throws Exception {
-        String s = getClass().getName();
-        Textifier.main(new String[0]);
-        Textifier.main(new String[] { "-debug" });
-        Textifier.main(new String[] { s });
-        Textifier.main(new String[] { "-debug", s });
-        Textifier.main(new String[] { "output/test/cases/Interface.class" });
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/TraceSignatureVisitorUnitTest.java b/asm4/test/conform/org/objectweb/asm/util/TraceSignatureVisitorUnitTest.java
deleted file mode 100644
index a7b1068..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/TraceSignatureVisitorUnitTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.util.StringTokenizer;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.signature.SignatureReader;
-
-/**
- * TraceSignatureVisitor unit tests.
- * 
- * @author Eugene Kuleshov
- */
-public class TraceSignatureVisitorUnitTest extends TestCase {
-
-    public final static String[] DATA = {
-            "C|E|<E extends java.lang.Enum<E>> implements java.lang.Comparable<E>, java.io.Serializable"
-                    + "|<E:Ljava/lang/Enum<TE;>;>Ljava/lang/Object;Ljava/lang/Comparable<TE;>;Ljava/io/Serializable;",
-
-            "C|I|<D extends java.lang.reflect.GenericDeclaration> extends java.lang.reflect.Type"
-                    + "|<D::Ljava/lang/reflect/GenericDeclaration;>Ljava/lang/Object;Ljava/lang/reflect/Type;",
-
-            "C|C|<K, V> extends java.util.AbstractMap<K, V> implements java.util.concurrent.ConcurrentMap<K, V>, java.io.Serializable"
-                    + "|<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/concurrent/ConcurrentMap<TK;TV;>;Ljava/io/Serializable;",
-
-            "C|C|<K extends java.lang.Enum<K>, V> extends java.util.AbstractMap<K, V> implements java.io.Serializable, java.lang.Cloneable"
-                    + "|<K:Ljava/lang/Enum<TK;>;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/io/Serializable;Ljava/lang/Cloneable;",
-
-            "F|C|java.lang.Class<?>|Ljava/lang/Class<*>;",
-
-            "F|C|java.lang.reflect.Constructor<T>|Ljava/lang/reflect/Constructor<TT;>;",
-
-            "F|C|T[]|[TT;",
-
-            "F|C|java.util.Hashtable<?, ?>|Ljava/util/Hashtable<**>;",
-
-            "F|C|java.util.concurrent.atomic.AtomicReferenceFieldUpdater<java.io.BufferedInputStream, byte[]>"
-                    + "|Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater<Ljava/io/BufferedInputStream;[B>;",
-
-            "F|C|AA<byte[][]>|LAA<[[B>;",
-
-            "F|C|AA<java.util.Map<java.lang.String, java.lang.String>[][]>"
-                    + "|LAA<[[Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;>;",
-
-            "F|C|java.util.Hashtable<java.lang.Object, java.lang.String>"
-                    + "|Ljava/util/Hashtable<Ljava/lang/Object;Ljava/lang/String;>;",
-
-            "M|C|void(boolean, byte, char, short, int, float, long, double)"
-                    + "|(ZBCSIFJD)V",
-
-            "M|C|void()E, F|()V^TE;^TF;",
-
-            "M|C|java.lang.Class<? extends E><E extends java.lang.Class>()"
-                    + "|<E:Ljava/lang/Class;>()Ljava/lang/Class<+TE;>;",
-
-            "M|C|java.lang.Class<? super E><E extends java.lang.Class>()"
-                    + "|<E:Ljava/lang/Class;>()Ljava/lang/Class<-TE;>;",
-
-            "M|C|void(A<E>.B)|(LA<TE;>.B;)V",
-
-            "M|C|void(A<E>.B<F>)|(LA<TE;>.B<TF;>;)V",
-
-            "M|C|void(java.lang.String, java.lang.Class<?>, java.lang.reflect.Method[], java.lang.reflect.Method, java.lang.reflect.Method)"
-                    + "|(Ljava/lang/String;Ljava/lang/Class<*>;[Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V",
-
-            "M|C|java.util.Map<java.lang.Object, java.lang.String>(java.lang.Object, java.util.Map<java.lang.Object, java.lang.String>)"
-                    + "|(Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Ljava/lang/String;>;)Ljava/util/Map<Ljava/lang/Object;Ljava/lang/String;>;",
-
-            "M|C|java.util.Map<java.lang.Object, java.lang.String><T>(java.lang.Object, java.util.Map<java.lang.Object, java.lang.String>, T)"
-                    + "|<T:Ljava/lang/Object;>(Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Ljava/lang/String;>;TT;)Ljava/util/Map<Ljava/lang/Object;Ljava/lang/String;>;",
-
-            "M|C|java.util.Map<java.lang.Object, java.lang.String><E, T extends java.lang.Comparable<E>>(java.lang.Object, java.util.Map<java.lang.Object, java.lang.String>, T)"
-                    + "|<E:Ljava/lang/Object;T::Ljava/lang/Comparable<TE;>;>(Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Ljava/lang/String;>;TT;)Ljava/util/Map<Ljava/lang/Object;Ljava/lang/String;>;", };
-
-    public static TestSuite suite() {
-        TestSuite suite = new TestSuite(
-                TraceSignatureVisitorUnitTest.class.getName());
-        for (int i = 0; i < DATA.length; i++) {
-            suite.addTest(new TraceSignatureVisitorUnitTest(new TestData(
-                    DATA[i])));
-        }
-        return suite;
-    }
-
-    private TestData data;
-
-    private TraceSignatureVisitorUnitTest(final TestData data) {
-        super("testSignature");
-        this.data = data;
-    }
-
-    public void testSignature() {
-        TraceSignatureVisitor d = new TraceSignatureVisitor(data.access);
-        SignatureReader r = new SignatureReader(data.signature);
-
-        switch (data.type) {
-        case 'C':
-            r.accept(d);
-            assertEquals(data.declaration, d.getDeclaration());
-            break;
-        case 'F':
-            r.acceptType(d);
-            assertEquals(data.declaration, d.getDeclaration());
-            break;
-        case 'M':
-            r.accept(d);
-            String fullMethodDeclaration = d.getReturnType()
-                    + d.getDeclaration()
-                    + (d.getExceptions() != null ? d.getExceptions() : "");
-            assertEquals(data.declaration, fullMethodDeclaration);
-            break;
-        }
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + " " + data.signature;
-    }
-
-    public static class TestData {
-
-        public final char type;
-
-        public final int access;
-
-        public final String declaration;
-
-        public final String signature;
-
-        public TestData(final String data) {
-            StringTokenizer st = new StringTokenizer(data, "|");
-            this.type = st.nextToken().charAt(0);
-
-            String acc = st.nextToken();
-            switch (acc.charAt(0)) {
-            case 'E':
-                this.access = Opcodes.ACC_ENUM;
-                break;
-            case 'I':
-                this.access = Opcodes.ACC_INTERFACE;
-                break;
-            case 'A':
-                this.access = Opcodes.ACC_ANNOTATION;
-                break;
-            default:
-                this.access = 0;
-            }
-
-            this.declaration = st.nextToken();
-            this.signature = st.nextToken();
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/util/VerifyClassTest.java b/asm4/test/conform/org/objectweb/asm/util/VerifyClassTest.java
deleted file mode 100644
index b8a8684..0000000
--- a/asm4/test/conform/org/objectweb/asm/util/VerifyClassTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.util;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.ClassReader;
-
-/**
- * CheckClassAdapter tests.
- * 
- * @author Eric Bruneton
- */
-public class VerifyClassTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new VerifyClassTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        if (n.startsWith("pkg.")) {
-            return;
-        }
-        ClassReader cr = new ClassReader(is);
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        CheckClassAdapter.verify(cr, false, pw);
-        pw.close();
-        String s = sw.toString();
-        if (!s.isEmpty()) {
-            System.out.println("In class: " + n);
-            System.out.println(s);
-        }
-        assertTrue(s.isEmpty());
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/xml/ASMContentHandlerUnitTest.java b/asm4/test/conform/org/objectweb/asm/xml/ASMContentHandlerUnitTest.java
deleted file mode 100644
index 9d76f9d..0000000
--- a/asm4/test/conform/org/objectweb/asm/xml/ASMContentHandlerUnitTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import junit.framework.TestCase;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * ASMContentHandler unit tests
- * 
- * @author Eric Bruneton
- */
-public class ASMContentHandlerUnitTest extends TestCase implements Opcodes {
-
-    ASMContentHandler h;
-
-    ClassVisitor cv;
-
-    MethodVisitor mv;
-
-    @Override
-    protected void setUp() throws Exception {
-        h = new ASMContentHandler(new ClassVisitor(Opcodes.ASM4) {
-
-            AnnotationVisitor av = new AnnotationVisitor(Opcodes.ASM4) {
-
-                @Override
-                public AnnotationVisitor visitAnnotation(String name,
-                        String desc) {
-                    return this;
-                }
-
-                @Override
-                public AnnotationVisitor visitArray(String name) {
-                    return this;
-                }
-            };
-
-            @Override
-            public AnnotationVisitor visitAnnotation(String desc,
-                    boolean visible) {
-                return av;
-            }
-
-            @Override
-            public FieldVisitor visitField(int access, String name,
-                    String desc, String signature, Object value) {
-                return new FieldVisitor(Opcodes.ASM4) {
-
-                    @Override
-                    public AnnotationVisitor visitAnnotation(String desc,
-                            boolean visible) {
-                        return av;
-                    }
-                };
-            }
-
-            @Override
-            public MethodVisitor visitMethod(int access, String name,
-                    String desc, String signature, String[] exceptions) {
-                return new MethodVisitor(Opcodes.ASM4) {
-
-                    @Override
-                    public AnnotationVisitor visitAnnotationDefault() {
-                        return av;
-                    }
-
-                    @Override
-                    public AnnotationVisitor visitAnnotation(String desc,
-                            boolean visible) {
-                        return av;
-                    }
-
-                    @Override
-                    public AnnotationVisitor visitParameterAnnotation(
-                            int parameter, String desc, boolean visible) {
-                        return av;
-                    }
-                };
-            }
-        });
-        cv = new SAXClassAdapter(h, true);
-        cv.visit(V1_5, ACC_PUBLIC, "C", null, "java/lang/Object", null);
-    }
-
-    protected void methodSetUp() {
-        mv = cv.visitMethod(0, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-    }
-
-    public void testInvalidOpcode() {
-        methodSetUp();
-        AttributesImpl attrs = new AttributesImpl();
-        try {
-            h.startElement("", "opcode", "", attrs);
-            h.endElement("", "opcode", "");
-            fail();
-        } catch (SAXException e) {
-        }
-    }
-
-    public void testInvalidValueDescriptor() {
-        methodSetUp();
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "desc", "desc", "", "desc");
-        attrs.addAttribute("", "cst", "cst", "", "");
-        try {
-            h.startElement("", "LDC", "", attrs);
-            h.endElement("", "LDC", "");
-            fail();
-        } catch (SAXException e) {
-        }
-    }
-
-    public void testInvalidValue() {
-        methodSetUp();
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "desc", "desc", "", "Ljava/lang/String;");
-        attrs.addAttribute("", "cst", "cst", "", "\\");
-        try {
-            h.startElement("", "LDC", "", attrs);
-            h.endElement("", "LDC", "");
-            fail();
-        } catch (SAXException e) {
-        }
-    }
-
-    public void testEndDocument() {
-        cv.visitEnd();
-        try {
-            h.endDocument();
-        } catch (SAXException e) {
-        }
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/xml/SAXAdapterTest.java b/asm4/test/conform/org/objectweb/asm/xml/SAXAdapterTest.java
deleted file mode 100644
index 3955a36..0000000
--- a/asm4/test/conform/org/objectweb/asm/xml/SAXAdapterTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import java.io.ByteArrayOutputStream;
-
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.AbstractTest;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-
-/**
- * SAXAdapter tests
- * 
- * @author Eugene Kuleshov
- */
-public class SAXAdapterTest extends AbstractTest {
-
-    public static TestSuite suite() throws Exception {
-        return new SAXAdapterTest().getSuite();
-    }
-
-    @Override
-    public void test() throws Exception {
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-
-        SAXTransformerFactory saxtf = (SAXTransformerFactory) TransformerFactory
-                .newInstance();
-        TransformerHandler handler = saxtf.newTransformerHandler();
-        handler.setResult(new SAXResult(new ASMContentHandler(cw)));
-        handler.startDocument();
-        cr.accept(new SAXClassAdapter(handler, false), 0);
-        handler.endDocument();
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        bos.write(cw.toByteArray());
-
-        ClassWriter cw2 = new ClassWriter(0);
-        cr.accept(cw2, new Attribute[] { new Attribute("Comment") {
-            @Override
-            protected Attribute read(final ClassReader cr, final int off,
-                    final int len, final char[] buf, final int codeOff,
-                    final Label[] labels) {
-                return null; // skip these attributes
-            }
-        }, new Attribute("CodeComment") {
-            @Override
-            protected Attribute read(final ClassReader cr, final int off,
-                    final int len, final char[] buf, final int codeOff,
-                    final Label[] labels) {
-                return null; // skip these attributes
-            }
-        } }, 0);
-
-        assertEquals(new ClassReader(cw2.toByteArray()),
-                new ClassReader(bos.toByteArray()));
-    }
-}
diff --git a/asm4/test/conform/org/objectweb/asm/xml/SAXAdapterUnitTest.java b/asm4/test/conform/org/objectweb/asm/xml/SAXAdapterUnitTest.java
deleted file mode 100644
index 52703d5..0000000
--- a/asm4/test/conform/org/objectweb/asm/xml/SAXAdapterUnitTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import junit.framework.TestCase;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * SAXAdapter unit tests
- * 
- * @author Eric Bruneton
- */
-public class SAXAdapterUnitTest extends TestCase {
-
-    SAXAdapter sa;
-
-    @Override
-    protected void setUp() {
-        sa = new SAXAdapter(new DefaultHandler() {
-
-            @Override
-            public void startDocument() throws SAXException {
-                throw new SAXException();
-            }
-
-            @Override
-            public void endDocument() throws SAXException {
-                throw new SAXException();
-            }
-
-            @Override
-            public void startElement(final String arg0, final String arg1,
-                    final String arg2, final Attributes arg3)
-                    throws SAXException {
-                throw new SAXException();
-            }
-
-            @Override
-            public void endElement(final String arg0, final String arg1,
-                    final String arg2) throws SAXException {
-                throw new SAXException();
-            }
-        }) {
-        };
-    }
-
-    public void testInvalidAddDocumentStart() {
-        try {
-            sa.addDocumentStart();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testInvalidAddDocumentEnd() {
-        try {
-            sa.addDocumentEnd();
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testInvalidAddStart() {
-        try {
-            sa.addStart("name", null);
-            fail();
-        } catch (Exception e) {
-        }
-    }
-
-    public void testInvalidAddEnd() {
-        try {
-            sa.addEnd("name");
-            fail();
-        } catch (Exception e) {
-        }
-    }
-}
diff --git a/asm4/test/conform/remappingadapter.xml b/asm4/test/conform/remappingadapter.xml
deleted file mode 100644
index cb9a32b..0000000
--- a/asm4/test/conform/remappingadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/RemappingClassAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/remappingadapter2.xml b/asm4/test/conform/remappingadapter2.xml
deleted file mode 100644
index 1b147f6..0000000
--- a/asm4/test/conform/remappingadapter2.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/RemappingClassAdapterTest2.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/saxadapter.xml b/asm4/test/conform/saxadapter.xml
deleted file mode 100644
index add68ce..0000000
--- a/asm4/test/conform/saxadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/SAXAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/signaturewriter.xml b/asm4/test/conform/signaturewriter.xml
deleted file mode 100644
index 892b41a..0000000
--- a/asm4/test/conform/signaturewriter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/SignatureWriterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>
-  </target>
-
-</project>
diff --git a/asm4/test/conform/simpleverifier.xml b/asm4/test/conform/simpleverifier.xml
deleted file mode 100644
index f321e46..0000000
--- a/asm4/test/conform/simpleverifier.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test.normal" unless="coverage">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.tree.analysis.SimpleVerifierTest" 
-            fork="yes" 
-            todir="${out.test}/reports"
-            outfile="TEST-org.objectweb.asm.tree.analysis.SimpleVerifierTest-1">
-      </test>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Dparts=2"/>
-      <jvmarg value="-Dpart=0"/>      
-    </junit>  
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <test name="org.objectweb.asm.tree.analysis.SimpleVerifierTest" 
-            fork="yes" 
-            todir="${out.test}/reports"
-            outfile="TEST-org.objectweb.asm.tree.analysis.SimpleVerifierTest-2">
-      </test>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-      <jvmarg value="-Dparts=2"/>
-      <jvmarg value="-Dpart=1"/>      
-    </junit>  
-  </target>
-
-  <target name="test.coverage" if="coverage">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/SimpleVerifierTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <classpath>
-          <pathelement location="${out.test}/cases"/>
-      </classpath>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-  <target name="test" depends="test.normal,test.coverage"/>
-
-</project>
diff --git a/asm4/test/conform/sourceinterpreter.xml b/asm4/test/conform/sourceinterpreter.xml
deleted file mode 100644
index 53100f9..0000000
--- a/asm4/test/conform/sourceinterpreter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/SourceInterpreterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/staticinitmerger.xml b/asm4/test/conform/staticinitmerger.xml
deleted file mode 100644
index 8606334..0000000
--- a/asm4/test/conform/staticinitmerger.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/StaticInitMergerTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/svuidadder.xml b/asm4/test/conform/svuidadder.xml
deleted file mode 100644
index 3cdcbc2..0000000
--- a/asm4/test/conform/svuidadder.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/SerialVersionUIDAdderTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/traceclassadapter.xml b/asm4/test/conform/traceclassadapter.xml
deleted file mode 100644
index fb4b873..0000000
--- a/asm4/test/conform/traceclassadapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/TraceClassAdapterTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/unit.xml b/asm4/test/conform/unit.xml
deleted file mode 100644
index 456c8ab..0000000
--- a/asm4/test/conform/unit.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/*UnitTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/conform/verifyclass.xml b/asm4/test/conform/verifyclass.xml
deleted file mode 100644
index cf75f24..0000000
--- a/asm4/test/conform/verifyclass.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="conform" default="test">
-
-  <target name="test">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${out.test}/reports">
-        <fileset dir="${test}/conform">
-          <include name="**/VerifyClassTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="test.classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/test/perf/all.xml b/asm4/test/perf/all.xml
deleted file mode 100644
index f76a59c..0000000
--- a/asm4/test/perf/all.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="perf" default="test">
-  <target name="test">
-    <java classname="org.objectweb.asm.ALLPerfTest" fork="yes">
-      <classpath>
-        <pathelement location="${out.build}"/>
-        <pathelement location="${out.test}"/>
-        <fileset dir="${test}">
-          <include name="lib/bcel-5.2.jar"/>
-          <include name="lib/aspectjweaver-1.5.3.jar"/>
-          <include name="lib/serp-1.14.2.jar"/>
-          <include name="lib/javassist.3.6.GA.jar"/>
-          <!-- xslt engines -->
-          <include name="lib/jd.xslt-1.5.5.jar"/>
-          <include name="lib/saxon7.jar"/>
-          <include name="lib/xalan-2.6.0.jar"/>
-        </fileset>
-      </classpath>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}" /> 
-      <jvmarg value="-Xmx512M" /> 
-      <jvmarg value="-Drepeats=5" /> 
-    </java>
-  </target>
-</project>
diff --git a/asm4/test/perf/gen.xml b/asm4/test/perf/gen.xml
deleted file mode 100644
index 54bbf05..0000000
--- a/asm4/test/perf/gen.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="perf" default="test">
-  <target name="test">
-    <java classname="org.objectweb.asm.GenPerfTest" fork="yes">
-      <classpath>
-        <pathelement location="${out.build}"/>
-        <pathelement location="${out.test}"/>
-        <fileset dir="${test}">
-          <include name="lib/csg-bytecode.jar"/>
-          <include name="lib/kawa-1.9.1.jar"/>
-          <include name="lib/cojen-2.0.jar"/>
-          <include name="lib/jbet3-R1.jar"/>
-          <include name="lib/jclasslib.jar"/>
-          <include name="lib/jiapi.jar"/>
-          <include name="lib/log4j-1.2.9.jar"/>
-          <include name="lib/rhino1_7R1.jar"/>
-          <include name="lib/bcel-5.2.jar"/>
-          <include name="lib/aspectjweaver-1.5.3.jar"/>
-        </fileset>
-      </classpath>
-    </java>
-  </target>
-</project>
diff --git a/asm4/test/perf/mem.xml b/asm4/test/perf/mem.xml
deleted file mode 100644
index 7ddb246..0000000
--- a/asm4/test/perf/mem.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! 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.
--->
-
-<project name="perf" default="test">
-  <target name="test">
-    <java classname="org.objectweb.asm.ASMMemTest" fork="yes">
-      <classpath>
-        <pathelement location="${out.build}"/>
-        <pathelement location="${out.test}"/>
-      </classpath>
-      <arg value="${java.home}/lib/rt.jar"/>
-      <arg value="2000"/>
-    </java>
-  </target>
-</project>
diff --git a/asm4/test/perf/org/apache/bcel/verifier/structurals/ModifiedPass3bVerifier.java b/asm4/test/perf/org/apache/bcel/verifier/structurals/ModifiedPass3bVerifier.java
deleted file mode 100644
index 545023a..0000000
--- a/asm4/test/perf/org/apache/bcel/verifier/structurals/ModifiedPass3bVerifier.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Copyright  2000-2004 The Apache Software Foundation
- *
- *  Licensed 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.bcel.verifier.structurals;
-
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.Vector;
-
-import org.apache.bcel.Constants;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.bcel.classfile.Method;
-import org.apache.bcel.generic.ConstantPoolGen;
-import org.apache.bcel.generic.GETFIELD;
-import org.apache.bcel.generic.InstructionHandle;
-import org.apache.bcel.generic.InvokeInstruction;
-import org.apache.bcel.generic.JsrInstruction;
-import org.apache.bcel.generic.LoadInstruction;
-import org.apache.bcel.generic.MethodGen;
-import org.apache.bcel.generic.ObjectType;
-import org.apache.bcel.generic.RET;
-import org.apache.bcel.generic.ReturnInstruction;
-import org.apache.bcel.generic.ReturnaddressType;
-import org.apache.bcel.generic.Type;
-import org.apache.bcel.verifier.PassVerifier;
-import org.apache.bcel.verifier.VerificationResult;
-import org.apache.bcel.verifier.exc.AssertionViolatedException;
-import org.apache.bcel.verifier.exc.StructuralCodeConstraintException;
-import org.apache.bcel.verifier.exc.VerifierConstraintViolatedException;
-
-/**
- * This PassVerifier verifies a method of class file according to pass 3,
- * so-called structural verification as described in The Java Virtual Machine
- * Specification, 2nd edition.
- * More detailed information is to be found at the do_verify() method's
- * documentation. 
- *
- * @version $Id: ModifiedPass3bVerifier.java,v 1.3 2007-11-08 17:22:56 ebruneton Exp $
- * @author Enver Haase
- * @see #do_verify()
- */
-
-public final class ModifiedPass3bVerifier extends PassVerifier{
-    /* TODO:    Throughout pass 3b, upper halves of LONG and DOUBLE
-                        are represented by Type.UNKNOWN. This should be changed
-                        in favour of LONG_Upper and DOUBLE_Upper as in pass 2. */
-
-    /**
-     * An InstructionContextQueue is a utility class that holds
-     * (InstructionContext, ArrayList) pairs in a Queue data structure.
-     * This is used to hold information about InstructionContext objects
-     * externally --- i.e. that information is not saved inside the
-     * InstructionContext object itself. This is useful to save the
-     * execution path of the symbolic execution of the
-     * Pass3bVerifier - this is not information
-     * that belongs into the InstructionContext object itself.
-     * Only at "execute()"ing
-     * time, an InstructionContext object will get the current information
-     * we have about its symbolic execution predecessors.
-     */
-    static final class InstructionContextQueue{
-        private List<InstructionContext> ics = new Vector<InstructionContext>(); // Type: InstructionContext
-        private List<ArrayList<InstructionContext>> ecs = new Vector<ArrayList<InstructionContext>>(); // Type: ArrayList (of InstructionContext)
-        public void add(InstructionContext ic, ArrayList<InstructionContext> executionChain){
-            ics.add(ic);
-            ecs.add(executionChain);
-        }
-        public boolean isEmpty(){
-            return ics.isEmpty();
-        }
-        public void remove(){
-            this.remove(0);
-        }
-        public void remove(int i){
-            ics.remove(i);
-            ecs.remove(i);
-        }
-        public InstructionContext getIC(int i){
-            return ics.get(i);
-        }
-        public ArrayList<InstructionContext> getEC(int i){
-            return ecs.get(i);
-        }
-        public int size(){
-            return ics.size();
-        }
-    } // end Inner Class InstructionContextQueue
-
-    /** In DEBUG mode, the verification algorithm is not randomized. */
-    private static final boolean DEBUG = true;
-
-    private JavaClass jc;
-
-    /** The method number to verify. */
-    private int method_no;
-
-    /**
-     * This class should only be instantiated by a Verifier.
-     *
-     * @see org.apache.bcel.verifier.Verifier
-     */
-    public ModifiedPass3bVerifier(JavaClass jc, int method_no){
-        this.jc = jc;
-        this.method_no = method_no;
-    }
-
-    /**
-     * Whenever the outgoing frame
-     * situation of an InstructionContext changes, all its successors are
-     * put [back] into the queue [as if they were unvisited].
-   * The proof of termination is about the existence of a
-   * fix point of frame merging.
-     */
-    private void circulationPump(MethodGen m,ControlFlowGraph cfg, InstructionContext start, Frame vanillaFrame, InstConstraintVisitor icv, ExecutionVisitor ev){
-        final Random random = new Random();
-        InstructionContextQueue icq = new InstructionContextQueue();
-        
-        start.execute(vanillaFrame, new ArrayList<InstructionContext>(), icv, ev);  // new ArrayList() <=>  no Instruction was executed before
-                                                                                                    //                                  => Top-Level routine (no jsr call before)
-        icq.add(start, new ArrayList<InstructionContext>());
-
-        // LOOP!
-        while (!icq.isEmpty()){
-            InstructionContext u;
-            ArrayList<InstructionContext> ec;
-            if (!DEBUG){
-                int r = random.nextInt(icq.size());
-                u = icq.getIC(r);
-                ec = icq.getEC(r);
-                icq.remove(r);
-            }
-            else{
-                u  = icq.getIC(0);
-                ec = icq.getEC(0);
-                icq.remove(0);
-            }
-            
-            ArrayList<InstructionContext> oldchain = new ArrayList<InstructionContext>(ec);
-            ArrayList<InstructionContext> newchain = new ArrayList<InstructionContext>(ec);
-            newchain.add(u);
-
-            if ((u.getInstruction().getInstruction()) instanceof RET){
-//System.err.println(u);
-                // We can only follow _one_ successor, the one after the
-                // JSR that was recently executed.
-                RET ret = (RET) (u.getInstruction().getInstruction());
-                ReturnaddressType t = (ReturnaddressType) u.getOutFrame(oldchain).getLocals().get(ret.getIndex());
-                InstructionContext theSuccessor = cfg.contextOf(t.getTarget());
-
-                // Sanity check
-                InstructionContext lastJSR = null;
-                int skip_jsr = 0;
-                for (int ss=oldchain.size()-1; ss >= 0; ss--){
-                    if (skip_jsr < 0){
-                        throw new AssertionViolatedException("More RET than JSR in execution chain?!");
-                    }
-//System.err.println("+"+oldchain.get(ss));
-                    if ((oldchain.get(ss)).getInstruction().getInstruction() instanceof JsrInstruction){
-                        if (skip_jsr == 0){
-                            lastJSR = oldchain.get(ss);
-                            break;
-                        }
-                        else{
-                            skip_jsr--;
-                        }
-                    }
-                    if ((oldchain.get(ss)).getInstruction().getInstruction() instanceof RET){
-                        skip_jsr++;
-                    }
-                }
-                if (lastJSR == null){
-                    throw new AssertionViolatedException("RET without a JSR before in ExecutionChain?! EC: '"+oldchain+"'.");
-                }
-                JsrInstruction jsr = (JsrInstruction) (lastJSR.getInstruction().getInstruction());
-                if ( theSuccessor != (cfg.contextOf(jsr.physicalSuccessor())) ){
-                    throw new AssertionViolatedException("RET '"+u.getInstruction()+"' info inconsistent: jump back to '"+theSuccessor+"' or '"+cfg.contextOf(jsr.physicalSuccessor())+"'?");
-                }
-                
-                if (theSuccessor.execute(u.getOutFrame(oldchain), newchain, icv, ev)){
-                    icq.add(theSuccessor, new ArrayList<InstructionContext> (newchain));
-                }
-            }
-            else{// "not a ret"
-            
-                // Normal successors. Add them to the queue of successors.
-                InstructionContext[] succs = u.getSuccessors();
-                for (int s=0; s<succs.length; s++){
-                    InstructionContext v = succs[s];
-                    if (v.execute(u.getOutFrame(oldchain), newchain, icv, ev)){
-                        icq.add(v, new ArrayList<InstructionContext> (newchain));
-                    }
-                }
-            }// end "not a ret"
-
-            // Exception Handlers. Add them to the queue of successors.
-            // [subroutines are never protected; mandated by JustIce]
-            ExceptionHandler[] exc_hds = u.getExceptionHandlers();
-            for (int s=0; s<exc_hds.length; s++){
-                InstructionContext v = cfg.contextOf(exc_hds[s].getHandlerStart());
-                // TODO: the "oldchain" and "newchain" is used to determine the subroutine
-                // we're in (by searching for the last JSR) by the InstructionContext
-                // implementation. Therefore, we should not use this chain mechanism
-                // when dealing with exception handlers.
-                // Example: a JSR with an exception handler as its successor does not
-                // mean we're in a subroutine if we go to the exception handler.
-                // We should address this problem later; by now we simply "cut" the chain
-                // by using an empty chain for the exception handlers.
-                //if (v.execute(new Frame(u.getOutFrame(oldchain).getLocals(), new OperandStack (u.getOutFrame().getStack().maxStack(), (exc_hds[s].getExceptionType()==null? Type.THROWABLE : exc_hds[s].getExceptionType())) ), newchain), icv, ev){
-                    //icq.add(v, (ArrayList) newchain.clone());
-                if (v.execute(new Frame(u.getOutFrame(oldchain).getLocals(), new OperandStack (u.getOutFrame(oldchain).getStack().maxStack(), (exc_hds[s].getExceptionType()==null? Type.THROWABLE : exc_hds[s].getExceptionType())) ), new ArrayList<InstructionContext>(), icv, ev)){
-                    icq.add(v, new ArrayList<InstructionContext>());
-                }
-            }
-
-        }// while (!icq.isEmpty()) END
-        
-        InstructionHandle ih = start.getInstruction();
-        do{
-            if ((ih.getInstruction() instanceof ReturnInstruction) && (!(cfg.isDead(ih)))) {
-                InstructionContext ic = cfg.contextOf(ih);
-                Frame f = ic.getOutFrame(new ArrayList<InstructionContext>()); // TODO: This is buggy, we check only the top-level return instructions this way. Maybe some maniac returns from a method when in a subroutine?
-                LocalVariables lvs = f.getLocals();
-                for (int i=0; i<lvs.maxLocals(); i++){
-                    if (lvs.get(i) instanceof UninitializedObjectType){
-                        this.addMessage("Warning: ReturnInstruction '"+ic+"' may leave method with an uninitialized object in the local variables array '"+lvs+"'.");
-                    }
-                }
-                OperandStack os = f.getStack();
-                for (int i=0; i<os.size(); i++){
-                    if (os.peek(i) instanceof UninitializedObjectType){
-                        this.addMessage("Warning: ReturnInstruction '"+ic+"' may leave method with an uninitialized object on the operand stack '"+os+"'.");
-                    }
-                }
-                //see JVM $4.8.2
-                //TODO implement all based on stack 
-                Type returnedType = null;
-                if( ih.getPrev().getInstruction() instanceof InvokeInstruction )
-                {
-                    returnedType = ((InvokeInstruction)ih.getPrev().getInstruction()).getType(m.getConstantPool());
-                }
-                if( ih.getPrev().getInstruction() instanceof LoadInstruction )
-                {
-                    int index = ((LoadInstruction)ih.getPrev().getInstruction()).getIndex();
-                    returnedType = lvs.get(index);
-                }
-                if( ih.getPrev().getInstruction() instanceof GETFIELD )
-                {
-                    returnedType = ((GETFIELD)ih.getPrev().getInstruction()).getType(m.getConstantPool());
-                }
-                if( returnedType != null )
-                {
-                    if( returnedType instanceof ObjectType )
-                    {
-                        try
-                        {
-                            if( !((ObjectType)returnedType).isAssignmentCompatibleWith(m.getReturnType()) )
-                            {
-                                throw new StructuralCodeConstraintException("Returned type "+returnedType+" does not match Method's return type "+m.getReturnType());
-                            }
-                        }
-                        catch (Exception e)
-                        {
-                            //dont know what do do now, so raise RuntimeException
-                            throw new RuntimeException(e);
-                        }
-                    }
-                    else if( !returnedType.equals(m.getReturnType()) )
-                    {
-                        throw new StructuralCodeConstraintException("Returned type "+returnedType+" does not match Method's return type "+m.getReturnType());
-                    }
-                }
-            }
-        }while ((ih = ih.getNext()) != null);
-        
-    }
-
-    /**
-     * Pass 3b implements the data flow analysis as described in the Java Virtual
-     * Machine Specification, Second Edition.
-     * Later versions will use LocalVariablesInfo objects to verify if the
-     * verifier-inferred types and the class file's debug information (LocalVariables
-     * attributes) match [TODO].
-     *
-     * @see org.apache.bcel.verifier.statics.LocalVariablesInfo
-     * @see org.apache.bcel.verifier.statics.Pass2Verifier#getLocalVariablesInfo(int)
-     */
-    @Override
-    public VerificationResult do_verify(){
-        /*if (! myOwner.doPass3a(method_no).equals(VerificationResult.VR_OK)){
-            return VerificationResult.VR_NOTYET;
-        }
-
-        // Pass 3a ran before, so it's safe to assume the JavaClass object is
-        // in the BCEL repository.
-        JavaClass jc;
-        try {
-            jc = Repository.lookupClass(myOwner.getClassName());
-        } catch (ClassNotFoundException e) {
-            // FIXME: maybe not the best way to handle this
-            throw new AssertionViolatedException("Missing class: " + e.toString());
-        }*/
-
-        ConstantPoolGen constantPoolGen = new ConstantPoolGen(jc.getConstantPool());
-        // Init Visitors
-        InstConstraintVisitor icv = new InstConstraintVisitor();
-        icv.setConstantPoolGen(constantPoolGen);
-        
-        ExecutionVisitor ev = new ExecutionVisitor();
-        ev.setConstantPoolGen(constantPoolGen);
-        
-        Method[] methods = jc.getMethods(); // Method no "method_no" exists, we ran Pass3a before on it!
-
-        try{
-
-            MethodGen mg = new MethodGen(methods[method_no], jc.getClassName(), constantPoolGen);
-
-            icv.setMethodGen(mg);
-                
-            ////////////// DFA BEGINS HERE ////////////////
-            if (! (mg.isAbstract() || mg.isNative()) ){ // IF mg HAS CODE (See pass 2)
-                
-                ControlFlowGraph cfg = new ControlFlowGraph(mg);
-
-                // Build the initial frame situation for this method.
-                Frame f = new Frame(mg.getMaxLocals(),mg.getMaxStack());
-                if ( !mg.isStatic() ){
-                    if (mg.getName().equals(Constants.CONSTRUCTOR_NAME)){
-                        Frame._this = new UninitializedObjectType(new ObjectType(jc.getClassName()));
-                        f.getLocals().set(0, Frame._this);
-                    }
-                    else{
-                        Frame._this = null;
-                        f.getLocals().set(0, new ObjectType(jc.getClassName()));
-                    }
-                }
-                Type[] argtypes = mg.getArgumentTypes();
-                int twoslotoffset = 0;
-                for (int j=0; j<argtypes.length; j++){
-                    if (argtypes[j] == Type.SHORT || argtypes[j] == Type.BYTE || argtypes[j] == Type.CHAR || argtypes[j] == Type.BOOLEAN){
-                        argtypes[j] = Type.INT;
-                    }
-                    f.getLocals().set(twoslotoffset + j + (mg.isStatic()?0:1), argtypes[j]);
-                    if (argtypes[j].getSize() == 2){
-                        twoslotoffset++;
-                        f.getLocals().set(twoslotoffset + j + (mg.isStatic()?0:1), Type.UNKNOWN);
-                    }
-                }
-                circulationPump(mg,cfg, cfg.contextOf(mg.getInstructionList().getStart()), f, icv, ev);
-            }
-        }
-        catch (VerifierConstraintViolatedException ce){
-            ce.extendMessage("Constraint violated in method '"+methods[method_no]+"':\n","");
-            return new VerificationResult(VerificationResult.VERIFIED_REJECTED, ce.getMessage());
-        }
-        catch (RuntimeException re){
-            // These are internal errors
-
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            re.printStackTrace(pw);
-
-            throw new AssertionViolatedException("Some RuntimeException occured while verify()ing class '"+jc.getClassName()+"', method '"+methods[method_no]+"'. Original RuntimeException's stack trace:\n---\n"+sw+"---\n");
-        }
-        return VerificationResult.VR_OK;
-    }
-
-    /** Returns the method number as supplied when instantiating. */
-    public int getMethodNo(){
-        return method_no;
-    }
-}
diff --git a/asm4/test/perf/org/aspectj/apache/bcel/classfile/Signature.java b/asm4/test/perf/org/aspectj/apache/bcel/classfile/Signature.java
deleted file mode 100644
index 1c8a0f5..0000000
--- a/asm4/test/perf/org/aspectj/apache/bcel/classfile/Signature.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package org.aspectj.apache.bcel.classfile;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" and
- *    "Apache BCEL" must not be used to endorse or promote products
- *    derived from this software without prior written permission. For
- *    written permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    "Apache BCEL", nor may "Apache" appear in their name, without
- *    prior written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
- * ITS 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.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import org.apache.bcel.Constants;
-
-/**
- * This class is derived from <em>Attribute</em> and represents a reference to
- * a <href="http://wwwipd.ira.uka.de/~pizza/gj/">GJ</a> attribute.
- * 
- * @version $Id: Signature.java,v 1.2 2006-07-05 15:22:56 ebruneton Exp $
- * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
- * @see Attribute
- */
-public final class Signature extends Attribute {
-    private int signature_index;
-
-    /**
-     * Initialize from another object. Note that both objects use the same
-     * references (shallow copy). Use clone() for a physical copy.
-     * 
-     * @param c
-     */
-    public Signature(final Signature c) {
-        this(c.getNameIndex(),
-                c.getLength(),
-                c.getSignatureIndex(),
-                c.getConstantPool());
-    }
-
-    /**
-     * Construct object from file stream.
-     * 
-     * @param name_index Index in constant pool to CONSTANT_Utf8
-     * @param length Content length in bytes
-     * @param file Input stream
-     * @param constant_pool Array of constants
-     * @throws IOException
-     */
-    Signature(
-        final int name_index,
-        final int length,
-        final DataInputStream file,
-        final ConstantPool constant_pool) throws IOException
-    {
-        this(name_index, length, file.readUnsignedShort(), constant_pool);
-    }
-
-    /**
-     * @param name_index Index in constant pool to CONSTANT_Utf8
-     * @param length Content length in bytes
-     * @param constant_pool Array of constants
-     * @param signature_index Index in constant pool to CONSTANT_Utf8
-     */
-    public Signature(
-        final int name_index,
-        final int length,
-        final int signature_index,
-        final ConstantPool constant_pool)
-    {
-        super(Constants.ATTR_SIGNATURE, name_index, length, constant_pool);
-        this.signature_index = signature_index;
-    }
-
-    /**
-     * Called by objects that are traversing the nodes of the tree implicitely
-     * defined by the contents of a Java class. I.e., the hierarchy of methods,
-     * fields, attributes, etc. spawns a tree of objects.
-     * 
-     * @param v Visitor object
-     */
-    @Override
-    public void accept(final Visitor v) {
-        // System.err.println("Visiting non-standard Signature object");
-        // v.visitSignature(this);
-    }
-
-    /**
-     * Dump source file attribute to file stream in binary format.
-     * 
-     * @param file Output file stream
-     * @throws IOException
-     */
-    @Override
-    public final void dump(final DataOutputStream file) throws IOException {
-        super.dump(file);
-        file.writeShort(signature_index);
-    }
-
-    /**
-     * @return Index in constant pool of source file name.
-     */
-    public final int getSignatureIndex() {
-        return signature_index;
-    }
-
-    /**
-     * @param signature_index
-     */
-    public final void setSignatureIndex(final int signature_index) {
-        this.signature_index = signature_index;
-    }
-
-    /**
-     * @return GJ signature.
-     */
-    public final String getSignature() {
-        ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(signature_index,
-                Constants.CONSTANT_Utf8);
-        return c.getBytes();
-    }
-
-    /**
-     * Extends ByteArrayInputStream to make 'unreading' chars possible.
-     */
-    private static final class MyByteArrayInputStream extends
-            ByteArrayInputStream
-    {
-        MyByteArrayInputStream(final String data) {
-            super(data.getBytes());
-        }
-
-        final int mark() {
-            return pos;
-        }
-
-        final String getData() {
-            return new String(buf);
-        }
-
-        final void reset(final int p) {
-            pos = p;
-        }
-
-        final void unread() {
-            if (pos > 0) {
-                pos--;
-            }
-        }
-    }
-
-    private static boolean identStart(final int ch) {
-        return ch == 'T' || ch == 'L';
-    }
-
-    // private static boolean identPart(int ch) {
-    // return ch == '/' || ch == ';';
-    // }
-
-    private static final void matchIdent(
-        final MyByteArrayInputStream in,
-        final StringBuffer buf)
-    {
-        int ch;
-
-        if ((ch = in.read()) == -1) {
-            throw new RuntimeException("Illegal signature: " + in.getData()
-                    + " no ident, reaching EOF");
-        }
-
-        // System.out.println("return from ident:" + (char)ch);
-
-        if (!identStart(ch)) {
-            StringBuffer buf2 = new StringBuffer();
-
-            int count = 1;
-            while (Character.isJavaIdentifierPart((char) ch)) {
-                buf2.append((char) ch);
-                count++;
-                ch = in.read();
-            }
-
-            if (ch == ':') { // Ok, formal parameter
-                in.skip("Ljava/lang/Object".length());
-                buf.append(buf2);
-
-                ch = in.read();
-                in.unread();
-                // System.out.println("so far:" + buf2 + ":next:" +(char)ch);
-            } else {
-                for (int i = 0; i < count; i++) {
-                    in.unread();
-                }
-            }
-
-            return;
-        }
-
-        StringBuffer buf2 = new StringBuffer();
-        ch = in.read();
-
-        do {
-            buf2.append((char) ch);
-            ch = in.read();
-            // System.out.println("within ident:"+ (char)ch);
-
-        } while (ch != -1
-                && (Character.isJavaIdentifierPart((char) ch) || ch == '/'));
-
-        buf.append(buf2.toString().replace('/', '.'));
-
-        // System.out.println("regular return ident:"+ (char)ch + ":" + buf2);
-
-        if (ch != -1) {
-            in.unread();
-        }
-    }
-
-    private static final void matchGJIdent(
-        final MyByteArrayInputStream in,
-        final StringBuffer buf)
-    {
-        int ch;
-
-        matchIdent(in, buf);
-
-        ch = in.read();
-        if (ch == '<' || ch == '(') { // Parameterized or method
-            // System.out.println("Enter <");
-            buf.append((char) ch);
-            matchGJIdent(in, buf);
-
-            while ((ch = in.read()) != '>' && ch != ')') { // List of
-                // parameters
-                if (ch == -1) {
-                    throw new RuntimeException("Illegal signature: "
-                            + in.getData() + " reaching EOF");
-                }
-
-                // System.out.println("Still no >");
-                buf.append(", ");
-                in.unread();
-                matchGJIdent(in, buf); // Recursive call
-            }
-
-            // System.out.println("Exit >");
-
-            buf.append((char) ch);
-        } else {
-            in.unread();
-        }
-
-        ch = in.read();
-        if (identStart(ch)) {
-            in.unread();
-            matchGJIdent(in, buf);
-        } else if (ch == ')') {
-            in.unread();
-            return;
-        } else if (ch != ';') {
-            throw new RuntimeException("Illegal signature: " + in.getData()
-                    + " read " + (char) ch);
-        }
-    }
-
-    public static String translate(final String s) {
-        // System.out.println("Sig:" + s);
-        StringBuffer buf = new StringBuffer();
-
-        matchGJIdent(new MyByteArrayInputStream(s), buf);
-
-        return buf.toString();
-    }
-
-    public static final boolean isFormalParameterList(final String s) {
-        return s.startsWith("<") && s.indexOf(':') > 0;
-    }
-
-    public static final boolean isActualParameterList(final String s) {
-        return s.startsWith("L") && s.endsWith(">;");
-    }
-
-    /**
-     * @return String representation
-     */
-    @Override
-    public final String toString() {
-        String s = getSignature();
-
-        return "Signature(" + s + ")";
-    }
-
-    /**
-     * @param constant_pool
-     * @return deep copy of this attribute
-     */
-    @Override
-    public Attribute copy(final ConstantPool constant_pool) {
-        return (Signature) clone();
-    }
-}
diff --git a/asm4/test/perf/org/aspectj/apache/bcel/verifier/structurals/ModifiedPass3bVerifier.java b/asm4/test/perf/org/aspectj/apache/bcel/verifier/structurals/ModifiedPass3bVerifier.java
deleted file mode 100644
index e8e5d87..0000000
--- a/asm4/test/perf/org/aspectj/apache/bcel/verifier/structurals/ModifiedPass3bVerifier.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright  2000-2004 The Apache Software Foundation
- *
- *  Licensed 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.aspectj.apache.bcel.verifier.structurals;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Random;
-import java.util.Vector;
-
-import org.aspectj.apache.bcel.Constants;
-import org.aspectj.apache.bcel.classfile.JavaClass;
-import org.aspectj.apache.bcel.classfile.Method;
-import org.aspectj.apache.bcel.generic.ConstantPoolGen;
-import org.aspectj.apache.bcel.generic.JsrInstruction;
-import org.aspectj.apache.bcel.generic.MethodGen;
-import org.aspectj.apache.bcel.generic.ObjectType;
-import org.aspectj.apache.bcel.generic.RET;
-import org.aspectj.apache.bcel.generic.ReturnaddressType;
-import org.aspectj.apache.bcel.generic.Type;
-import org.aspectj.apache.bcel.verifier.VerificationResult;
-import org.aspectj.apache.bcel.verifier.exc.AssertionViolatedException;
-import org.aspectj.apache.bcel.verifier.exc.VerifierConstraintViolatedException;
-
-/**
- * This PassVerifier verifies a method of class file according to pass 3,
- * so-called structural verification as described in The Java Virtual Machine
- * Specification, 2nd edition. More detailed information is to be found at the
- * do_verify() method's documentation.
- * 
- * @version $Id: ModifiedPass3bVerifier.java,v 1.1.2.1 2005/09/16 07:19:38
- *          ebruneton Exp $
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
- * @see #do_verify()
- */
-
-public final class ModifiedPass3bVerifier {
-    /*
-     * TODO: Throughout pass 3b, upper halves of LONG and DOUBLE are represented
-     * by Type.UNKNOWN. This should be changed in favour of LONG_Upper and
-     * DOUBLE_Upper as in pass 2.
-     */
-
-    /**
-     * An InstructionContextQueue is a utility class that holds
-     * (InstructionContext, ArrayList) pairs in a Queue data structure. This is
-     * used to hold information about InstructionContext objects externally ---
-     * i.e. that information is not saved inside the InstructionContext object
-     * itself. This is useful to save the execution path of the symbolic
-     * execution of the Pass3bVerifier - this is not information that belongs
-     * into the InstructionContext object itself. Only at "execute()"ing time,
-     * an InstructionContext object will get the current information we have
-     * about its symbolic execution predecessors.
-     */
-    static final class InstructionContextQueue {
-        private final Vector<InstructionContext> ics = new Vector<InstructionContext>(); // Type: InstructionContext
-        private final Vector<ArrayList<InstructionContext>> ecs = new Vector<ArrayList<InstructionContext>>(); // Type: ArrayList (of
-
-        // InstructionContext)
-
-        public void add(
-            final InstructionContext ic,
-            final ArrayList<InstructionContext> executionChain)
-        {
-            ics.add(ic);
-            ecs.add(executionChain);
-        }
-
-        public boolean isEmpty() {
-            return ics.isEmpty();
-        }
-
-        public void remove() {
-            this.remove(0);
-        }
-
-        public void remove(final int i) {
-            ics.remove(i);
-            ecs.remove(i);
-        }
-
-        public InstructionContext getIC(final int i) {
-            return ics.get(i);
-        }
-
-        public ArrayList<InstructionContext> getEC(final int i) {
-            return ecs.get(i);
-        }
-
-        public int size() {
-            return ics.size();
-        }
-    } // end Inner Class InstructionContextQueue
-
-    /** In DEBUG mode, the verification algorithm is not randomized. */
-    private static final boolean DEBUG = true;
-
-    /** The Verifier that created this. */
-    private JavaClass jc;
-
-    /** The method number to verify. */
-    private int method_no;
-
-    /**
-     * This class should only be instantiated by a Verifier.
-     * 
-     * @param jc
-     * @param method_no
-     * 
-     * @see org.apache.bcel.verifier.Verifier
-     */
-    public ModifiedPass3bVerifier(final JavaClass jc, final int method_no) {
-        this.jc = jc;
-        this.method_no = method_no;
-    }
-
-    /**
-     * Whenever the outgoing frame situation of an InstructionContext changes,
-     * all its successors are put [back] into the queue [as if they were
-     * unvisited]. The proof of termination is about the existence of a fix
-     * point of frame merging.
-     * 
-     * @param cfg
-     * @param start
-     * @param vanillaFrame
-     * @param icv
-     * @param ev
-     */
-    private void circulationPump(
-        final ControlFlowGraph cfg,
-        final InstructionContext start,
-        final Frame vanillaFrame,
-        final InstConstraintVisitor icv,
-        final ExecutionVisitor ev)
-    {
-        final Random random = new Random();
-        InstructionContextQueue icq = new InstructionContextQueue();
-
-        start.execute(vanillaFrame, new ArrayList<InstructionContext>(), icv, ev); // new
-        // ArrayList()
-        // <=> no
-        // Instruction
-        // was executed
-        // before
-        // => Top-Level routine (no jsr call before)
-        icq.add(start, new ArrayList<InstructionContext>());
-
-        // LOOP!
-        while (!icq.isEmpty()) {
-            InstructionContext u;
-            ArrayList<InstructionContext> ec;
-            if (!DEBUG) {
-                int r = random.nextInt(icq.size());
-                u = icq.getIC(r);
-                ec = icq.getEC(r);
-                icq.remove(r);
-            } else {
-                u = icq.getIC(0);
-                ec = icq.getEC(0);
-                icq.remove(0);
-            }
-
-            ArrayList<InstructionContext> oldchain = new ArrayList<InstructionContext>(ec);
-            ArrayList<InstructionContext> newchain = new ArrayList<InstructionContext>(ec);
-            newchain.add(u);
-
-            if (u.getInstruction().getInstruction() instanceof RET) {
-                // System.err.println(u);
-                // We can only follow _one_ successor, the one after the
-                // JSR that was recently executed.
-                RET ret = (RET) u.getInstruction().getInstruction();
-                ReturnaddressType t = (ReturnaddressType) u.getOutFrame(oldchain)
-                        .getLocals()
-                        .get(ret.getIndex());
-                InstructionContext theSuccessor = cfg.contextOf(t.getTarget());
-
-                // Sanity check
-                InstructionContext lastJSR = null;
-                int skip_jsr = 0;
-                for (int ss = oldchain.size() - 1; ss >= 0; ss--) {
-                    if (skip_jsr < 0) {
-                        throw new AssertionViolatedException("More RET than JSR in execution chain?!");
-                    }
-                    // System.err.println("+"+oldchain.get(ss));
-                    if (oldchain.get(ss).getInstruction()
-                            .getInstruction() instanceof JsrInstruction)
-                    {
-                        if (skip_jsr == 0) {
-                            lastJSR = oldchain.get(ss);
-                            break;
-                        } else {
-                            skip_jsr--;
-                        }
-                    }
-                    if (oldchain.get(ss).getInstruction()
-                            .getInstruction() instanceof RET)
-                    {
-                        skip_jsr++;
-                    }
-                }
-                if (lastJSR == null) {
-                    throw new AssertionViolatedException("RET without a JSR before in ExecutionChain?! EC: '"
-                            + oldchain + "'.");
-                }
-                JsrInstruction jsr = (JsrInstruction) lastJSR.getInstruction()
-                        .getInstruction();
-                if (theSuccessor != cfg.contextOf(jsr.physicalSuccessor())) {
-                    throw new AssertionViolatedException("RET '"
-                            + u.getInstruction()
-                            + "' info inconsistent: jump back to '"
-                            + theSuccessor + "' or '"
-                            + cfg.contextOf(jsr.physicalSuccessor()) + "'?");
-                }
-
-                if (theSuccessor.execute(u.getOutFrame(oldchain),
-                        newchain,
-                        icv,
-                        ev))
-                {
-                    icq.add(theSuccessor, new ArrayList<InstructionContext>(newchain));
-                }
-            } else {// "not a ret"
-
-                // Normal successors. Add them to the queue of successors.
-                InstructionContext[] succs = u.getSuccessors();
-                for (int s = 0; s < succs.length; s++) {
-                    InstructionContext v = succs[s];
-                    if (v.execute(u.getOutFrame(oldchain), newchain, icv, ev)) {
-                        icq.add(v, new ArrayList<InstructionContext>(newchain));
-                    }
-                }
-            }// end "not a ret"
-
-            // Exception Handlers. Add them to the queue of successors.
-            // [subroutines are never protected; mandated by JustIce]
-            ExceptionHandler[] exc_hds = u.getExceptionHandlers();
-            for (int s = 0; s < exc_hds.length; s++) {
-                InstructionContext v = cfg.contextOf(exc_hds[s].getHandlerStart());
-                // TODO: the "oldchain" and "newchain" is used to determine the
-                // subroutine
-                // we're in (by searching for the last JSR) by the
-                // InstructionContext
-                // implementation. Therefore, we should not use this chain
-                // mechanism
-                // when dealing with exception handlers.
-                // Example: a JSR with an exception handler as its successor
-                // does not
-                // mean we're in a subroutine if we go to the exception handler.
-                // We should address this problem later; by now we simply "cut"
-                // the chain
-                // by using an empty chain for the exception handlers.
-                // if (v.execute(new Frame(u.getOutFrame(oldchain).getLocals(),
-                // new OperandStack (u.getOutFrame().getStack().maxStack(),
-                // (exc_hds[s].getExceptionType()==null? Type.THROWABLE :
-                // exc_hds[s].getExceptionType())) ), newchain), icv, ev){
-                // icq.add(v, (ArrayList) newchain.clone());
-                if (v.execute(new Frame(u.getOutFrame(oldchain).getLocals(),
-                        new OperandStack(u.getOutFrame(oldchain)
-                                .getStack()
-                                .maxStack(),
-                                (exc_hds[s].getExceptionType() == null
-                                        ? Type.THROWABLE
-                                        : exc_hds[s].getExceptionType()))),
-                        new ArrayList<InstructionContext>(),
-                        icv,
-                        ev))
-                {
-                    icq.add(v, new ArrayList<InstructionContext>());
-                }
-            }
-
-        }// while (!icq.isEmpty()) END
-
-        // InstructionHandle ih = start.getInstruction();
-        // do{
-        // if ((ih.getInstruction() instanceof ReturnInstruction) &&
-        // (!(cfg.isDead(ih)))) {
-        // InstructionContext ic = cfg.contextOf(ih);
-        // Frame f = ic.getOutFrame(new ArrayList()); // TODO: This is buggy, we
-        // check only the top-level return instructions this way. Maybe some
-        // maniac returns from a method when in a subroutine?
-        // LocalVariables lvs = f.getLocals();
-        // for (int i=0; i<lvs.maxLocals(); i++){
-        // if (lvs.get(i) instanceof UninitializedObjectType){
-        // //this.addMessage("Warning: ReturnInstruction '"+ic+"' may leave
-        // method with an uninitialized object in the local variables array
-        // '"+lvs+"'.");
-        // }
-        // }
-        // OperandStack os = f.getStack();
-        // for (int i=0; i<os.size(); i++){
-        // if (os.peek(i) instanceof UninitializedObjectType){
-        // this.addMessage("Warning: ReturnInstruction '"+ic+"' may leave method
-        // with an uninitialized object on the operand stack '"+os+"'.");
-        // }
-        // }
-        // }
-        // }while ((ih = ih.getNext()) != null);
-
-    }
-
-    /**
-     * Pass 3b implements the data flow analysis as described in the Java
-     * Virtual Machine Specification, Second Edition. Later versions will use
-     * LocalVariablesInfo objects to verify if the verifier-inferred types and
-     * the class file's debug information (LocalVariables attributes) match
-     * [TODO].
-     * 
-     * @return TODO
-     * 
-     * @see org.apache.bcel.verifier.statics.LocalVariablesInfo
-     * @see org.apache.bcel.verifier.statics.Pass2Verifier#getLocalVariablesInfo(int)
-     */
-    public VerificationResult do_verify() {
-        ConstantPoolGen constantPoolGen = new ConstantPoolGen(jc.getConstantPool());
-        // Init Visitors
-        InstConstraintVisitor icv = new InstConstraintVisitor();
-        icv.setConstantPoolGen(constantPoolGen);
-
-        ExecutionVisitor ev = new ExecutionVisitor();
-        ev.setConstantPoolGen(constantPoolGen);
-
-        Method[] methods = jc.getMethods(); // Method no "method_no" exists, we
-        // ran Pass3a before on it!
-
-        try {
-
-            MethodGen mg = new MethodGen(methods[method_no],
-                    jc.getClassName(),
-                    constantPoolGen);
-
-            icv.setMethodGen(mg);
-
-            // //////////// DFA BEGINS HERE ////////////////
-            if (!(mg.isAbstract() || mg.isNative())) { // IF mg HAS CODE (See
-                // pass 2)
-
-                ControlFlowGraph cfg = new ControlFlowGraph(mg);
-
-                // Build the initial frame situation for this method.
-                Frame f = new Frame(mg.getMaxLocals(), mg.getMaxStack());
-                if (!mg.isStatic()) {
-                    if (mg.getName().equals(Constants.CONSTRUCTOR_NAME)) {
-                        Frame._this = new UninitializedObjectType(new ObjectType(jc.getClassName()));
-                        f.getLocals().set(0, Frame._this);
-                    } else {
-                        Frame._this = null;
-                        f.getLocals().set(0, new ObjectType(jc.getClassName()));
-                    }
-                }
-                Type[] argtypes = mg.getArgumentTypes();
-                int twoslotoffset = 0;
-                for (int j = 0; j < argtypes.length; j++) {
-                    if (argtypes[j] == Type.SHORT || argtypes[j] == Type.BYTE
-                            || argtypes[j] == Type.CHAR
-                            || argtypes[j] == Type.BOOLEAN)
-                    {
-                        argtypes[j] = Type.INT;
-                    }
-                    f.getLocals().set(twoslotoffset + j
-                            + (mg.isStatic() ? 0 : 1),
-                            argtypes[j]);
-                    if (argtypes[j].getSize() == 2) {
-                        twoslotoffset++;
-                        f.getLocals().set(twoslotoffset + j
-                                + (mg.isStatic() ? 0 : 1),
-                                Type.UNKNOWN);
-                    }
-                }
-                circulationPump(cfg, cfg.contextOf(mg.getInstructionList()
-                        .getStart()), f, icv, ev);
-            }
-        } catch (VerifierConstraintViolatedException ce) {
-            ce.extendMessage("Constraint violated in method '"
-                    + methods[method_no] + "':\n", "");
-            return new VerificationResult(VerificationResult.VERIFIED_REJECTED,
-                    ce.getMessage());
-        } catch (RuntimeException re) {
-            // These are internal errors
-
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            re.printStackTrace(pw);
-
-            throw new AssertionViolatedException("Some RuntimeException occured while verify()ing class '"
-                    + jc.getClassName()
-                    + "', method '"
-                    + methods[method_no]
-                    + "'. Original RuntimeException's stack trace:\n---\n"
-                    + sw
-                    + "---\n");
-        }
-        return VerificationResult.VR_OK;
-    }
-
-    /**
-     * Returns the method number as supplied when instantiating.
-     * 
-     * @return TODO
-     */
-    public int getMethodNo() {
-        return method_no;
-    }
-}
diff --git a/asm4/test/perf/org/objectweb/asm/ALLPerfTest.java b/asm4/test/perf/org/objectweb/asm/ALLPerfTest.java
deleted file mode 100644
index fe52474..0000000
--- a/asm4/test/perf/org/objectweb/asm/ALLPerfTest.java
+++ /dev/null
@@ -1,668 +0,0 @@
-/***
- * ASM performance test: measures the performances of asm package
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.CtMethod;
-
-import org.apache.bcel.classfile.ClassParser;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.bcel.classfile.Method;
-import org.apache.bcel.generic.ClassGen;
-import org.apache.bcel.generic.ConstantPoolGen;
-import org.apache.bcel.generic.InstructionHandle;
-import org.apache.bcel.generic.InstructionList;
-import org.apache.bcel.generic.MethodGen;
-import org.apache.bcel.verifier.structurals.ModifiedPass3bVerifier;
-import org.objectweb.asm.commons.LocalVariablesSorter;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.BasicValue;
-import org.objectweb.asm.tree.analysis.SimpleVerifier;
-
-import serp.bytecode.BCClass;
-import serp.bytecode.BCMethod;
-import serp.bytecode.Code;
-import serp.bytecode.Project;
-
-/**
- * @author Eric Bruneton
- * @author Peter Lawrey
- */
-public abstract class ALLPerfTest {
-
-    static boolean compute;
-
-    static boolean computeFrames;
-
-    static boolean skipDebug;
-
-    static int repeats;
-
-    static List<byte[]> classes = new ArrayList<byte[]>();
-
-    static List<String> classNames = new ArrayList<String>();
-
-    private static final int MAX_ITERATION_SEC = Integer.getInteger(
-            "max.iteration.sec", 10).intValue();
-
-    public static void main(final String[] args) throws IOException,
-            InterruptedException {
-        String clazz = System.getProperty("asm.test.class");
-        List<String> jars = findFiles(System.getProperty("java.home"), ".jar");
-        jars.addAll(findJars(File.pathSeparatorChar,
-                System.getProperty("java.class.path")));
-        repeats = Integer.getInteger("repeats", 3).intValue() + 1;
-
-        Set<String> classesFound = new HashSet<String>();
-        for (int i = 0; i < jars.size(); i++) {
-            ZipFile zip;
-            try {
-                zip = new ZipFile(jars.get(i));
-            } catch (IOException e) {
-                System.err.println("Error openning " + jars.get(i));
-                e.printStackTrace();
-                continue;
-            }
-
-            Enumeration<? extends ZipEntry> entries = zip.entries();
-            while (entries.hasMoreElements()) {
-                ZipEntry e = entries.nextElement();
-                String s = e.getName();
-                if (s.endsWith(".class")) {
-                    s = s.substring(0, s.length() - 6).replace('/', '.');
-                    if (!classesFound.add(s)) {
-                        continue;
-                    }
-                    if (clazz == null || s.indexOf(clazz) != -1) {
-                        InputStream is = zip.getInputStream(e);
-                        byte[] bytes = new ClassReader(is).b;
-                        classes.add(bytes);
-                        classNames.add(s);
-                        is.close();
-                        if (classes.size() % 2500 == 0) {
-                            System.out.println("... searching, found "
-                                    + classes.size() + " classes.");
-                        }
-                    }
-                }
-            }
-            zip.close();
-        }
-        System.out.println("Found " + classes.size() + " classes.");
-
-        RunTest nullBCELAdapt = new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) throws IOException {
-                nullBCELAdapt(bytes);
-            }
-        };
-
-        RunTest nullAspectjBCELAdapt = new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) throws IOException {
-                nullAspectjBCELAdapt(bytes);
-            }
-        };
-
-        RunTest nullJavassistAdapt = new RunTest() {
-            ClassPool pool;
-
-            @Override
-            public void init() {
-                pool = new ClassPool(null);
-            }
-
-            @Override
-            public void test(byte[] bytes, int[] errors) throws Exception {
-                nullJavassistAdapt(pool, bytes);
-            }
-        };
-
-        RunTest nullSERPAdapt = new RunTest() {
-            Project p;
-            BCClass c;
-
-            @Override
-            public void init() {
-                p = new Project();
-                c = null;
-            }
-
-            @Override
-            public void test(byte[] bytes, int[] errors) throws Exception {
-                c = nullSERPAdapt(p, c, bytes);
-            }
-        };
-
-        // get class info and deserialize tests
-
-        runTestAll("get class info", "", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassReader cr = new ClassReader(bytes);
-                cr.getAccess();
-                cr.getClassName();
-                cr.getSuperName();
-                cr.getInterfaces();
-            }
-        });
-
-        runTestAll("deserialize", "", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                new ClassReader(bytes).accept(new EmptyVisitor(), 0);
-            }
-        });
-
-        runTest("deserialize", "tree package", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                new ClassReader(bytes).accept(new ClassNode(), 0);
-            }
-        });
-
-        System.out.println();
-
-        // deserialize and reserialize tests
-
-        runTestAll("deserialize and reserialize", "", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassReader cr = new ClassReader(bytes);
-                ClassWriter cw = new ClassWriter(0);
-                cr.accept(cw, 0);
-                cw.toByteArray();
-            }
-        });
-
-        runTestAll("deserialize and reserialize", "copyPool", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassReader cr = new ClassReader(bytes);
-                ClassWriter cw = new ClassWriter(cr, 0);
-                cr.accept(cw, 0);
-                cw.toByteArray();
-            }
-        });
-
-        runTest("deserialize and reserialize", "tree package", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassWriter cw = new ClassWriter(0);
-                ClassNode cn = new ClassNode();
-                new ClassReader(bytes).accept(cn, 0);
-                cn.accept(cw);
-                cw.toByteArray();
-            }
-        });
-
-        compute = false;
-        computeFrames = false;
-
-        runTest("deserialize and reserialize", "BCEL", nullBCELAdapt);
-
-        runTest("deserialize and reserialize", "Aspectj BCEL",
-                nullAspectjBCELAdapt);
-
-        runTest("deserialize and reserialize", "Javassist", nullJavassistAdapt);
-
-        runTest("deserialize and reserialize", "SERP", nullSERPAdapt);
-
-        System.out.println();
-
-        // deserialize and reserialize tests with computeMaxs
-
-        runTest("deserialize and reserialize", "computeMaxs", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-                new ClassReader(bytes).accept(cw, 0);
-                cw.toByteArray();
-            }
-        });
-
-        compute = true;
-        computeFrames = false;
-
-        runTest("deserialize and reserialize", "BCEL and computeMaxs",
-                nullBCELAdapt);
-
-        runTest("deserialize and reserialize", "Aspectj BCEL and computeMaxs",
-                nullAspectjBCELAdapt);
-
-        // misc. tests
-
-        runTest("deserialize and reserialize", "LocalVariablesSorter",
-                new RunTest() {
-                    @Override
-                    public void test(byte[] bytes, int[] errors) {
-                        ClassWriter cw = new ClassWriter(0);
-                        new ClassReader(bytes).accept(new ClassVisitor(
-                                Opcodes.ASM4, cw) {
-
-                            @Override
-                            public MethodVisitor visitMethod(final int access,
-                                    final String name, final String desc,
-                                    final String signature,
-                                    final String[] exceptions) {
-                                return new LocalVariablesSorter(access, desc,
-                                        cv.visitMethod(access, name, desc,
-                                                signature, exceptions));
-                            }
-                        }, ClassReader.EXPAND_FRAMES);
-                        cw.toByteArray();
-                    }
-                });
-
-        // This test repeatedly tests the same classes as SimpleVerifier
-        // actually calls Class.forName() on the class which fills the PermGen
-        runTestSome("analyze", "SimpleVerifier", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassReader cr = new ClassReader(bytes);
-                ClassNode cn = new ClassNode();
-                cr.accept(cn, ClassReader.SKIP_DEBUG);
-                List<MethodNode> methods = cn.methods;
-                for (int k = 0; k < methods.size(); ++k) {
-                    MethodNode method = methods.get(k);
-                    Analyzer<?> a = new Analyzer<BasicValue>(
-                            new SimpleVerifier());
-                    try {
-                        a.analyze(cn.name, method);
-                    } catch (Throwable th) {
-                        // System.err.println(th);
-                        ++errors[0];
-                    }
-                }
-            }
-        });
-
-        System.out.println();
-
-        // deserialize and reserialize tests with computeFrames
-
-        runTest("deserialize and reserialize", "computeFrames", new RunTest() {
-            @Override
-            public void test(byte[] bytes, int[] errors) {
-                ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
-                new ClassReader(bytes).accept(cw, 0);
-                cw.toByteArray();
-            }
-        });
-
-        // the BCEL+computeFrames tests must be done only at the end, because
-        // after them other tests run very slowly, for some unknown reason
-        // (memory usage?)
-        compute = false;
-        computeFrames = true;
-        runTest("deserialize and reserialize", "BCEL and computeFrames",
-                nullBCELAdapt);
-
-        runTest("deserialize and reserialize",
-                "Aspectj BCEL and computeFrames", nullAspectjBCELAdapt);
-    }
-
-    public static List<String> findFiles(String directory, String suffix) {
-        List<String> matches = new ArrayList<String>();
-        findFiles(matches, new File(directory), suffix);
-        return matches;
-    }
-
-    static void findFiles(List<String> matches, File directory, String suffix) {
-        File[] files = directory.listFiles();
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.isDirectory()) {
-                findFiles(matches, file, suffix);
-            } else if (file.getName().endsWith(suffix)) {
-                matches.add(file.getAbsolutePath());
-            }
-        }
-    }
-
-    static abstract class RunTest {
-
-        public void init() {
-        }
-
-        public abstract void test(byte[] bytes, int[] errors) throws Exception;
-    }
-
-    static void runTestAll(String testName, String with, RunTest runTest)
-            throws InterruptedException {
-        runTest0(1, true, testName, with, runTest);
-    }
-
-    static void runTest(String testName, String with, RunTest runTest)
-            throws InterruptedException {
-        runTest0(repeats - 1, false, testName, with, runTest);
-    }
-
-    static void runTestSome(String testName, String with, RunTest runTest)
-            throws InterruptedException {
-        runTest0(repeats - 1, true, testName, with, runTest);
-    }
-
-    private static void runTest0(int testSkip, boolean startAtZero,
-            String testName, String with, RunTest runTest)
-            throws InterruptedException {
-        if (with.length() > 0) {
-            with = " with " + with;
-        }
-        boolean skipBigClasses = with.contains("BCEL and computeFrames");
-        int totalCount = 0;
-        long totalSize = 0;
-        long totalTime = 0;
-        System.out.println("\nStarting " + testName + with + " test.");
-        for (int i = 0; i < repeats; ++i) {
-            runTest.init();
-            long t = System.currentTimeMillis();
-            int count = 0;
-            long size = 0;
-            int[] errors = { 0 };
-            long longest = 0;
-            int longestSize = 0;
-            int skipped = 0;
-            for (int j = startAtZero ? 0 : i; j < classes.size(); j += testSkip) {
-                count++;
-                byte[] b = classes.get(j);
-                if (skipBigClasses && b.length > 16 * 1024) {
-                    skipped++;
-                    continue;
-                }
-                size += b.length;
-                try {
-                    long start = System.currentTimeMillis();
-                    runTest.test(b, errors);
-                    long end = System.currentTimeMillis();
-                    long time = end - start;
-                    if (longest < time) {
-                        longest = time;
-                        longestSize = b.length;
-                    }
-                    if (time > MAX_ITERATION_SEC * 1000 / 10) {
-                        System.out.println("--- time to " + testName
-                                + " the class " + classNames.get(j) + with
-                                + " took " + time + " ms. bytes=" + b.length);
-                    }
-                    if (end - t > MAX_ITERATION_SEC * 1000) {
-                        // System.out.println("Stopping iteration due to a
-                        // longer run time.");
-                        break;
-                    }
-                } catch (Exception ignored) {
-                    errors[0]++;
-                } catch (Throwable e) {
-                    System.err.println(classNames.get(j) + ": " + e);
-                    errors[0]++;
-                }
-            }
-            t = System.currentTimeMillis() - t;
-            String errorStr = errors[0] > 0 ? " (" + errors[0] + " errors)"
-                    : "";
-            String skippedStr = skipped == 0 ? ""
-                    : " ("
-                            + skipped
-                            + " skipped as BCEL/computeFrames on >16K classes is very slow)";
-            String longestStr = "";
-            if (longest > 50) {
-                longestStr = " the longest took " + longest + " ms ("
-                        + longestSize + " bytes)";
-            }
-            if (i > 0) {
-                System.out.println("- to " + testName + ' ' + count
-                        + " classes" + with + " = " + t + " ms" + errorStr
-                        + longestStr + skippedStr + '.');
-                totalCount += count;
-                totalSize += size;
-                totalTime += t;
-            }
-        }
-        System.out.println("Time to " + testName + ' ' + totalCount
-                + " classes" + with + " = " + totalTime + " ms.\n"
-                + "Processing rate = " + totalCount * 1000 / totalTime
-                + " classes per sec (" + totalSize * 1000 / totalTime / 1024
-                + " kB per sec).");
-        System.gc();
-        Thread.sleep(2500);
-    }
-
-    private static List<String> findJars(char pathSeparatorChar, String s) {
-        List<String> ret = new ArrayList<String>();
-        int start = 0;
-        int pos = s.indexOf(pathSeparatorChar);
-        while (pos >= 0) {
-            String name = s.substring(start, pos);
-            if (name.endsWith(".jar")) {
-                ret.add(name);
-            }
-            start = pos + 1;
-            pos = s.indexOf(pathSeparatorChar, start);
-        }
-        return ret;
-    }
-
-    static void nullBCELAdapt(final byte[] b) throws IOException {
-        JavaClass jc = new ClassParser(new ByteArrayInputStream(b),
-                "class-name").parse();
-        ClassGen cg = new ClassGen(jc);
-        ConstantPoolGen cp = cg.getConstantPool();
-        Method[] ms = cg.getMethods();
-        for (int k = 0; k < ms.length; ++k) {
-            MethodGen mg = new MethodGen(ms[k], cg.getClassName(), cp);
-            boolean lv = ms[k].getLocalVariableTable() == null;
-            boolean ln = ms[k].getLineNumberTable() == null;
-            if (lv) {
-                mg.removeLocalVariables();
-            }
-            if (ln) {
-                mg.removeLineNumbers();
-            }
-            mg.stripAttributes(skipDebug);
-            InstructionList il = mg.getInstructionList();
-            if (il != null) {
-                InstructionHandle ih = il.getStart();
-                while (ih != null) {
-                    ih = ih.getNext();
-                }
-                if (compute) {
-                    mg.setMaxStack();
-                    mg.setMaxLocals();
-                }
-                if (computeFrames) {
-                    ModifiedPass3bVerifier verif;
-                    verif = new ModifiedPass3bVerifier(jc, k);
-                    verif.do_verify();
-                }
-            }
-            cg.replaceMethod(ms[k], mg.getMethod());
-        }
-        cg.getJavaClass().getBytes();
-    }
-
-    static void nullAspectjBCELAdapt(final byte[] b) throws IOException {
-        org.aspectj.apache.bcel.classfile.JavaClass jc = new org.aspectj.apache.bcel.classfile.ClassParser(
-                new ByteArrayInputStream(b), "class-name").parse();
-        org.aspectj.apache.bcel.generic.ClassGen cg = new org.aspectj.apache.bcel.generic.ClassGen(
-                jc);
-        org.aspectj.apache.bcel.generic.ConstantPoolGen cp = cg
-                .getConstantPool();
-        org.aspectj.apache.bcel.classfile.Method[] ms = cg.getMethods();
-        for (int k = 0; k < ms.length; ++k) {
-            org.aspectj.apache.bcel.generic.MethodGen mg = new org.aspectj.apache.bcel.generic.MethodGen(
-                    ms[k], cg.getClassName(), cp);
-            boolean lv = ms[k].getLocalVariableTable() == null;
-            boolean ln = ms[k].getLineNumberTable() == null;
-            if (lv) {
-                mg.removeLocalVariables();
-            }
-            if (ln) {
-                mg.removeLineNumbers();
-            }
-            mg.stripAttributes(skipDebug);
-            org.aspectj.apache.bcel.generic.InstructionList il = mg
-                    .getInstructionList();
-            if (il != null) {
-                org.aspectj.apache.bcel.generic.InstructionHandle ih = il
-                        .getStart();
-                while (ih != null) {
-                    ih = ih.getNext();
-                }
-                if (compute) {
-                    mg.setMaxStack();
-                    mg.setMaxLocals();
-                }
-                if (computeFrames) {
-                    org.aspectj.apache.bcel.verifier.structurals.ModifiedPass3bVerifier verif = new org.aspectj.apache.bcel.verifier.structurals.ModifiedPass3bVerifier(
-                            jc, k);
-                    verif.do_verify();
-                }
-            }
-            cg.replaceMethod(ms[k], mg.getMethod());
-        }
-        cg.getJavaClass().getBytes();
-    }
-
-    static void nullJavassistAdapt(ClassPool pool, final byte[] b)
-            throws Exception {
-        CtClass cc = pool.makeClass(new ByteArrayInputStream(b));
-        CtMethod[] ms = cc.getDeclaredMethods();
-        for (int j = 0; j < ms.length; ++j) {
-            if (skipDebug) {
-                // is there a mean to remove the debug attributes?
-            }
-            if (compute) {
-                // how to force recomputation of maxStack and maxLocals?
-            }
-        }
-        cc.toBytecode();
-    }
-
-    static BCClass nullSERPAdapt(Project p, BCClass c, final byte[] b)
-            throws Exception {
-        if (c != null) {
-            p.removeClass(c);
-        }
-        c = p.loadClass(new ByteArrayInputStream(b));
-        c.getDeclaredFields();
-        BCMethod[] methods = c.getDeclaredMethods();
-        for (int i = 0; i < methods.length; ++i) {
-            Code code = methods[i].getCode(false);
-            if (code != null) {
-                while (code.hasNext()) {
-                    code.next();
-                }
-                if (compute) {
-                    code.calculateMaxStack();
-                    code.calculateMaxLocals();
-                }
-            }
-        }
-        c.toByteArray();
-        return c;
-    }
-
-    static class EmptyVisitor extends ClassVisitor {
-
-        AnnotationVisitor av = new AnnotationVisitor(Opcodes.ASM4) {
-
-            @Override
-            public AnnotationVisitor visitAnnotation(String name, String desc) {
-                return this;
-            }
-
-            @Override
-            public AnnotationVisitor visitArray(String name) {
-                return this;
-            }
-        };
-
-        public EmptyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-            return av;
-        }
-
-        @Override
-        public FieldVisitor visitField(int access, String name, String desc,
-                String signature, Object value) {
-            return new FieldVisitor(Opcodes.ASM4) {
-
-                @Override
-                public AnnotationVisitor visitAnnotation(String desc,
-                        boolean visible) {
-                    return av;
-                }
-            };
-        }
-
-        @Override
-        public MethodVisitor visitMethod(int access, String name, String desc,
-                String signature, String[] exceptions) {
-            return new MethodVisitor(Opcodes.ASM4) {
-
-                @Override
-                public AnnotationVisitor visitAnnotationDefault() {
-                    return av;
-                }
-
-                @Override
-                public AnnotationVisitor visitAnnotation(String desc,
-                        boolean visible) {
-                    return av;
-                }
-
-                @Override
-                public AnnotationVisitor visitParameterAnnotation(
-                        int parameter, String desc, boolean visible) {
-                    return av;
-                }
-            };
-        }
-    }
-}
diff --git a/asm4/test/perf/org/objectweb/asm/ASMMemTest.java b/asm4/test/perf/org/objectweb/asm/ASMMemTest.java
deleted file mode 100644
index e23c89c..0000000
--- a/asm4/test/perf/org/objectweb/asm/ASMMemTest.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/***
- * ASM performance test: measures the performances of asm package
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * 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.
- */
-package org.objectweb.asm;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.InsnList;
-import org.objectweb.asm.tree.MethodNode;
-
-/*
- * Created on Nov 30, 2004-2011 as part of ASMPerf by treffer
- */
-
-/**
- * Memory performances tests for tree package.
- * 
- * @author treffer
- */
-public class ASMMemTest {
-
-    public static void main(final String[] args) {
-        if (args.length < 2) {
-            System.out
-                    .println("java ASMMemTest <jar-file> <number-of-classes>");
-            System.exit(1);
-        }
-
-        Runtime runtime = Runtime.getRuntime();
-        memDown(runtime);
-        System.out.println("Initial memory load: "
-                .concat(memFormat(getUsedMem(runtime))));
-
-        LinkedList<byte[]> fileData = new LinkedList<byte[]>();
-        int limit = Integer.parseInt(args[1]);
-        try {
-            long totalSize = 0;
-            JarInputStream jar = new JarInputStream(
-                    new FileInputStream(args[0]));
-            JarEntry entry = jar.getNextJarEntry();
-            while (fileData.size() < limit && entry != null) {
-                String name = entry.getName();
-                if (name.endsWith(".class")) {
-                    if (entry.getSize() != -1) {
-                        int len = (int) entry.getSize();
-                        byte[] data = new byte[len];
-                        int l = jar.read(data);
-                        assert l == len;
-                        fileData.add(data);
-                        totalSize += data.length;
-                    } else {
-                        System.err.println("No jar-entry size given... "
-                                + "Unimplemented, jar file not supported");
-                    }
-                }
-                entry = jar.getNextJarEntry();
-            }
-            System.out.println(memFormat(totalSize) + " class data, ~"
-                    + memFormat(totalSize / limit) + " per class.");
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        ArrayList<ClassNode> result = new ArrayList<ClassNode>(fileData.size());
-        long startmem;
-
-        for (int i = 0; i < 10; i++) {
-            System.out.println("\n> Run ".concat(Integer.toString(i + 1)));
-            Iterator<byte[]> files = fileData.iterator();
-            result.clear();
-            memDown(runtime);
-            System.out.println("Empty memory load: "
-                    .concat(memFormat(startmem = getUsedMem(runtime))));
-
-            long time = -System.currentTimeMillis();
-            while (files.hasNext()) {
-                byte data[] = files.next();
-                ClassReader reader = new ClassReader(data);
-                ClassNode clazz = new ClassNode();
-                reader.accept(clazz, 0);
-                result.add(clazz);
-            }
-            time += System.currentTimeMillis();
-
-            memDown(runtime);
-            System.out.println("Time: ".concat(timeFormat(time)));
-            System.out.println("Final memory load: "
-                    .concat(memFormat(getUsedMem(runtime))));
-            System.out.println("ASM memory load: "
-                    .concat(memFormat(getUsedMem(runtime) - startmem)));
-            for (int j = 0; j < limit; j++) {
-                ClassNode clazz = result.get(j);
-                List<MethodNode> l = clazz.methods;
-                for (int k = 0, lim = l.size(); k < lim; k++) {
-                    MethodNode m = l.get(k);
-                    InsnList insn = m.instructions;
-                    if (insn != null) {
-                        insn.clear();
-                    }
-                }
-            }
-            memDown(runtime);
-            System.out.println("ASM memory load (removed method code): "
-                    .concat(memFormat(getUsedMem(runtime) - startmem)));
-        }
-
-    }
-
-    public final static long getUsedMem(final Runtime r) {
-        return r.totalMemory() - r.freeMemory();
-    }
-
-    public final static String timeFormat(final long time) {
-        int min = (int) (time / (60 * 1000));
-        int sec = (int) ((time / 1000) % 60);
-        int msec = (int) (time % 1000);
-        StringBuffer sbuf = new StringBuffer(30);
-        if (min > 0) {
-            sbuf.append(min);
-            sbuf.append("min ");
-        }
-        if (sec > 0 || min > 0) {
-            sbuf.append(sec);
-            sbuf.append("s ");
-        }
-        if (msec > 0 || sec > 0 || min > 0) {
-            sbuf.append(msec);
-            sbuf.append("ms ");
-        }
-        sbuf.append('(');
-        sbuf.append(time);
-        sbuf.append("ms)");
-        return sbuf.toString();
-    }
-
-    public final static String memFormat(final long mem) {
-        int gb = (int) ((mem >> 30) & 0x3FF);
-        int mb = (int) ((mem >> 20) & 0x3FF);
-        int kb = (int) ((mem >> 10) & 0x3FF);
-        int bytes = (int) (mem & 0x3FF);
-        StringBuffer sbuf = new StringBuffer(30);
-        if (gb > 0) {
-            sbuf.append(gb);
-            sbuf.append("GB ");
-        }
-        if (mb > 0 || gb > 0) {
-            sbuf.append(mb);
-            sbuf.append("MB ");
-        }
-        if (kb > 0 || mb > 0 || gb > 0) {
-            sbuf.append(kb);
-            sbuf.append("KB ");
-        }
-        if (bytes > 0 || kb > 0 || mb > 0 || gb > 0) {
-            sbuf.append(bytes);
-            sbuf.append("bytes ");
-        }
-        sbuf.append('(');
-        sbuf.append(mem);
-        sbuf.append("bytes)");
-        return sbuf.toString();
-    }
-
-    public final static void memDown(final Runtime r) {
-        long oldmem;
-        do {
-            oldmem = getUsedMem(r);
-            for (int i = 0; i < 10; i++) {
-                // Calling System.gc once is very unsafe
-                System.gc();
-                try {
-                    Thread.sleep(10);
-                } catch (InterruptedException ie) {
-                }
-            }
-        } while (getUsedMem(r) < oldmem);
-    }
-}
\ No newline at end of file
diff --git a/asm4/test/perf/org/objectweb/asm/GenPerfTest.java b/asm4/test/perf/org/objectweb/asm/GenPerfTest.java
deleted file mode 100644
index bdc4660..0000000
--- a/asm4/test/perf/org/objectweb/asm/GenPerfTest.java
+++ /dev/null
@@ -1,607 +0,0 @@
-/***

- * ASM: a very small and fast Java bytecode manipulation framework

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * 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.

- */

-

-package org.objectweb.asm;

-

-import gnu.bytecode.Access;

-import gnu.bytecode.ClassType;

-import gnu.bytecode.CodeAttr;

-import gnu.bytecode.Field;

-import gnu.bytecode.Method;

-

-import java.io.ByteArrayOutputStream;

-import java.io.DataOutputStream;

-import java.io.IOException;

-import java.lang.reflect.Modifier;

-import java.util.Arrays;

-

-import jbet.Descriptor;

-import jbet.Instruction;

-import jbet.Snippit;

-

-import org.apache.bcel.Constants;

-import org.apache.bcel.generic.ArrayType;

-import org.apache.bcel.generic.ClassGen;

-import org.apache.bcel.generic.ConstantPoolGen;

-import org.apache.bcel.generic.MethodGen;

-import org.apache.bcel.generic.PUSH;

-import org.cojen.classfile.MethodInfo;

-import org.cojen.classfile.Modifiers;

-import org.cojen.classfile.TypeDesc;

-import org.gjt.jclasslib.bytecode.ImmediateByteInstruction;

-import org.gjt.jclasslib.bytecode.ImmediateShortInstruction;

-import org.gjt.jclasslib.bytecode.SimpleInstruction;

-import org.gjt.jclasslib.io.ByteCodeWriter;

-import org.gjt.jclasslib.structures.AccessFlags;

-import org.gjt.jclasslib.structures.AttributeInfo;

-import org.gjt.jclasslib.structures.CPInfo;

-import org.gjt.jclasslib.structures.ConstantPoolUtil;

-import org.gjt.jclasslib.structures.InvalidByteCodeException;

-import org.gjt.jclasslib.structures.attributes.CodeAttribute;

-import org.gjt.jclasslib.structures.attributes.SourceFileAttribute;

-import org.gjt.jclasslib.structures.constants.ConstantStringInfo;

-import org.mozilla.classfile.ByteCode;

-import org.mozilla.classfile.ClassFileWriter;

-

-import alt.jiapi.reflect.InstructionFactory;

-import alt.jiapi.reflect.InstructionList;

-import alt.jiapi.reflect.JiapiClass;

-import alt.jiapi.reflect.JiapiMethod;

-import alt.jiapi.reflect.MethodExistsException;

-import alt.jiapi.reflect.Signature;

-

-import com.claritysys.jvm.builder.CodeBuilder;

-import com.claritysys.jvm.classfile.CfMethod;

-import com.claritysys.jvm.classfile.ClassFile;

-import com.claritysys.jvm.classfile.ConstantPool;

-import com.claritysys.jvm.classfile.JVM;

-

-/**

- * Performance tests for frameworks that can only do bytecode generation.

- * 

- * @author Eric Bruneton

- */

-public class GenPerfTest {

-

-    final static int N = 100000;

-

-    public static void main(String[] args) throws Exception {

-        for (int i = 0; i < 5; ++i) {

-            asmTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            gnuByteCodeTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            csgBytecodeTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            cojenTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            jbetTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            jClassLibTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            jiapiTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            mozillaClassFileTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            bcelTest();

-        }

-        for (int i = 0; i < 5; ++i) {

-            aspectjBcelTest();

-        }

-    }

-

-    static void asmTest() {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            asmHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("ASM generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void gnuByteCodeTest() {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            gnuByteCodeHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("gnu.bytecode generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void csgBytecodeTest() {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            csgBytecodeHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("CSG bytecode generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void cojenTest() throws IOException {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            cojenHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("Cojen generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void jbetTest() throws IOException {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            jbetHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("JBET generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void jClassLibTest() throws IOException, InvalidByteCodeException {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            jClassLibHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("JClassLib generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void jiapiTest() throws MethodExistsException {

-        int N = 1000;

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            jiapiHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("Jiapi generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void mozillaClassFileTest() {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            mozillaClassFileHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("Mozilla Class File generation time: " + ((float) t)

-                / N + " ms/class");

-    }

-

-    static void bcelTest() {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            bcelHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("BCEL generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static void aspectjBcelTest() {

-        long t = System.currentTimeMillis();

-        for (int i = 0; i < N; ++i) {

-            aspectjBcelHelloWorld();

-        }

-        t = System.currentTimeMillis() - t;

-        System.out.println("AspectJ BCEL generation time: " + ((float) t) / N

-                + " ms/class");

-    }

-

-    static byte[] asmHelloWorld() {

-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);

-

-        cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "HelloWorld", null,

-                "java/lang/Object", null);

-        cw.visitSource("HelloWorld.java", null);

-

-        MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V",

-                null, null);

-        mw.visitVarInsn(Opcodes.ALOAD, 0);

-        mw.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",

-                "()V");

-        mw.visitInsn(Opcodes.RETURN);

-        mw.visitMaxs(0, 0);

-        mw.visitEnd();

-

-        mw = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "main",

-                "([Ljava/lang/String;)V", null, null);

-        mw.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out",

-                "Ljava/io/PrintStream;");

-        mw.visitLdcInsn("Hello world!");

-        mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream",

-                "println", "(Ljava/lang/String;)V");

-        mw.visitInsn(Opcodes.RETURN);

-        mw.visitMaxs(0, 0);

-        mw.visitEnd();

-

-        return cw.toByteArray();

-    }

-

-    static Method objectCtor = gnu.bytecode.Type.pointer_type

-            .getDeclaredMethod("<init>", 0);

-

-    static Field outField = ClassType.make("java.lang.System").getField("out");

-

-    static Method printlnMethod = ClassType.make("java.io.PrintStream")

-            .getDeclaredMethod("println",

-                    new gnu.bytecode.Type[] { gnu.bytecode.Type.string_type });

-

-    static byte[] gnuByteCodeHelloWorld() {

-        ClassType c = new ClassType("HelloWorld");

-        c.setSuper("java.lang.Object");

-        c.setModifiers(Access.PUBLIC);

-        c.setSourceFile("HelloWorld.java");

-

-        Method m = c.addMethod("<init>", "()V", Access.PUBLIC);

-        CodeAttr code = m.startCode();

-        code.pushScope();

-        code.emitPushThis();

-        code.emitInvokeSpecial(objectCtor);

-        code.emitReturn();

-        code.popScope();

-

-        m = c.addMethod("main", "([Ljava/lang/String;)V", Access.PUBLIC

-                | Access.STATIC);

-        code = m.startCode();

-        code.pushScope();

-        code.emitGetStatic(outField);

-        code.emitPushString("Hello world!");

-        code.emitInvokeVirtual(printlnMethod);

-        code.emitReturn();

-        code.popScope();

-

-        return c.writeToArray();

-    }

-

-    static byte[] csgBytecodeHelloWorld() {

-        ClassFile cf = new ClassFile("HelloWorld", "java/lang/Object",

-                "HelloWorld.java");

-        ConstantPool cp = cf.getConstantPool();

-

-        CfMethod method = cf.addMethod(JVM.ACC_PUBLIC, "<init>", "()V");

-        CodeBuilder code = new CodeBuilder(method);

-        code.add(JVM.ALOAD_0);

-        code.add(JVM.INVOKESPECIAL,

-                cp.addMethodRef(false, "java/lang/Object", "<init>", "()V"));

-        code.add(JVM.RETURN);

-        code.flush();

-

-        method = cf.addMethod(JVM.ACC_PUBLIC + JVM.ACC_STATIC, "main",

-                "([Ljava/lang/String;)V");

-        code = new CodeBuilder(method);

-        code.add(JVM.GETSTATIC, cp.addFieldRef("java/lang/System", "out",

-                "Ljava/io/PrintStream;"));

-        code.add(JVM.LDC, "Hello world!");

-        code.add(JVM.INVOKEVIRTUAL, cp.addMethodRef(false,

-                "java/io/PrintStream", "println", "(Ljava/lang/String;)V"));

-        code.add(JVM.RETURN);

-        code.flush();

-

-        return cf.writeToArray();

-    }

-

-    static TypeDesc printStream = TypeDesc.forClass("java.io.PrintStream");

-

-    static byte[] cojenHelloWorld() throws IOException {

-        org.cojen.classfile.ClassFile cf = new org.cojen.classfile.ClassFile(

-                "HelloWorld");

-

-        cf.setSourceFile("HelloWorld.java");

-

-        cf.addDefaultConstructor();

-

-        TypeDesc[] params = new TypeDesc[] { TypeDesc.STRING.toArrayType() };

-        MethodInfo mi = cf.addMethod(Modifiers.PUBLIC_STATIC, "main", null,

-                params);

-        org.cojen.classfile.CodeBuilder b = new org.cojen.classfile.CodeBuilder(

-                mi);

-        b.loadStaticField("java.lang.System", "out", printStream);

-        b.loadConstant("Hello world!");

-        b.invokeVirtual(printStream, "println", null,

-                new TypeDesc[] { TypeDesc.STRING });

-        b.returnVoid();

-

-        ByteArrayOutputStream bos = new ByteArrayOutputStream();

-        cf.writeTo(bos);

-

-        return bos.toByteArray();

-    }

-

-    static Descriptor emptyDesc = new Descriptor("()V");

-

-    static Descriptor mainDesc = new Descriptor("([Ljava/lang/String;)V");

-

-    static Descriptor printlnDesc = new Descriptor("(Ljava/lang/String;)V");

-

-    static jbet.Type printStreamType = new jbet.Type("Ljava/io/PrintStream;");

-

-    static byte[] jbetHelloWorld() throws IOException {

-        jbet.ClassInfo ci = new jbet.ClassInfo(null, "HelloWorld");

-

-        ci.sourceFile = "HelloWorld.java";

-

-        jbet.MethodInfo mi = new jbet.MethodInfo("<init>", emptyDesc,

-                jbet.MethodInfo.ACC_PUBLIC);

-        mi.code = new Snippit();

-        mi.code.push(new Instruction().setAload(0));

-        mi.code.push(new Instruction().setInvokeSpecial("java/lang/Object",

-                "<init>", emptyDesc));

-        mi.code.push(new Instruction().setReturn());

-        mi.maxLocals = 1;

-        mi.maxStack = 1;

-        ci.addMethod(mi);

-

-        mi = new jbet.MethodInfo("main", mainDesc, jbet.MethodInfo.ACC_PUBLIC

-                | jbet.MethodInfo.ACC_STATIC);

-        mi.code = new Snippit();

-        mi.code.push(new Instruction().setGetstatic("java/lang/System", "out",

-                printStreamType));

-        mi.code.push(new Instruction().setSpush("Hello world!"));

-        mi.code.push(new Instruction().setInvokeVirtual("java/io/PrintStream",

-                "println", printlnDesc));

-        mi.maxLocals = 1;

-        mi.maxStack = 2;

-        ci.addMethod(mi);

-

-        ci.resolveConstants();

-

-        ByteArrayOutputStream bos = new ByteArrayOutputStream();

-        ci.writeFile(bos);

-

-        return bos.toByteArray();

-    }

-

-    static byte[] jClassLibHelloWorld() throws InvalidByteCodeException,

-            IOException {

-        org.gjt.jclasslib.structures.ClassFile cf = new org.gjt.jclasslib.structures.ClassFile();

-        cf.setConstantPool(new CPInfo[0]);

-        ConstantPoolUtil.addConstantUTF8Info(cf, "", 0); // dummy constant

-        cf.setMajorVersion(45);

-        cf.setMinorVersion(3);

-        cf.setAccessFlags(AccessFlags.ACC_PUBLIC);

-        cf.setThisClass(ConstantPoolUtil.addConstantClassInfo(cf, "HelloWorld",

-                0));

-        cf.setSuperClass(ConstantPoolUtil.addConstantClassInfo(cf,

-                "java/lang/Object", 0));

-

-        SourceFileAttribute sa = new SourceFileAttribute();

-        sa.setAttributeNameIndex(ConstantPoolUtil.addConstantUTF8Info(cf,

-                SourceFileAttribute.ATTRIBUTE_NAME, 0));

-        sa.setSourcefileIndex(ConstantPoolUtil.addConstantUTF8Info(cf,

-                "HelloWorld.java", 0));

-

-        org.gjt.jclasslib.structures.MethodInfo mi1 = new org.gjt.jclasslib.structures.MethodInfo();

-        mi1.setAccessFlags(AccessFlags.ACC_PUBLIC);

-        mi1.setNameIndex(ConstantPoolUtil.addConstantUTF8Info(cf, "<init>", 0));

-        mi1.setDescriptorIndex(ConstantPoolUtil.addConstantUTF8Info(cf, "()V",

-                0));

-        CodeAttribute ca1 = new CodeAttribute();

-        ca1.setAttributeNameIndex(ConstantPoolUtil.addConstantUTF8Info(cf,

-                CodeAttribute.ATTRIBUTE_NAME, 0));

-        ca1.setCode(ByteCodeWriter.writeByteCode(Arrays

-                .asList(new org.gjt.jclasslib.bytecode.AbstractInstruction[] {

-                        new SimpleInstruction(

-                                org.gjt.jclasslib.bytecode.Opcodes.OPCODE_ALOAD_0),

-                        new ImmediateShortInstruction(

-                                org.gjt.jclasslib.bytecode.Opcodes.OPCODE_INVOKESPECIAL,

-                                ConstantPoolUtil.addConstantMethodrefInfo(cf,

-                                        "java/lang/Object", "<init>", "()V", 0)),

-                        new SimpleInstruction(

-                                org.gjt.jclasslib.bytecode.Opcodes.OPCODE_RETURN) })));

-        ca1.setMaxStack(1);

-        ca1.setMaxLocals(1);

-        mi1.setAttributes(new AttributeInfo[] { ca1 });

-

-        ConstantStringInfo s = new ConstantStringInfo();

-        s.setStringIndex(ConstantPoolUtil.addConstantUTF8Info(cf,

-                "Hello world!", 0));

-

-        org.gjt.jclasslib.structures.MethodInfo mi2 = new org.gjt.jclasslib.structures.MethodInfo();

-        mi2.setAccessFlags(AccessFlags.ACC_PUBLIC | AccessFlags.ACC_STATIC);

-        mi2.setNameIndex(ConstantPoolUtil.addConstantUTF8Info(cf, "main", 0));

-        mi2.setDescriptorIndex(ConstantPoolUtil.addConstantUTF8Info(cf,

-                "([Ljava/lang/String;)V", 0));

-        CodeAttribute ca2 = new CodeAttribute();

-        ca2.setAttributeNameIndex(ConstantPoolUtil.addConstantUTF8Info(cf,

-                CodeAttribute.ATTRIBUTE_NAME, 0));

-        ca2.setCode(ByteCodeWriter.writeByteCode(Arrays

-                .asList(new org.gjt.jclasslib.bytecode.AbstractInstruction[] {

-                        new ImmediateShortInstruction(

-                                org.gjt.jclasslib.bytecode.Opcodes.OPCODE_GETSTATIC,

-                                ConstantPoolUtil.addConstantFieldrefInfo(cf,

-                                        "java/lang/System", "out",

-                                        "Ljava/io/PrintStream;", 0)),

-                        new ImmediateByteInstruction(

-                                org.gjt.jclasslib.bytecode.Opcodes.OPCODE_LDC,

-                                false, ConstantPoolUtil.addConstantPoolEntry(

-                                        cf, s, 0)),

-                        new ImmediateShortInstruction(

-                                org.gjt.jclasslib.bytecode.Opcodes.OPCODE_INVOKEVIRTUAL,

-                                ConstantPoolUtil.addConstantMethodrefInfo(cf,

-                                        "java/io/PrintStream", "println",

-                                        "(Ljava/lang/String;)V", 0)) })));

-        ca2.setMaxStack(2);

-        ca2.setMaxLocals(1);

-        mi2.setAttributes(new AttributeInfo[] { ca2 });

-

-        cf.setMethods(new org.gjt.jclasslib.structures.MethodInfo[] { mi1, mi2 });

-        cf.setAttributes(new AttributeInfo[] { sa });

-

-        ByteArrayOutputStream bos = new ByteArrayOutputStream();

-        DataOutputStream dos = new DataOutputStream(bos);

-        cf.write(dos);

-        dos.close();

-

-        return bos.toByteArray();

-    }

-

-    static Signature emptySig = new Signature("()V");

-

-    static Signature mainSig = new Signature("([Ljava/lang/String;)V");

-

-    static Signature printlnSig = new Signature("(Ljava/lang/String;)V");

-

-    static byte[] jiapiHelloWorld() throws MethodExistsException {

-        JiapiClass c = JiapiClass.createClass("HelloWorld");

-

-        // No API to set SourceFile!

-

-        JiapiMethod method = c.addMethod(Modifier.PUBLIC, "<init>", emptySig);

-        InstructionList il = method.getInstructionList();

-        InstructionFactory iFactory = il.getInstructionFactory();

-        il.add(iFactory.aload(0));

-        il.add(iFactory.invoke(0, "java/lang/Object", "<init>", emptySig));

-        il.add(iFactory.returnMethod(method));

-

-        method = c

-                .addMethod(Modifier.PUBLIC | Modifier.STATIC, "main", mainSig);

-        il = method.getInstructionList();

-        iFactory = il.getInstructionFactory();

-        il.add(iFactory.getField(Modifier.STATIC, "java/lang/System", "out",

-                "Ljava/io/PrintStream;"));

-        il.add(iFactory.pushConstant("Hello world!"));

-        il.add(iFactory.invoke(0, "java/io/PrintStream", "println", printlnSig));

-        il.add(iFactory.returnMethod(method));

-

-        return c.getByteCode();

-    }

-

-    static byte[] mozillaClassFileHelloWorld() {

-        ClassFileWriter c = new ClassFileWriter("HelloWorld",

-                "java/lang/Object", "HelloWorld.java");

-

-        c.startMethod("<init>", "()V", ClassFileWriter.ACC_PUBLIC);

-        c.addLoadThis();

-        c.addInvoke(ByteCode.INVOKESPECIAL, "java/lang/Object", "<init>", "()V");

-        c.add(ByteCode.RETURN);

-        c.stopMethod((short) 1);

-

-        c.startMethod(

-                "main",

-                "()V",

-                (short) (ClassFileWriter.ACC_PUBLIC | ClassFileWriter.ACC_STATIC));

-        c.add(ByteCode.GETSTATIC, "java/lang/System", "out",

-                "Ljava/io/PrintStream;");

-        c.addPush("Hello world!");

-        c.addInvoke(ByteCode.INVOKEVIRTUAL, "java/io/PrintStream", "println",

-                "(Ljava/lang/String;)V");

-        c.add(ByteCode.RETURN);

-        c.stopMethod((short) 1);

-

-        return c.toByteArray();

-    }

-

-    static org.apache.bcel.generic.Type printStreamT = org.apache.bcel.generic.Type

-            .getType("Ljava/io/PrintStream;");

-

-    static byte[] bcelHelloWorld() {

-        ClassGen cg = new ClassGen("HelloWorld", "java/lang/Object",

-                "HelloWorld.java", Constants.ACC_PUBLIC, null);

-

-        cg.addEmptyConstructor(Constants.ACC_PUBLIC);

-

-        ConstantPoolGen cp = cg.getConstantPool();

-        org.apache.bcel.generic.InstructionList il = new org.apache.bcel.generic.InstructionList();

-        org.apache.bcel.generic.InstructionFactory factory = new org.apache.bcel.generic.InstructionFactory(

-                cg);

-

-        MethodGen mg = new MethodGen(Constants.ACC_STATIC

-                | Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID,

-                new org.apache.bcel.generic.Type[] { new ArrayType(

-                        org.apache.bcel.generic.Type.STRING, 1) }, null,

-                "main", "HelloWorld", il, cp);

-        il.append(factory.createGetStatic("java/lang/System", "out",

-                printStreamT));

-        il.append(new PUSH(cp, "Hello world!"));

-        il.append(factory

-                .createInvoke(

-                        "java.io.PrintStream",

-                        "println",

-                        org.apache.bcel.generic.Type.VOID,

-                        new org.apache.bcel.generic.Type[] { org.apache.bcel.generic.Type.STRING },

-                        Constants.INVOKESPECIAL));

-

-        mg.setMaxStack();

-        cg.addMethod(mg.getMethod());

-

-        return cg.getJavaClass().getBytes();

-    }

-

-    static org.aspectj.apache.bcel.generic.Type printStreamAT = org.aspectj.apache.bcel.generic.Type

-            .getType("Ljava/io/PrintStream;");

-

-    static byte[] aspectjBcelHelloWorld() {

-        org.aspectj.apache.bcel.generic.ClassGen cg = new org.aspectj.apache.bcel.generic.ClassGen(

-                "HelloWorld", "java/lang/Object", "HelloWorld.java",

-                Constants.ACC_PUBLIC, null);

-

-        cg.addEmptyConstructor(Constants.ACC_PUBLIC);

-

-        org.aspectj.apache.bcel.generic.ConstantPoolGen cp = cg

-                .getConstantPool();

-        org.aspectj.apache.bcel.generic.InstructionList il = new org.aspectj.apache.bcel.generic.InstructionList();

-        org.aspectj.apache.bcel.generic.InstructionFactory factory = new org.aspectj.apache.bcel.generic.InstructionFactory(

-                cg);

-

-        org.aspectj.apache.bcel.generic.MethodGen mg = new org.aspectj.apache.bcel.generic.MethodGen(

-                Constants.ACC_STATIC | Constants.ACC_PUBLIC,

-                org.aspectj.apache.bcel.generic.Type.VOID,

-                new org.aspectj.apache.bcel.generic.Type[] { new org.aspectj.apache.bcel.generic.ArrayType(

-                        org.aspectj.apache.bcel.generic.Type.STRING, 1) },

-                null, "main", "HelloWorld", il, cp);

-        il.append(factory.createGetStatic("java/lang/System", "out",

-                printStreamAT));

-        il.append(new org.aspectj.apache.bcel.generic.PUSH(cp, "Hello world!"));

-        il.append(factory

-                .createInvoke(

-                        "java.io.PrintStream",

-                        "println",

-                        org.aspectj.apache.bcel.generic.Type.VOID,

-                        new org.aspectj.apache.bcel.generic.Type[] { org.aspectj.apache.bcel.generic.Type.STRING },

-                        Constants.INVOKESPECIAL));

-

-        mg.setMaxStack();

-        cg.addMethod(mg.getMethod());

-

-        return cg.getJavaClass().getBytes();

-    }

-}

diff --git a/asm4/test/perf/org/objectweb/asm/xml/XMLPerfTest.java b/asm4/test/perf/org/objectweb/asm/xml/XMLPerfTest.java
deleted file mode 100644
index 24cd92e..0000000
--- a/asm4/test/perf/org/objectweb/asm/xml/XMLPerfTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004-2011, Eugene Kuleshov
- * 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.
- */
-package org.objectweb.asm.xml;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-
-/**
- * Performance test suite for ASM XML
- * 
- * @author Eugene Kuleshov
- */
-public class XMLPerfTest {
-
-    private static final String[] ENGINES = {
-            "jd.xml.xslt.trax.TransformerFactoryImpl",
-            "net.sf.saxon.TransformerFactoryImpl",
-            "org.apache.xalan.processor.TransformerFactoryImpl", };
-
-    private static final String[] TEMPLATES = { "copy.xsl", "linenumbers.xsl",
-            "profile.xsl", };
-
-    public static void main(final String[] args) throws Exception {
-        System.err.println("Comparing XSLT performance for ASM XSLT");
-        System.err.println("This may take 20 to 30 minutes\n");
-
-        File examplesDir = new File(args[0]);
-        if (!examplesDir.isDirectory()) {
-            System.err.println(args[0] + " must be directory");
-            return;
-        }
-
-        for (int i = 0; i < ENGINES.length; i++) {
-            System.err.println(ENGINES[i]);
-            process(null, ENGINES[i]);
-            for (int j = 0; j < TEMPLATES.length; j++) {
-                process(new File(examplesDir, TEMPLATES[j]).getAbsolutePath(),
-                        ENGINES[i]);
-            }
-            System.err.println();
-        }
-
-    }
-
-    private static void process(final String name, final String engine)
-            throws Exception {
-        System.setProperty("javax.xml.transform.TransformerFactory", engine);
-        processRep(name, Processor.BYTECODE);
-        processRep(name, Processor.MULTI_XML);
-        processRep(name, Processor.SINGLE_XML);
-    }
-
-    private static void processRep(final String name, final int outRep) {
-        long l1 = System.currentTimeMillis();
-        int n = 0;
-        try {
-            Class<?> c = XMLPerfTest.class;
-            String u = c.getResource("/java/lang/String.class").toString();
-            final InputStream is = new BufferedInputStream(new URL(u.substring(
-                    4, u.indexOf('!'))).openStream());
-            final OutputStream os = new IgnoringOutputStream();
-            final StreamSource xslt = name == null ? null : new StreamSource(
-                    new FileInputStream(name));
-
-            Processor p = new DotObserver(Processor.BYTECODE, outRep, is, os,
-                    xslt);
-            n = p.process();
-
-        } catch (Exception ex) {
-            System.err.println();
-            System.err.println(ex);
-
-        }
-
-        long l2 = System.currentTimeMillis();
-
-        System.err.println();
-        System.err.println("  " + outRep + " " + name + "  " + (l2 - l1)
-                + "ms  " + 1000f * n / (l2 - l1));
-    }
-
-    private static final class DotObserver extends Processor {
-
-        public DotObserver(final int inRepresenation,
-                final int outRepresentation, final InputStream input,
-                final OutputStream output, final Source xslt) {
-            super(inRepresenation, outRepresentation, input, output, xslt);
-        }
-    }
-
-    static final class IgnoringOutputStream extends OutputStream {
-
-        @Override
-        public final void write(final int b) throws IOException {
-        }
-
-        @Override
-        public final void write(final byte[] b) throws IOException {
-        }
-
-        @Override
-        public final void write(final byte[] b, final int off, final int len)
-                throws IOException {
-        }
-    }
-}
diff --git a/build.xml b/build.xml
deleted file mode 100644
index 38bf3d4..0000000
--- a/build.xml
+++ /dev/null
@@ -1,439 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright (C) 2014 The Android Open Source Project
-
-   Licensed 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.
--->
-
-<project name="jill" default="all"
-  xmlns:if="ant:if">
-
-  <description>
-      This buildfile is used to build all Jill projects and run tests. It depends on Jack's build.xml.
-  </description>
-
-  <import file="../jack/build.xml"/>
-
-  <target name="all" description="build all Jill projects" depends="jill,
-    jill-api,
-    jill-api-src,
-    jillunittests"/>
-
-  <target name="clean" depends="jill-clean,
-    jill-api-lib-clean,
-    jill-api-src-clean,
-    jillunittests-clean,
-    asm4-clean,
-    dist-clean"/>
-
-  <dirname property="jill-project.dir" file="${ant.file.jill}"/>
-
-  <property name="jill.dir" value="${jill-project.dir}/jill" />
-  <property name="jill-api.dir" value="${jill-project.dir}/jill-api" />
-  <property name="asm4.dir" value="${jill-project.dir}/asm4" />
-
-  <!-- ******************* -->
-  <!-- Distributed files   -->
-  <!-- ******************* -->
-
-  <property name="jill-top-dist.dir" value="${jill-project.dir}/dist" />
-
-  <target name="dist-clean">
-    <delete dir="${jill-top-dist.dir}"/>
-  </target>
-
-  <target name="dist" description="package a Jill distribution" depends="
-    dist-check,
-    jill,
-    jill-api,
-    jill-api-src">
-    <mkdir dir="${jill-top-dist.dir}"/>
-    <copy todir="${jill-top-dist.dir}" flatten="true">
-      <filelist dir="/" >
-        <file name="${jill.dist.dir}/${jill.execname}" />
-        <file name="${jill-api.dist.dir}/${jill-api.name}" />
-        <file name="${jill-api.dist.dir}/${jill-api-src.name}" />
-      </filelist>
-    </copy>
-
-    <mkdir dir="${jill-top-dist.dir}/tmp"/>
-
-    <copy file="${jill-project.dir}/version.properties" tofile="${jill-top-dist.dir}/tmp/version.properties"/>
-     <propertyfile file="${jill-top-dist.dir}/tmp/version.properties">
-       <entry if:set="dist.sha"  key="version.sha" value="${dist.sha}"/>
-       <entry if:set="dist.build-id"  key="version.buildid" value="${dist.build-id}"/>
-     </propertyfile>
-
-    <copy file="${jill-top-dist.dir}/tmp/version.properties" tofile="${jill-top-dist.dir}/tmp/jill-version.properties"/>
-     <jar destfile="${jill-top-dist.dir}/${jill.execname}" update="true"
-       basedir="${jill-top-dist.dir}/tmp"
-       includes="jill-version.properties"/>
-
-    <copy file="${jill-top-dist.dir}/tmp/version.properties" tofile="${jill-top-dist.dir}/tmp/jill-api-version.properties"/>
-     <jar destfile="${jill-top-dist.dir}/${jill-api.name}" update="true"
-       basedir="${jill-top-dist.dir}/tmp"
-       includes="jill-api-version.properties"/>
-
-    <delete dir="${jill-top-dist.dir}/tmp"/>
-
-  </target>
-
-  <!-- ******************* -->
-  <!-- jill                -->
-  <!-- ******************* -->
-  <property name="jill.build.dir" value="${jill.dir}/build/jill" />
-  <property name="jill.libs.dir" value="${jill.dir}/libs" />
-  <property name="jill.build.outdir" value="${jill.build.dir}/classes" />
-  <property name="jill.dist.dir" value="${jill.dir}/dist" />
-  <property name="jill.execname" value="jill.jar" />
-
-  <target name="jill-clean">
-    <delete dir="${jill.build.dir}" />
-    <delete dir="${jill.dist.dir}" />
-    <delete dir="${jill.libs.dir}" />
-  </target>
-
-  <target name="jill-copy-libs" depends="jill-api-lib,sched-lib,guava-lib,asm4-lib,args4j-lib,jsr305-lib,
-    dexcomparator-lib">
-    <copy todir="${jill.libs.dir}" flatten="true">
-      <filelist id="jill.libs.filelist" dir="/" >
-        <file name="${jill-api.dist.dir}/${jill-api.lib.name}"/>
-        <file name="${schedlib.dist.dir}/${schedlib.libname}"/>
-        <file name="${guava.dist.dir}/${guava.libname}"/>
-        <file name="${args4j.dist.dir}/${args4j.libname}"/>
-        <file name="${jsr305.dist.dir}/${jsr305.libname}"/>
-        <file name="${asm4.dist.dir}/${asm4.libname}"/>
-        <file name="${dexcomparator.dist.dir}/${dexcomparator.libname}"/>
-      </filelist>
-    </copy>
-  </target>
-
-  <target name="jill-check">
-    <union id ="jill.uptodate.files">
-      <filelist refid="jill.libs.filelist" />
-    </union>
-    <uptodate property="jill.uptodate" targetfile="${jill.dist.dir}/${jill.execname}">
-      <srcfiles dir="${jill.dir}/src" />
-      <srcresources refid="jill.uptodate.files" />
-      <srcfiles dir="${jill.dir}/rsc"/>
-    </uptodate>
-  </target>
-
-  <target name="jill" depends="jill-copy-libs, jill-check" unless="jill.uptodate">
-    <!-- project layout -->
-    <delete dir="${jill.build.outdir}"/>
-    <mkdir dir="${jill.build.outdir}"/>
-    <mkdir dir="${jill.dist.dir}"/>
-    <!-- compile -->
-    <javac  encoding="UTF-8" srcdir="${jill.dir}/src"
-          destdir="${jill.build.outdir}"
-          source="1.5" target="1.5"
-          debug="true" includeantruntime="false">
-      <classpath>
-        <filelist refid="jill.libs.filelist" />
-      </classpath>
-    </javac>
-    <!-- package -->
-    <copy todir="${jill.build.outdir}">
-      <fileset dir="${jill.dir}/rsc">
-        <include name="**/*" />
-      </fileset>
-      <fileset dir="${jill-api.lib.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-      <fileset dir="${schedlib.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-      <fileset dir="${args4j.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-      <fileset dir="${jsr305.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-      <fileset dir="${asm4.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-    </copy>
-    <unzip dest="${jill.build.outdir}" src="${guava.dist.dir}/${guava.libname}">
-      <patternset excludes="META-INF/**"/>
-    </unzip>
-
-    <copy file="${jill-project.dir}/version.properties"
-          tofile="${jill.build.outdir}/jill-version.properties"/>
-
-    <jar destfile="${jill.dist.dir}/${jill.execname}"
-          manifest="${jill.dir}/etc/manifest.txt"
-          basedir="${jill.build.outdir}"
-          includes="**"/>
-  </target>
-
-
-  <!-- ******************* -->
-  <!-- jill-api-lib        -->
-  <!-- ******************* -->
-  <property name="jill-api.lib.build.dir" value="${jill-api.dir}/build/lib" />
-  <property name="jill-api.lib.build.outdir" value="${jill-api.lib.build.dir}/classes" />
-  <property name="jill-api.libs.dir" value="${jill-api.dir}/libs" />
-  <property name="jill-api.dist.dir" value="${jill-api.dir}/dist" />
-  <property name="jill-api.lib.name" value="jill-api-lib.jar" />
-
-  <target name="jill-api-lib-clean">
-    <delete dir="${jill-api.lib.build.dir}"/>
-    <delete dir="${jill-api.dist.dir}"/>
-    <delete dir="${jill-api.libs.dir}"/>
-  </target>
-
-  <target name="jill-api-lib-copy-libs" depends="jsr305-lib">
-    <copy todir="${jill-api.libs.dir}" flatten="true">
-      <filelist dir="/" >
-        <file name="${jsr305.dist.dir}/${jsr305.libname}"/>
-      </filelist>
-    </copy>
-  </target>
-
-  <target name="jill-api-check">
-    <uptodate property="jill-api.uptodate" targetfile="${jill-api.dist.dir}/${jill-api.lib.name}">
-      <srcfiles dir="${jill-api.dir}/src" />
-      <srcfiles file="${jsr305.dist.dir}/${jsr305.libname}" />
-    </uptodate>
-  </target>
-
-  <target name="jill-api-lib" depends="jill-api-lib-copy-libs, jill-api-check" unless="jill-api.uptodate">
-    <delete dir="${jill-api.lib.build.outdir}"/>
-    <mkdir dir="${jill-api.lib.build.outdir}"/>
-    <javac  encoding="UTF-8" srcdir="${jill-api.dir}/src" destdir="${jill-api.lib.build.outdir}"
-          source="1.6" target="1.6" debug="true"
-          includeantruntime="false"  includeDestClasses="false" nowarn="true">
-      <classpath>
-        <filelist dir="/" files="${jsr305.dist.dir}/${jsr305.libname}" />
-      </classpath>
-      <exclude name="com/android/jack/api/example/**"/>
-    </javac>
-    <jar destfile="${jill-api.dist.dir}/${jill-api.lib.name}">
-      <fileset dir="${jill-api.lib.build.outdir}"/>
-    </jar>
-  </target>
-
-
-  <!-- ******************* -->
-  <!-- jill-api            -->
-  <!-- ******************* -->
-  <property name="jill-api.build.dir" value="${jill-api.dir}/build/exec" />
-  <property name="jill-api.build.outdir" value="${jill-api.build.dir}/classes" />
-  <property name="jill-api.name" value="jill-api.jar" />
-
-  <target name="jill-api" depends="jill-api-lib">
-
-    <copy file="${jill-project.dir}/version.properties"
-          tofile="${jill-api.lib.build.outdir}/jill-api-version.properties"/>
-
-    <jar destfile="${jill-api.dist.dir}/${jill-api.name}">
-      <fileset dir="${jsr305.build.outdir}"/>
-      <fileset dir="${jill-api.lib.build.outdir}"/>
-    </jar>
-  </target>
-
-
-  <!-- ******************* -->
-  <!-- jill-api-src        -->
-  <!-- ******************* -->
-  <property name="jill-api-src.name" value="jill-api-src.zip" />
-
-  <target name="jill-api-src-clean">
-    <delete dir="${jill-api.dist.dir}/${jill-api-src.name}"/>
-  </target>
-
-  <target name="jill-api-src">
-    <zip destfile="${jill-api.dist.dir}/${jill-api-src.name}"
-        basedir="${jill-api.dir}/src" />
-  </target>
-
-
-  <!-- ******************* -->
-  <!-- jillunittests       -->
-  <!-- ******************* -->
-  <property name="jillunittests.build.dir" value="${jill.dir}/build/jillunittests" />
-  <property name="jillunittests.build.outdir" value="${jillunittests.build.dir}/classes" />
-  <property name="jillunittests.execname" value="jillunittests.jar" />
-
-  <target name="jillunittests-clean">
-    <delete dir="${jillunittests.build.dir}" />
-    <delete dir="${jill.dist.dir}/${jillunittests.execname}" />
-  </target>
-
-  <target name="jillunittests-check">
-    <uptodate property="jillunittests.uptodate" targetfile="${jill.dist.dir}/${jillunittests.execname}">
-      <srcfiles dir="${jill.dir}/tests" />
-      <srcfiles file="${jill.dist.dir}/${jill.execname}" />
-      <srcfiles file="${jill-api.dist.dir}/${jill-api.name}" />
-      <srcfiles file="${jackunittests.dist.dir}/${jackunittests.execname}" />
-      <srcfiles file="${jack-tests.dist.dir}/${jack-tests.execname}" />
-    </uptodate>
-  </target>
-
-  <target name="jillunittests" depends="jill, jill-api, jackunittests, jack-tests, jillunittests-check" unless="jillunittests.uptodate">
-    <!-- project layout -->
-    <delete dir="${jillunittests.build.outdir}"/>
-    <mkdir dir="${jillunittests.build.outdir}"/>
-    <!-- compile -->
-    <javac  encoding="UTF-8" srcdir="${jill.dir}/tests"
-          destdir="${jillunittests.build.outdir}"
-          source="1.5" target="1.5"
-          debug="true" includeantruntime="false">
-      <classpath>
-        <filelist dir="/">
-          <file name="${jill.dist.dir}/${jill.execname}" />
-          <file name="${jill-api.dist.dir}/${jill-api.name}" />
-          <file name="${jackunittests.dist.dir}/${jackunittests.execname}" />
-          <file name="${jack-tests.dist.dir}/${jack-tests.execname}" />
-        </filelist>
-      </classpath>
-    </javac>
-    <!-- package -->
-    <copy todir="${jillunittests.build.outdir}">
-      <fileset dir="${jill.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-      <fileset dir="${jackunittests.build.outdir}">
-        <include name="**/*" />
-      </fileset>
-    </copy>
-    <jar destfile="${jill.dist.dir}/${jillunittests.execname}"
-            basedir="${jillunittests.build.outdir}"
-            includes="**"/>
-  </target>
-
-
-  <!-- ******************* -->
-  <!-- asm4                -->
-  <!-- ******************* -->
-  <property name="asm4.build.dir" value="${asm4.dir}/build" />
-  <property name="asm4.build.outdir" value="${asm4.build.dir}/classes" />
-  <property name="asm4.dist.dir" value="${asm4.dir}/dist" />
-  <property name="asm4.libname" value="asm4-lib.jar" />
-
-  <target name="asm4-clean">
-    <delete dir="${asm4.build.dir}" />
-    <delete dir="${asm4.dist.dir}" />
-  </target>
-
-  <target name="asm4-lib">
-    <!-- project layout -->
-    <mkdir dir="${asm4.build.outdir}"/>
-    <mkdir dir="${asm4.dist.dir}"/>
-    <!-- compile -->
-    <dependset>
-      <sources>
-        <fileset dir="${asm4.dir}/src" />
-      </sources>
-      <targets>
-        <fileset file="${asm4.dist.dir}/${asm4.libname}"/>
-      </targets>
-    </dependset>
-    <javac  encoding="UTF-8" srcdir="${asm4.dir}/src"
-          destdir="${asm4.build.outdir}"
-          source="1.5" target="1.5"
-          debug="true" includeantruntime="false"/>
-    <!-- package -->
-    <jar destfile="${asm4.dist.dir}/${asm4.libname}"
-          basedir="${asm4.build.outdir}"
-          includes="**"/>
-  </target>
-
-  <!-- ******************* -->
-  <!-- tests               -->
-  <!-- ******************* -->
-  <property name="jill.tests.output" value="${jill-project.dir}/tests-results"/>
-
-  <filelist id="jill.junit.tests.classpath" dir="/">
-    <file name="${jack-tests.dist.dir}/${jack-tests.execname}" />
-    <file name="${jill.dist.dir}/${jillunittests.execname}" />
-    <file name="${jill-api.dist.dir}/${jill-api.lib.name}" />
-  </filelist>
-
-  <target name="test-jill-clean" >
-    <delete dir="${jill.tests.output}"/>
-  </target>
-
-  <target name="test-jill" description="run Jill tests that must pass before submitting a change"
-    depends="tests-check-config, jillunittests">
-    <mkdir dir="${jill.tests.output}/test-jill/html"/>
-    <junit fork="yes" failureproperty="test-jill.failure">
-      <formatter type="xml"/>
-      <jvmarg value="-Dtests.config=${tests.config}"/>
-      <jvmarg value="-ea"/>
-      <classpath>
-        <filelist refid="jill.junit.tests.classpath" />
-      </classpath>
-      <test name="com.android.jill.PreSubmitTests"
-        todir="${jill.tests.output}/test-jill/"
-        outfile="test-jill" />
-    </junit>
-    <junitreport todir="${jill.tests.output}/test-jill">
-      <fileset dir="${jill.tests.output}/test-jill">
-        <include name="test-jill.xml"/>
-      </fileset>
-      <report format="frames" todir="${jill.tests.output}/test-jill/html"/>
-    </junitreport>
-    <fail message="TESTS FAILED" if="test-jill.failure" />
-  </target>
-
-  <target name="test-jill-long" description="run long lasting Jill tests"
-    depends="tests-check-config, jillunittests">
-    <mkdir dir="${jill.tests.output}/test-jill-long/html"/>
-    <junit fork="yes" failureproperty="test-jill.failure">
-      <formatter type="xml"/>
-      <jvmarg value="-Dtests.config=${tests.config}"/>
-      <jvmarg value="-ea"/>
-      <classpath>
-        <filelist refid="jill.junit.tests.classpath" />
-      </classpath>
-      <test name="com.android.jill.LongLastingTests"
-        todir="${jill.tests.output}/test-jill-long/"
-        outfile="test-jill-long" />
-    </junit>
-    <junitreport todir="${jill.tests.output}/test-jill-long">
-      <fileset dir="${jill.tests.output}/test-jill-long">
-        <include name="test-jill-long.xml"/>
-      </fileset>
-      <report format="frames" todir="${jill.tests.output}/test-jill-long/html"/>
-    </junitreport>
-    <fail message="TESTS FAILED" if="test-jill.failure" />
-  </target>
-
-  <target name="test-jill-all" description="runs all Jill tests"
-  depends="tests-check-config, jillunittests">
-    <mkdir dir="${jill.tests.output}/test-jill-all/html"/>
-    <junit fork="yes" failureproperty="test-jill.failure">
-      <formatter type="xml"/>
-      <jvmarg value="-Dtests.config=${tests.config}"/>
-      <jvmarg value="-ea"/>
-      <classpath>
-        <filelist refid="jill.junit.tests.classpath" />
-      </classpath>
-      <test name="com.android.jill.AllTests"
-        todir="${jill.tests.output}/test-jill-all/"
-        outfile="test-jill-all" />
-    </junit>
-    <junitreport todir="${jill.tests.output}/test-jill-all">
-      <fileset dir="${jill.tests.output}/test-jill-all">
-        <include name="test-jill-all.xml"/>
-      </fileset>
-      <report format="frames" todir="${jill.tests.output}/test-jill-all/html"/>
-    </junitreport>
-    <fail message="TESTS FAILED" if="test-jill.failure" />
-  </target>
-
-</project>
-
-
diff --git a/jill-api/.checkstyle b/jill-api/.checkstyle
deleted file mode 100644
index 5cc9f9e..0000000
--- a/jill-api/.checkstyle
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<fileset-config file-format-version="1.2.0" simple-config="false" sync-formatter="false">
-  <local-check-config name="Jack Tests CheckStyle" location="jackstyle.xml" type="project" description="">
-    <additional-data name="protect-config-file" value="true"/>
-  </local-check-config>
-  <fileset name="all" enabled="false" check-config-name="Sun Checks" local="false">
-    <file-match-pattern match-pattern="." include-pattern="true"/>
-  </fileset>
-  <fileset name="Jack Tests Checkstyle" enabled="true" check-config-name="Jack Tests CheckStyle" local="true">
-    <file-match-pattern match-pattern="^src.*\.java$" include-pattern="true"/>
-  </fileset>
-</fileset-config>
diff --git a/jill-api/.classpath b/jill-api/.classpath
deleted file mode 100644
index 6a74d2e..0000000
--- a/jill-api/.classpath
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="src" path=".apt_generated">
-		<attributes>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jill-api/.project b/jill-api/.project
deleted file mode 100644
index e55032d..0000000
--- a/jill-api/.project
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>jill-api</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
-		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
-	</natures>
-</projectDescription>
diff --git a/jill-api/.settings/edu.umd.cs.findbugs.core.prefs b/jill-api/.settings/edu.umd.cs.findbugs.core.prefs
deleted file mode 100644
index ea6af7a..0000000
--- a/jill-api/.settings/edu.umd.cs.findbugs.core.prefs
+++ /dev/null
@@ -1,134 +0,0 @@
-#FindBugs User Preferences
-#Fri Feb 28 14:57:04 CET 2014
-cloud_id=edu.umd.cs.findbugs.cloud.doNothingCloud
-detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
-detectorAtomicityProblem=AtomicityProblem|true
-detectorBadAppletConstructor=BadAppletConstructor|false
-detectorBadResultSetAccess=BadResultSetAccess|true
-detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
-detectorBadUseOfReturnValue=BadUseOfReturnValue|true
-detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
-detectorBooleanReturnNull=BooleanReturnNull|true
-detectorCallToUnsupportedMethod=CallToUnsupportedMethod|false
-detectorCheckExpectedWarnings=CheckExpectedWarnings|false
-detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
-detectorCheckRelaxingNullnessAnnotation=CheckRelaxingNullnessAnnotation|true
-detectorCheckTypeQualifiers=CheckTypeQualifiers|true
-detectorCloneIdiom=CloneIdiom|true
-detectorComparatorIdiom=ComparatorIdiom|true
-detectorConfusedInheritance=ConfusedInheritance|true
-detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
-detectorCrossSiteScripting=CrossSiteScripting|true
-detectorDefaultEncodingDetector=DefaultEncodingDetector|true
-detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
-detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
-detectorDontIgnoreResultOfPutIfAbsent=DontIgnoreResultOfPutIfAbsent|true
-detectorDontUseEnum=DontUseEnum|true
-detectorDroppedException=DroppedException|true
-detectorDumbMethodInvocations=DumbMethodInvocations|true
-detectorDumbMethods=DumbMethods|true
-detectorDuplicateBranches=DuplicateBranches|true
-detectorEmptyZipFileEntry=EmptyZipFileEntry|true
-detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
-detectorExplicitSerialization=ExplicitSerialization|true
-detectorFinalizerNullsFields=FinalizerNullsFields|true
-detectorFindBadCast2=FindBadCast2|true
-detectorFindBadForLoop=FindBadForLoop|true
-detectorFindCircularDependencies=FindCircularDependencies|false
-detectorFindDeadLocalStores=FindDeadLocalStores|true
-detectorFindDoubleCheck=FindDoubleCheck|true
-detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
-detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
-detectorFindFinalizeInvocations=FindFinalizeInvocations|true
-detectorFindFloatEquality=FindFloatEquality|true
-detectorFindHEmismatch=FindHEmismatch|true
-detectorFindInconsistentSync2=FindInconsistentSync2|true
-detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
-detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
-detectorFindMaskedFields=FindMaskedFields|true
-detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
-detectorFindNakedNotify=FindNakedNotify|true
-detectorFindNonShortCircuit=FindNonShortCircuit|true
-detectorFindNullDeref=FindNullDeref|true
-detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true
-detectorFindOpenStream=FindOpenStream|true
-detectorFindPuzzlers=FindPuzzlers|true
-detectorFindRefComparison=FindRefComparison|true
-detectorFindReturnRef=FindReturnRef|true
-detectorFindRunInvocations=FindRunInvocations|true
-detectorFindSelfComparison=FindSelfComparison|true
-detectorFindSelfComparison2=FindSelfComparison2|true
-detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
-detectorFindSpinLoop=FindSpinLoop|true
-detectorFindSqlInjection=FindSqlInjection|true
-detectorFindTwoLockWait=FindTwoLockWait|true
-detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
-detectorFindUnconditionalWait=FindUnconditionalWait|true
-detectorFindUninitializedGet=FindUninitializedGet|true
-detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
-detectorFindUnreleasedLock=FindUnreleasedLock|true
-detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
-detectorFindUnsyncGet=FindUnsyncGet|true
-detectorFindUseOfNonSerializableValue=FindUseOfNonSerializableValue|true
-detectorFindUselessControlFlow=FindUselessControlFlow|true
-detectorFormatStringChecker=FormatStringChecker|true
-detectorHugeSharedStringConstants=HugeSharedStringConstants|true
-detectorIDivResultCastToDouble=IDivResultCastToDouble|true
-detectorIncompatMask=IncompatMask|true
-detectorInconsistentAnnotations=InconsistentAnnotations|true
-detectorInefficientMemberAccess=InefficientMemberAccess|false
-detectorInefficientToArray=InefficientToArray|true
-detectorInfiniteLoop=InfiniteLoop|true
-detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
-detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
-detectorInitializationChain=InitializationChain|true
-detectorInitializeNonnullFieldsInConstructor=InitializeNonnullFieldsInConstructor|true
-detectorInstantiateStaticClass=InstantiateStaticClass|true
-detectorIntCast2LongAsInstant=IntCast2LongAsInstant|true
-detectorInvalidJUnitTest=InvalidJUnitTest|true
-detectorIteratorIdioms=IteratorIdioms|true
-detectorLazyInit=LazyInit|true
-detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
-detectorLostLoggerDueToWeakReference=LostLoggerDueToWeakReference|true
-detectorMethodReturnCheck=MethodReturnCheck|true
-detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
-detectorMutableLock=MutableLock|true
-detectorMutableStaticFields=MutableStaticFields|true
-detectorNaming=Naming|true
-detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
-detectorNumberConstructor=NumberConstructor|true
-detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
-detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
-detectorPublicSemaphores=PublicSemaphores|false
-detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
-detectorReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass=ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass|true
-detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
-detectorRedundantInterfaces=RedundantInterfaces|true
-detectorRepeatedConditionals=RepeatedConditionals|true
-detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
-detectorSerializableIdiom=SerializableIdiom|true
-detectorStartInConstructor=StartInConstructor|true
-detectorStaticCalendarDetector=StaticCalendarDetector|true
-detectorStringConcatenation=StringConcatenation|true
-detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
-detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
-detectorSwitchFallthrough=SwitchFallthrough|true
-detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
-detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
-detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
-detectorURLProblems=URLProblems|true
-detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
-detectorUnnecessaryMath=UnnecessaryMath|true
-detectorUnreadFields=UnreadFields|true
-detectorUselessSubclassMethod=UselessSubclassMethod|false
-detectorVarArgsProblems=VarArgsProblems|true
-detectorVolatileUsage=VolatileUsage|true
-detectorWaitInLoop=WaitInLoop|true
-detectorWrongMapIterator=WrongMapIterator|true
-detectorXMLFactoryBypass=XMLFactoryBypass|true
-detector_threshold=2
-effort=default
-excludefilter0=.settings/findbugs-exclude.xml|true
-filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false|20
-filter_settings_neg=NOISE,I18N|
-run_at_full_build=true
diff --git a/jill-api/.settings/org.eclipse.core.resources.prefs b/jill-api/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/jill-api/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/jill-api/.settings/org.eclipse.jdt.apt.core.prefs b/jill-api/.settings/org.eclipse.jdt.apt.core.prefs
deleted file mode 100644
index 7d52ece..0000000
--- a/jill-api/.settings/org.eclipse.jdt.apt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.apt.aptEnabled=true
-org.eclipse.jdt.apt.genSrcDir=.apt_generated
-org.eclipse.jdt.apt.reconcileEnabled=true
diff --git a/jill-api/.settings/org.eclipse.jdt.core.prefs b/jill-api/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 41027ae..0000000
--- a/jill-api/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,426 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=error
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=1040
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter.count_dependent=1040|-1|1040
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression.count_dependent=16|4|80
-org.eclipse.jdt.core.formatter.alignment_for_assignment=16
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments=16
-org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants.count_dependent=16|5|48
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_field_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_for_statement=16
-org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments=16
-org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_local_variable_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_new_anonymous_class=20
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration.count_dependent=16|4|49
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=0
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=0
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=2
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.comment_new_line_at_start_of_html_paragraph=true
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.force_if_else_statement_brace=true
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comment_prefix=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=3
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=2
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_comment_inline_tags=false
-org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation=true
-org.eclipse.jdt.core.formatter.wrap_non_simple_member_annotation=true
-org.eclipse.jdt.core.formatter.wrap_non_simple_package_annotation=true
-org.eclipse.jdt.core.formatter.wrap_non_simple_parameter_annotation=false
-org.eclipse.jdt.core.formatter.wrap_non_simple_type_annotation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.formatter.wrap_prefer_two_fragments=false
diff --git a/jill-api/.settings/org.eclipse.jdt.ui.prefs b/jill-api/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index d44207b..0000000
--- a/jill-api/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,63 +0,0 @@
-cleanup_settings_version=2
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_Jack Format 100
-formatter_settings_version=13
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=com.google;android;antenna;antlr;ar;asposewobfuscated;asquare;atg;au;beaver;bibtex;bmsi;bsh;ccl;cern;ChartDirector;checkers;com;COM;common;contribs;corejava;cryptix;cybervillains;dalvik;danbikel;de;EDU;eg;eu;examples;fat;fit;fitlibrary;fmpp;freemarker;gnu;groovy;groovyjarjarantlr;groovyjarjarasm;hak;hep;ie;imageinfo;info;it;jal;Jama;japa;japacheckers;jas;jasmin;javancss;javanet;javassist;javazoom;java_cup;jcifs;jetty;JFlex;jj2000;jline;jp;JSci;jsr166y;junit;jxl;jxxload_help;kawa;kea;libcore;libsvm;lti;memetic;mt;mx4j;net;netscape;nl;nu;oauth;ognl;opennlp;oracle;org;penn2dg;pennconverter;pl;prefuse;proguard;repackage;scm;se;serp;simple;soot;sqlj;src;ssa;sun;sunlabs;tcl;testdata;testshell;testsuite;twitter4j;uk;ViolinStrings;weka;wet;winstone;woolfel;wowza;;java;javax;
-org.eclipse.jdt.ui.javadoc=true
-org.eclipse.jdt.ui.ondemandthreshold=999
-org.eclipse.jdt.ui.staticondemandthreshold=999
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\n * Copyright (C) ${year} The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http\://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment"/><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=false
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=false
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=true
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=false
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=false
-sp_cleanup.remove_unused_private_types=false
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/jill-api/.settings/org.eclipse.ltk.core.refactoring.prefs b/jill-api/.settings/org.eclipse.ltk.core.refactoring.prefs
deleted file mode 100644
index b196c64..0000000
--- a/jill-api/.settings/org.eclipse.ltk.core.refactoring.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/jill-api/Android.mk b/jill-api/Android.mk
deleted file mode 100644
index ffc9596..0000000
--- a/jill-api/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := jill-api
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
-LOCAL_JAVA_LIBRARIES := \
-  jsr305lib-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/jill-api/MODULE_LICENSE_APACHE2 b/jill-api/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/jill-api/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/jill-api/NOTICE b/jill-api/NOTICE
deleted file mode 100644
index 2bb9ad2..0000000
--- a/jill-api/NOTICE
+++ /dev/null
@@ -1,176 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/jill-api/jackstyle.xml b/jill-api/jackstyle.xml
deleted file mode 100644
index 3940973..0000000
--- a/jill-api/jackstyle.xml
+++ /dev/null
@@ -1,314 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
-
-<!-- This is a checkstyle configuration file. For descriptions of
-what the following rules do, please see the checkstyle configuration
-page at http://checkstyle.sourceforge.net/config.html -->
-
-<!-- Checks with numbered comments refer to recommendations made
-by Joshua Bloch in his book Effective Java -->
-
-<module name="Checker">
-  <property name="charset" value="UTF-8"/>
-  <module name="FileTabCharacter">
-    <!-- Checks that there are no tab characters in the file.
-    -->
-  </module>
-
-  <module name="RegexpSingleline">
-    <!-- Checks that FIXME is not used in comments.  TODO is preferred.
-    -->
-    <property name="format" value="((//.*)|(\*.*))FIXME" />
-    <property name="message" value='TODO is preferred to FIXME.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
-  </module>
-
-  <module name="RegexpSingleline">
-    <!-- Checks that TODOs are properly formatted.
-
-         The (?&lt;!TODO\(.{0,100}) makes the regex ignore any secondary TODO's on the line
-         so that things like //TODO(bob): remove this TODO on 1/1/2020 don't trigger a warning
-         because of the second TODO.  (The {0,100} is because java doesn't recoginize arbitrary
-         length look backs, but we know each java line should be < 100 chars.)
-    -->
-    <property name="format" value="((//.*)|(\*.*))(?&lt;!TODO\(.{0,100})(TODO[^(])|(TODO\([^)]*$)" />
-    <property name="message" value='All TODOs should be named.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
-  </module>
-
-
-  <!-- All Java AST specific tests live under TreeWalker module. -->
-  <module name="TreeWalker">
-
-    <!--
-
-    IMPORT CHECKS
-
-    -->
-
-    <module name="RedundantImport">
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="AvoidStarImport">
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="UnusedImports">
-      <!-- DPL is a notable violator of this rule. -->
-      <property name="severity" value="error"/>
-      <!-- Imports used only in Javadoc are tolerated. -->
-      <property name="processJavadoc" value="true"/>
-      <message
-          key="import.unused"
-          value="Unused import: {0}." />
-    </module>
-
-    <module name="ImportOrder">
-      <!-- Checks for out of order import statements. -->
-      <property name="severity" value="warning"/>
-      <property name="groups" value="com.google,*,java,javax"/>
-      <!-- This ensures that static imports go first. -->
-      <property name="option" value="top"/>
-      <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
-    </module>
-
-    <!--
-
-    JAVADOC CHECKS
-
-    -->
-
-    <module name="JavadocType">
-      <!-- Item 28 - Write doc comments for all exposed API elements. -->
-      <!-- Ensure all classes with visability greater than or equal to
-        protected have class level documentation. -->
-      <property name="scope" value="protected"/>
-      <property name="severity" value="error"/>
-      <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. -->
-      <property name="allowUnknownTags" value="true"/>
-      <property name="allowMissingParamTags" value="true"/>
-      <message key="javadoc.missing"
-               value="Missing a Javadoc comment."/>
-    </module>
-
-    <!--
-
-    NAMING CHECKS
-
-    -->
-
-    <!-- Item 38 - Adhere to generally accepted naming conventions -->
-
-    <module name="PackageName">
-      <!-- Validates identifiers for package names against the
-        supplied expression. -->
-      <!-- Here the default checkstyle rule restricts package name parts to
-        seven characters, this is not in line with common practice at Google.
-      -->
-      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="TypeNameCheck">
-      <metadata name="altname" value="TypeName"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="StaticVariableNameCheck">
-      <!-- Validates static, non-final fields against the supplied
-      expression "^[a-z][a-zA-Z0-9]*?$". -->
-      <metadata name="altname" value="StaticVariableName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*?$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="MemberNameCheck">
-      <!-- Validates non-static members against the supplied expression. -->
-      <metadata name="altname" value="MemberName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*?$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="MethodNameCheck">
-      <!-- Validates identifiers for method names. -->
-      <metadata name="altname" value="MethodName"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*([a-zA-Z0-9]+)*$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="ParameterName">
-      <!-- Validates identifiers for method parameters against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="LocalFinalVariableName">
-      <!-- Validates identifiers for local final variables against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="LocalVariableName">
-      <!-- Validates identifiers for local variables against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-
-    <!--
-
-    LENGTH and CODING CHECKS
-
-    -->
-
-    <module name="LineLength">
-      <!-- Checks if a line is too long. -->
-      <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/>
-      <property name="severity" value="error"/>
-
-      <!--
-        The default ignore pattern exempts the following elements:
-          - import statements
-          - long URLs inside comments
-      -->
-
-      <property name="ignorePattern"
-          value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
-          default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)|(\s*@[\w\.\$]+::\w+(?:\([^\(]*\)|\(\)\(\))?[,;]?)|(\s+\* \{@(link|see) [^\s][^\}]*\}[\.,;]?)$"/>
-    </module>
-
-    <module name="LeftCurly">
-      <!-- Checks for placement of the left curly brace ('{'). -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="RightCurly">
-      <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
-      the same line. e.g., the following example is fine:
-      <pre>
-        if {
-          ...
-        } else
-      </pre>
-      -->
-      <!-- This next example is not fine:
-      <pre>
-        if {
-          ...
-        }
-        else
-      </pre>
-      -->
-      <property name="option" value="same"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!-- Checks for braces around if and else blocks -->
-    <module name="NeedBraces">
-      <property name="severity" value="warning"/>
-      <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
-    </module>
-
-    <module name="UpperEll">
-      <!-- Checks that long constants are defined with an upper ell.-->
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="FallThrough">
-      <!-- Warn about falling through to the next case statement.  Similar to
-      javac -Xlint:fallthrough, but the check is suppressed if there is a single-line comment
-      on the last non-blank line preceding the fallen-into case.
-      -->
-      <property name="reliefPattern"
-       value=".*"/>
-      <property name="severity" value="error"/>
-    </module>
-
-
-    <!--
-
-    MODIFIERS CHECKS
-
-    -->
-
-    <module name="ModifierOrder">
-      <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
-           8.4.3.  The prescribed order is:
-           public, protected, private, abstract, static, final, transient, volatile,
-           synchronized, native, strictfp
-        -->
-    </module>
-
-
-    <!--
-
-    WHITESPACE CHECKS
-
-    -->
-
-    <module name="WhitespaceAround">
-      <!-- Checks that various tokens are surrounded by whitespace.
-           This includes most binary operators and keywords followed
-           by regular or curly braces.
-      -->
-      <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
-        BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
-        EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
-        LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
-        LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
-        MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
-        SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="WhitespaceAfter">
-      <!-- Checks that commas, semicolons and typecasts are followed by
-           whitespace.
-      -->
-      <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
-    </module>
-
-    <module name="NoWhitespaceAfter">
-      <!-- Checks that there is no whitespace after various unary operators.
-           Linebreaks are allowed.
-      -->
-      <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
-        UNARY_PLUS"/>
-      <property name="allowLineBreaks" value="true"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="NoWhitespaceBefore">
-      <!-- Checks that there is no whitespace before various unary operators.
-           Linebreaks are allowed.
-      -->
-      <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
-      <property name="allowLineBreaks" value="true"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="ParenPad">
-      <!-- Checks that there is no whitespace before close parens or after
-           open parens.
-      -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!--
-
-    MISC CHECKS
-
-    -->
-
-  </module>
-</module>
-
diff --git a/jill-api/src/com/android/jill/api/ConfigNotSupportedException.java b/jill-api/src/com/android/jill/api/ConfigNotSupportedException.java
deleted file mode 100644
index e4848f5..0000000
--- a/jill-api/src/com/android/jill/api/ConfigNotSupportedException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api;
-
-import javax.annotation.Nonnull;
-
-/**
- * Thrown when the requested Jill configuration for a given API version is not supported.
- */
-public class ConfigNotSupportedException extends Exception {
-  private static final long serialVersionUID = 1L;
-
-  public ConfigNotSupportedException() {
-    super();
-  }
-
-  public ConfigNotSupportedException(@Nonnull String message) {
-    super(message);
-  }
-
-  public ConfigNotSupportedException(@Nonnull String message, @Nonnull Throwable cause) {
-    super(message, cause);
-  }
-
-  public ConfigNotSupportedException(@Nonnull Throwable cause) {
-    super(cause);
-  }
-}
diff --git a/jill-api/src/com/android/jill/api/JillConfig.java b/jill-api/src/com/android/jill/api/JillConfig.java
deleted file mode 100644
index cde0c35..0000000
--- a/jill-api/src/com/android/jill/api/JillConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api;
-
-/**
- * Allows to set a configuration for Jill.
- */
-public interface JillConfig {
-}
diff --git a/jill-api/src/com/android/jill/api/JillProvider.java b/jill-api/src/com/android/jill/api/JillProvider.java
deleted file mode 100644
index 30fd4e3..0000000
--- a/jill-api/src/com/android/jill/api/JillProvider.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api;
-
-import java.util.Collection;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Provides instances of {@link JillConfig}.
- */
-public interface JillProvider {
-  /**
-   * Creates a {@link JillConfig} instance for an interface representing a {@link JillConfig} API
-   * version.
-   * @param cls the {@link JillConfig} API interface
-   * @return the {@link JillConfig} instance
-   * @throws ConfigNotSupportedException If no implementation is found for the given interface.
-   */
-  @Nonnull
-  <T extends JillConfig> T createConfig(@Nonnull Class<T> cls) throws ConfigNotSupportedException;
-
-  /**
-   * Returns whether an interface representing a {@link JillConfig} API version is supported.
-   *
-   * @param cls the {@link JillConfig} API interface
-   * @return <code>true</true> if the config is supported
-   */
-  @Nonnull
-  <T extends JillConfig> boolean isConfigSupported(@Nonnull Class<T> cls);
-
-  /**
-   * Gives a {@link Collection} containing supported {@link JillConfig} API versions.
-   * @return the supported {@link JillConfig} API versions
-   */
-  @Nonnull
-  Collection<Class<? extends JillConfig>> getSupportedConfigs();
-
-  /**
-   * Gives the version of this Jill, summarized in one string (e.g. "1.1-rc1", "2.0-a2",
-   * ...).
-   *
-   * @return the version
-   */
-  @Nonnull
-  String getTranslatorVersion();
-
-  /**
-   * Gives the release name of this Jill (e.g. Arzon, Brest, ...).
-   *
-   * @return the release name
-   */
-  @Nonnull
-  String getTranslatorReleaseName();
-
-  /**
-   * Gives an integer value that represents the release of this Jill, relative to other
-   * releases.
-   *
-   * @return the release code
-   */
-  @Nonnegative
-  int getTranslatorReleaseCode();
-
-  /**
-   * Gives an integer value that represents the sub-release of this Jill, relative to other
-   * sub-releases of the same release.
-   *
-   * @return the sub-release code
-   */
-  @Nonnegative
-  int getTranslatorSubReleaseCode();
-
-  /**
-   * Gives the kind of sub-release of this Jill.
-   *
-   * @return the sub-release kind
-   */
-  @Nonnull
-  SubReleaseKind getTranslatorSubReleaseKind();
-
-  /**
-   * The kind of sub-release.
-   */
-  public enum SubReleaseKind {
-    /**
-     * A sub-release from an engineering development, not tested, not in the code base repository.
-     */
-    ENGINEERING,
-    /**
-     * A sub-release that is not feature complete, not tested.
-     */
-    PRE_ALPHA,
-    /**
-     * A sub-release that is not feature complete, tested.
-     */
-    ALPHA,
-    /**
-     * A sub-release that is feature complete, tested, but likely contains known or unknown bugs.
-     */
-    BETA,
-    /**
-     * A pre-production sub-release, tested.
-     */
-    CANDIDATE,
-    /**
-     * A production and stable sub-release.
-     */
-    RELEASE;
-  }
-
-  /**
-   * The build ID of this Jill.
-   * @return the build ID, or null if not available
-   */
-  @CheckForNull
-  String getTranslatorBuildId();
-
-  /**
-   * Identify the source code base of this Jill.
-   * @return the source code base, or null if not available
-   */
-  @CheckForNull
-  String getTranslatorSourceCodeBase();
-}
diff --git a/jill-api/src/com/android/jill/api/example/WithServiceLoader.java b/jill-api/src/com/android/jill/api/example/WithServiceLoader.java
deleted file mode 100644
index cd720f0..0000000
--- a/jill-api/src/com/android/jill/api/example/WithServiceLoader.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.example;
-
-import com.android.jill.api.ConfigNotSupportedException;
-import com.android.jill.api.JillConfig;
-import com.android.jill.api.JillProvider;
-import com.android.jill.api.v01.Api01Config;
-import com.android.jill.api.v01.Api01TranslationTask;
-import com.android.jill.api.v01.ConfigurationException;
-import com.android.jill.api.v01.TranslationException;
-
-import java.io.File;
-import java.util.NoSuchElementException;
-import java.util.ServiceLoader;
-
-/**
- * Sample of Jill api usage based on a service provider.
- * This sample requires jill.jar on classpath.
- */
-public class WithServiceLoader {
-  public static void main(String[] args) throws SecurityException, IllegalArgumentException {
-    if (args.length != 2) {
-      System.out.println(
-          "Usage: <jill input archive> <jill output archive>");
-      return;
-    }
-
-    ServiceLoader<JillProvider> serviceLoader = ServiceLoader.load(JillProvider.class);
-    JillProvider provider;
-    try {
-      provider = serviceLoader.iterator().next();
-    } catch (NoSuchElementException e) {
-      System.out.println("Check that jill.jar is on classpath");
-      return;
-    }
-
-    System.out.println("Translator version: " + provider.getTranslatorVersion());
-    System.out.println("Translator release name: " + provider.getTranslatorReleaseName());
-    System.out.println("Translator release code: " + provider.getTranslatorReleaseCode());
-    System.out.println("Translator sub-release kind: " + provider.getTranslatorSubReleaseKind());
-    System.out.println("Translator sub-release code: " + provider.getTranslatorSubReleaseCode());
-    String str;
-    str = provider.getTranslatorBuildId();
-    System.out.println("Translator build id: " + ((str != null) ? str : "Unknown"));
-    str = provider.getTranslatorSourceCodeBase();
-    System.out.println("Translator souce code base: " + ((str != null) ? str : "Unknown"));
-    System.out.print("Supported configurations: ");
-
-    for (Class<? extends JillConfig> config : provider.getSupportedConfigs()) {
-      System.out.print(config.getSimpleName());
-      assert provider.isConfigSupported(config);
-    }
-    System.out.println();
-
-    Api01TranslationTask translationTask;
-    Api01Config config;
-
-    // Get configuration object
-    try {
-      config = provider.createConfig(Api01Config.class);
-    } catch (ConfigNotSupportedException e1) {
-      System.err.println("Brest config not supported)");
-      return;
-    }
-
-    // Configure
-    try {
-      config.setInputJavaBinaryFile(new File(args[0]));
-
-      config.setOutputJackFile(new File(args[1]));
-
-      // Check and build
-      translationTask = config.getTask();
-
-    } catch (ConfigurationException e) {
-      System.err.println(e.getMessage());
-      return;
-    }
-
-    // Run the translation
-    try {
-      translationTask.run();
-    } catch (TranslationException e) {
-      System.out.println("User error, see reporter");
-      return;
-    }
-  }
-}
diff --git a/jill-api/src/com/android/jill/api/v01/Api01Config.java b/jill-api/src/com/android/jill/api/v01/Api01Config.java
deleted file mode 100644
index ea1e55b..0000000
--- a/jill-api/src/com/android/jill/api/v01/Api01Config.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01;
-
-
-import com.android.jill.api.JillConfig;
-
-import java.io.File;
-
-import javax.annotation.Nonnull;
-
-/**
-* A configuration for API level 01 of Jill.
-*/
-public interface Api01Config extends JillConfig {
-
-  /**
-   * Sets verbosity mode.
-   * @param isVerbose the desired verbosity mode
-   */
-  void setVerbose(boolean isVerbose) throws ConfigurationException;
-
-  /**
-   * Sets jar file to apply the Jill translation onto. The file must exist.
-   * @param input jar file to translate
-   */
-  void setInputJavaBinaryFile(@Nonnull File input) throws ConfigurationException;
-
-  /**
-   * Sets the file where the output Jack library will be written. The file may already exist and
-   * will be overwritten.
-   * @param outputJackFile The output Jack library file
-   * @throws ConfigurationException
-   */
-  void setOutputJackFile(@Nonnull File outputJackFile) throws ConfigurationException;
-
-
-  /**
-   * Sets whether debug info should be emitted.
-   * @param debugInfo the desired mode for debug info emission
-   */
-  void setDebugInfo(boolean debugInfo) throws ConfigurationException;
-
-  /**
-   * Creates an instance of the {@link Api01TranslationTask} according to this configuration.
-   * @return The {@link Api01TranslationTask}
-   */
-  @Nonnull
-  Api01TranslationTask getTask() throws ConfigurationException;
-}
diff --git a/jill-api/src/com/android/jill/api/v01/Api01TranslationTask.java b/jill-api/src/com/android/jill/api/v01/Api01TranslationTask.java
deleted file mode 100644
index 25f70bf..0000000
--- a/jill-api/src/com/android/jill/api/v01/Api01TranslationTask.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01;
-
-
-/**
- * A task allowing to run Jill once.
- */
-public interface Api01TranslationTask {
-
-  /**
-   * Runs the translation task. May be called only once.
-   * @throws TranslationException If a fatal error occurred during the translation
-   * @throws IllegalStateException If the translation task is run more than once
-   */
-  void run() throws TranslationException, IllegalStateException;
-}
diff --git a/jill-api/src/com/android/jill/api/v01/Cli01Config.java b/jill-api/src/com/android/jill/api/v01/Cli01Config.java
deleted file mode 100644
index 2396f43..0000000
--- a/jill-api/src/com/android/jill/api/v01/Cli01Config.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01;
-
-import com.android.jill.api.JillConfig;
-
-import java.io.File;
-import java.io.PrintStream;
-
-import javax.annotation.Nonnull;
-
-/**
-* A configuration for CLI level 01 of Jill.
-*/
-public interface Cli01Config extends JillConfig {
-
-  /**
-   * Creates an instance of the {@link Cli01TranslationTask} according to this configuration.
-   * @param args To be handled as command line arguments.
-   * @return The {@link Cli01TranslationTask}
-   * @throws ConfigurationException
-   */
-  @Nonnull
-  Cli01TranslationTask getTask(@Nonnull String[] args) throws ConfigurationException;
-
-  /**
-   * Redirect Jill's error output to the given stream.
-   * @param standardError The stream where to write errors.
-   */
-  void setStandardError(@Nonnull PrintStream standardError);
-
-  /**
-   * Redirect Jill's standards output to the given stream.
-   * @param standardOutput The stream where to write non error messages.
-   */
-  void setStandardOutput(@Nonnull PrintStream standardOutput);
-
-  /**
-   * Defines Jill's working directory.
-   * @param workingDirectory The base directory that will be used to evaluate non absolute file
-   * paths.
-   */
-  void setWorkingDirectory(@Nonnull File workingDirectory);
-}
-
diff --git a/jill-api/src/com/android/jill/api/v01/Cli01TranslationTask.java b/jill-api/src/com/android/jill/api/v01/Cli01TranslationTask.java
deleted file mode 100644
index 61734b9..0000000
--- a/jill-api/src/com/android/jill/api/v01/Cli01TranslationTask.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01;
-
-/**
- * A task allowing to run Jill once.
- */
-public interface Cli01TranslationTask {
-
-  /**
-   * Runs the Jill compiler. May be called only once.
-   * @return command line status
-   * @throws TranslationException If a fatal error occurred during the translation
-   * @throws IllegalStateException If the translation task is run more than once
-   */
-  int run() throws TranslationException, IllegalStateException;
-}
-
diff --git a/jill-api/src/com/android/jill/api/v01/ConfigurationException.java b/jill-api/src/com/android/jill/api/v01/ConfigurationException.java
deleted file mode 100644
index 76f0d87..0000000
--- a/jill-api/src/com/android/jill/api/v01/ConfigurationException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01;
-
-import javax.annotation.Nonnull;
-
-/**
- * Thrown when something is wrong in Jill configuration.
- */
-public class ConfigurationException extends Exception {
-  private static final long serialVersionUID = 1L;
-
-  public ConfigurationException(@Nonnull String message) {
-    super(message);
-  }
-
-  public ConfigurationException(@Nonnull String message, @Nonnull Throwable cause) {
-    super(message, cause);
-  }
-
-  public ConfigurationException(@Nonnull Throwable cause) {
-    super(cause);
-  }
-}
diff --git a/jill-api/src/com/android/jill/api/v01/TranslationException.java b/jill-api/src/com/android/jill/api/v01/TranslationException.java
deleted file mode 100644
index 41121b3..0000000
--- a/jill-api/src/com/android/jill/api/v01/TranslationException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01;
-
-import javax.annotation.Nonnull;
-
-/**
- * A fatal problem that caused Jill to abort the translation. The problem should already have
- * reported, so it is safe to ignore its message.
- */
-public class TranslationException extends Exception {
-  private static final long serialVersionUID = 1L;
-
-  public TranslationException() {
-    super();
-  }
-
-  public TranslationException(@Nonnull String message) {
-    super(message);
-  }
-
-  public TranslationException(@Nonnull String message, @Nonnull Throwable cause) {
-    super(message, cause);
-  }
-
-  public TranslationException(@Nonnull Throwable cause) {
-    super(cause);
-  }
-}
diff --git a/jill/.checkstyle b/jill/.checkstyle
deleted file mode 100644
index 5c5a2d1..0000000
--- a/jill/.checkstyle
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<fileset-config file-format-version="1.2.0" simple-config="false" sync-formatter="false">
-  <local-check-config name="Jill Checkstyle" location="jillstyle.xml" type="project" description="">
-    <additional-data name="protect-config-file" value="true"/>
-  </local-check-config>
-  <fileset name="Java Source Files" enabled="true" check-config-name="Jill Checkstyle" local="true">
-    <file-match-pattern match-pattern="^src.*\.java$" include-pattern="true"/>
-  </fileset>
-</fileset-config>
diff --git a/jill/.classpath b/jill/.classpath
deleted file mode 100644
index abd8305..0000000
--- a/jill/.classpath
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="tests"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/Jack"/>
-	<classpathentry kind="lib" path="libs/args4j-lib.jar"/>
-	<classpathentry kind="lib" path="libs/asm4-lib.jar"/>
-	<classpathentry kind="lib" path="libs/dexcomparator-lib.jar"/>
-	<classpathentry kind="lib" path="libs/guava-lib.jar"/>
-	<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/Dx"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/jack-tests"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/jill-api"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/Scheduler"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jill/.project b/jill/.project
deleted file mode 100644
index 9817aca..0000000
--- a/jill/.project
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>jill</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
-		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
-	</natures>
-</projectDescription>
diff --git a/jill/.settings/edu.umd.cs.findbugs.core.prefs b/jill/.settings/edu.umd.cs.findbugs.core.prefs
deleted file mode 100644
index c36d3e5..0000000
--- a/jill/.settings/edu.umd.cs.findbugs.core.prefs
+++ /dev/null
@@ -1,133 +0,0 @@
-#FindBugs User Preferences
-#Wed Jul 16 10:48:53 CEST 2014
-cloud_id=edu.umd.cs.findbugs.cloud.doNothingCloud
-detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
-detectorAtomicityProblem=AtomicityProblem|true
-detectorBadAppletConstructor=BadAppletConstructor|false
-detectorBadResultSetAccess=BadResultSetAccess|true
-detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
-detectorBadUseOfReturnValue=BadUseOfReturnValue|true
-detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
-detectorBooleanReturnNull=BooleanReturnNull|true
-detectorCallToUnsupportedMethod=CallToUnsupportedMethod|false
-detectorCheckExpectedWarnings=CheckExpectedWarnings|false
-detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
-detectorCheckRelaxingNullnessAnnotation=CheckRelaxingNullnessAnnotation|true
-detectorCheckTypeQualifiers=CheckTypeQualifiers|true
-detectorCloneIdiom=CloneIdiom|true
-detectorComparatorIdiom=ComparatorIdiom|true
-detectorConfusedInheritance=ConfusedInheritance|true
-detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
-detectorCrossSiteScripting=CrossSiteScripting|true
-detectorDefaultEncodingDetector=DefaultEncodingDetector|true
-detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
-detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
-detectorDontIgnoreResultOfPutIfAbsent=DontIgnoreResultOfPutIfAbsent|true
-detectorDontUseEnum=DontUseEnum|true
-detectorDroppedException=DroppedException|true
-detectorDumbMethodInvocations=DumbMethodInvocations|true
-detectorDumbMethods=DumbMethods|true
-detectorDuplicateBranches=DuplicateBranches|true
-detectorEmptyZipFileEntry=EmptyZipFileEntry|true
-detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
-detectorExplicitSerialization=ExplicitSerialization|true
-detectorFinalizerNullsFields=FinalizerNullsFields|true
-detectorFindBadCast2=FindBadCast2|true
-detectorFindBadForLoop=FindBadForLoop|true
-detectorFindCircularDependencies=FindCircularDependencies|false
-detectorFindDeadLocalStores=FindDeadLocalStores|true
-detectorFindDoubleCheck=FindDoubleCheck|true
-detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
-detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
-detectorFindFinalizeInvocations=FindFinalizeInvocations|true
-detectorFindFloatEquality=FindFloatEquality|true
-detectorFindHEmismatch=FindHEmismatch|true
-detectorFindInconsistentSync2=FindInconsistentSync2|true
-detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
-detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
-detectorFindMaskedFields=FindMaskedFields|true
-detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
-detectorFindNakedNotify=FindNakedNotify|true
-detectorFindNonShortCircuit=FindNonShortCircuit|true
-detectorFindNullDeref=FindNullDeref|true
-detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true
-detectorFindOpenStream=FindOpenStream|true
-detectorFindPuzzlers=FindPuzzlers|true
-detectorFindRefComparison=FindRefComparison|true
-detectorFindReturnRef=FindReturnRef|true
-detectorFindRunInvocations=FindRunInvocations|true
-detectorFindSelfComparison=FindSelfComparison|true
-detectorFindSelfComparison2=FindSelfComparison2|true
-detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
-detectorFindSpinLoop=FindSpinLoop|true
-detectorFindSqlInjection=FindSqlInjection|true
-detectorFindTwoLockWait=FindTwoLockWait|true
-detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
-detectorFindUnconditionalWait=FindUnconditionalWait|true
-detectorFindUninitializedGet=FindUninitializedGet|true
-detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
-detectorFindUnreleasedLock=FindUnreleasedLock|true
-detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
-detectorFindUnsyncGet=FindUnsyncGet|true
-detectorFindUseOfNonSerializableValue=FindUseOfNonSerializableValue|true
-detectorFindUselessControlFlow=FindUselessControlFlow|true
-detectorFormatStringChecker=FormatStringChecker|true
-detectorHugeSharedStringConstants=HugeSharedStringConstants|true
-detectorIDivResultCastToDouble=IDivResultCastToDouble|true
-detectorIncompatMask=IncompatMask|true
-detectorInconsistentAnnotations=InconsistentAnnotations|true
-detectorInefficientMemberAccess=InefficientMemberAccess|false
-detectorInefficientToArray=InefficientToArray|true
-detectorInfiniteLoop=InfiniteLoop|true
-detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
-detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
-detectorInitializationChain=InitializationChain|true
-detectorInitializeNonnullFieldsInConstructor=InitializeNonnullFieldsInConstructor|true
-detectorInstantiateStaticClass=InstantiateStaticClass|true
-detectorIntCast2LongAsInstant=IntCast2LongAsInstant|true
-detectorInvalidJUnitTest=InvalidJUnitTest|true
-detectorIteratorIdioms=IteratorIdioms|true
-detectorLazyInit=LazyInit|true
-detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
-detectorLostLoggerDueToWeakReference=LostLoggerDueToWeakReference|true
-detectorMethodReturnCheck=MethodReturnCheck|true
-detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
-detectorMutableLock=MutableLock|true
-detectorMutableStaticFields=MutableStaticFields|true
-detectorNaming=Naming|true
-detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
-detectorNumberConstructor=NumberConstructor|true
-detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
-detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
-detectorPublicSemaphores=PublicSemaphores|false
-detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
-detectorReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass=ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass|true
-detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
-detectorRedundantInterfaces=RedundantInterfaces|true
-detectorRepeatedConditionals=RepeatedConditionals|true
-detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
-detectorSerializableIdiom=SerializableIdiom|true
-detectorStartInConstructor=StartInConstructor|true
-detectorStaticCalendarDetector=StaticCalendarDetector|true
-detectorStringConcatenation=StringConcatenation|true
-detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
-detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
-detectorSwitchFallthrough=SwitchFallthrough|true
-detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
-detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
-detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
-detectorURLProblems=URLProblems|true
-detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
-detectorUnnecessaryMath=UnnecessaryMath|true
-detectorUnreadFields=UnreadFields|true
-detectorUselessSubclassMethod=UselessSubclassMethod|false
-detectorVarArgsProblems=VarArgsProblems|true
-detectorVolatileUsage=VolatileUsage|true
-detectorWaitInLoop=WaitInLoop|true
-detectorWrongMapIterator=WrongMapIterator|true
-detectorXMLFactoryBypass=XMLFactoryBypass|true
-detector_threshold=2
-effort=default
-filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false|20
-filter_settings_neg=NOISE,I18N|
-run_at_full_build=true
diff --git a/jill/.settings/org.eclipse.core.resources.prefs b/jill/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/jill/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/jill/.settings/org.eclipse.jdt.core.prefs b/jill/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 159ed4a..0000000
--- a/jill/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,425 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=error
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=1040
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter.count_dependent=1040|-1|1040
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=1585
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type.count_dependent=1585|-1|1585
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression.count_dependent=16|4|80
-org.eclipse.jdt.core.formatter.alignment_for_assignment=16
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments=16
-org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants.count_dependent=16|5|48
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_field_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_for_statement=16
-org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments=16
-org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_local_variable_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields.count_dependent=16|-1|16
-org.eclipse.jdt.core.formatter.alignment_for_new_anonymous_class=20
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration.count_dependent=16|5|80
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration.count_dependent=16|4|49
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration.count_dependent=16|4|48
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=0
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=0
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=2
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.comment_new_line_at_start_of_html_paragraph=true
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.force_if_else_statement_brace=true
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comment_prefix=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=3
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=2
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_comment_inline_tags=false
-org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation=true
-org.eclipse.jdt.core.formatter.wrap_non_simple_member_annotation=true
-org.eclipse.jdt.core.formatter.wrap_non_simple_package_annotation=true
-org.eclipse.jdt.core.formatter.wrap_non_simple_parameter_annotation=false
-org.eclipse.jdt.core.formatter.wrap_non_simple_type_annotation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.formatter.wrap_prefer_two_fragments=false
diff --git a/jill/.settings/org.eclipse.jdt.ui.prefs b/jill/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index d44207b..0000000
--- a/jill/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,63 +0,0 @@
-cleanup_settings_version=2
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_Jack Format 100
-formatter_settings_version=13
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=com.google;android;antenna;antlr;ar;asposewobfuscated;asquare;atg;au;beaver;bibtex;bmsi;bsh;ccl;cern;ChartDirector;checkers;com;COM;common;contribs;corejava;cryptix;cybervillains;dalvik;danbikel;de;EDU;eg;eu;examples;fat;fit;fitlibrary;fmpp;freemarker;gnu;groovy;groovyjarjarantlr;groovyjarjarasm;hak;hep;ie;imageinfo;info;it;jal;Jama;japa;japacheckers;jas;jasmin;javancss;javanet;javassist;javazoom;java_cup;jcifs;jetty;JFlex;jj2000;jline;jp;JSci;jsr166y;junit;jxl;jxxload_help;kawa;kea;libcore;libsvm;lti;memetic;mt;mx4j;net;netscape;nl;nu;oauth;ognl;opennlp;oracle;org;penn2dg;pennconverter;pl;prefuse;proguard;repackage;scm;se;serp;simple;soot;sqlj;src;ssa;sun;sunlabs;tcl;testdata;testshell;testsuite;twitter4j;uk;ViolinStrings;weka;wet;winstone;woolfel;wowza;;java;javax;
-org.eclipse.jdt.ui.javadoc=true
-org.eclipse.jdt.ui.ondemandthreshold=999
-org.eclipse.jdt.ui.staticondemandthreshold=999
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\n * Copyright (C) ${year} The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http\://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment"/><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=false
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=false
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=true
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=false
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=false
-sp_cleanup.remove_unused_private_types=false
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/jill/.settings/org.eclipse.ltk.core.refactoring.prefs b/jill/.settings/org.eclipse.ltk.core.refactoring.prefs
deleted file mode 100644
index b196c64..0000000
--- a/jill/.settings/org.eclipse.ltk.core.refactoring.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/jill/Android.mk b/jill/Android.mk
deleted file mode 100644
index 9648796..0000000
--- a/jill/Android.mk
+++ /dev/null
@@ -1,131 +0,0 @@
-# Copyright (C) 2013 The Android Open Source Project
-#
-# Licensed 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := jill
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := EXECUTABLES
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_JAVA_RESOURCE_DIRS  := rsc
-LOCAL_JAR_MANIFEST := etc/manifest.txt
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-  jill-api \
-  asm-all-4.1-jack \
-  guava-jack \
-  jsr305lib-jack \
-  args4j-jack \
-  schedlib
-
-JILL_VERSION_FILE := $(call local-intermediates-dir,COMMON)/generated.version/jill-version.properties
-LOCAL_JAVA_RESOURCE_FILES += $(JILL_VERSION_FILE)
-LOCAL_ADDITIONAL_DEPENDENCIES += $(JILL_VERSION_FILE)
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-$(JILL_VERSION_FILE): $(TOP_DIR)$(LOCAL_PATH)/../version.properties | $(ACP)
-	$(copy-file-to-target)
-
-# Include this library in the build server's output directory
-$(call dist-for-goals, dist_files, $(LOCAL_BUILT_MODULE):jill.jar)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := jill-jarjar-asm
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := EXECUTABLES
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_JAVA_RESOURCE_DIRS  := rsc
-LOCAL_JAR_MANIFEST := etc/manifest.txt
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-  jill-api \
-  asm-all-4.1-jack \
-  guava-jack \
-  jsr305lib-jack \
-  args4j-jack \
-  schedlib
-
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_JAVA_RESOURCE_FILES += $(JILL_VERSION_FILE)
-LOCAL_ADDITIONAL_DEPENDENCIES += $(JILL_VERSION_FILE)
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# Build Jill tests
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, tests)
-
-LOCAL_MODULE := libjillunittests
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_JAVACFLAGS := -processor com.android.sched.build.SchedAnnotationProcessor
-
-LOCAL_STATIC_JAVA_LIBRARIES := jill jill-api
-
-LOCAL_JAVA_LIBRARIES := \
-  libjackunittests \
-  sched-build \
-  schedlib
-
-LOCAL_REQUIRED_MODULES:= \
-  core \
-  bouncycastle \
-  ext \
-  core-junit \
-  framework \
-  telephony-common \
-  android.policy
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# Test targets
-#
-
-LIB_JILL_UNIT_TESTS := $(LOCAL_BUILT_MODULE)
-
-local_unit_libs := $(call java-lib-files,core-libart-hostdex junit4-hostdex-jack,true)
-
-.PHONY: test-jill
-test-jill-unit: PRIVATE_RUN_TESTS := ./run-jill-unit-tests
-test-jill-unit: PRIVATE_PATH := $(LOCAL_PATH)
-test-jill-unit: $(LIB_JILL_UNIT_TESTS) $(LOCAL_PATH)/run-jill-unit-tests $(local_unit_libs) $(JACK_JAR) $(JILL_JAR)
-	$(hide) cd $(PRIVATE_PATH) && $(PRIVATE_RUN_TESTS) com.android.jill.PreSubmitTests
-
-local_long_libs := $(call java-lib-files,core bouncycastle core-junit ext framework guava services \
-  libarity google-play-services-first-party telephony-common,)
-.PHONY: test-jill-long
-test-jill-long: PRIVATE_RUN_TESTS := ./run-jill-unit-tests
-test-jill-long: PRIVATE_PATH := $(LOCAL_PATH)
-test-jill-long: $(LIB_JILL_UNIT_TESTS) $(LOCAL_PATH)/run-jill-unit-tests $(local_long_libs) $(JACK_JAR) $(JILL_JAR)
-	$(hide) cd $(PRIVATE_PATH) && $(PRIVATE_RUN_TESTS) com.android.jill.LongLastingTests
-
-.PHONY: test-jill-unit-all
-test-jill-unit-all: PRIVATE_RUN_TESTS := ./run-jill-unit-tests
-test-jill-unit-all: PRIVATE_PATH := $(LOCAL_PATH)
-test-jill-unit-all: $(LIB_JILL_UNIT_TESTS) $(LOCAL_PATH)/run-jill-unit-tests $(local_unit_libs) $(local_long_libs) $(JACK_JAR) $(JILL_JAR)
-	$(hide) cd $(PRIVATE_PATH) && $(PRIVATE_RUN_TESTS) com.android.jill.AllTests
-
diff --git a/jill/MODULE_LICENSE_APACHE2 b/jill/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/jill/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/jill/NOTICE b/jill/NOTICE
deleted file mode 100644
index 2bb9ad2..0000000
--- a/jill/NOTICE
+++ /dev/null
@@ -1,176 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/jill/README.eclipse b/jill/README.eclipse
deleted file mode 100644
index 0d5bd71..0000000
--- a/jill/README.eclipse
+++ /dev/null
@@ -1,5 +0,0 @@
-To import the eclipse project you have to define one "Classpath variable" in
-your workspace:
-Window->Preferences->Java->Build Path->Classpath Variables
-Create a variable named "ANDROID_BUILD_TOP" pointing to your android source
-folder.
diff --git a/jill/etc/manifest.txt b/jill/etc/manifest.txt
deleted file mode 100644
index 6ca9f54..0000000
--- a/jill/etc/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Main-Class: com.android.jill.Main
diff --git a/jill/jarjar-rules.txt b/jill/jarjar-rules.txt
deleted file mode 100644
index ee6f403..0000000
--- a/jill/jarjar-rules.txt
+++ /dev/null
@@ -1 +0,0 @@
-rule org.objectweb.** com.android.jill.@0
\ No newline at end of file
diff --git a/jill/jillstyle.xml b/jill/jillstyle.xml
deleted file mode 100644
index 3940973..0000000
--- a/jill/jillstyle.xml
+++ /dev/null
@@ -1,314 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
-
-<!-- This is a checkstyle configuration file. For descriptions of
-what the following rules do, please see the checkstyle configuration
-page at http://checkstyle.sourceforge.net/config.html -->
-
-<!-- Checks with numbered comments refer to recommendations made
-by Joshua Bloch in his book Effective Java -->
-
-<module name="Checker">
-  <property name="charset" value="UTF-8"/>
-  <module name="FileTabCharacter">
-    <!-- Checks that there are no tab characters in the file.
-    -->
-  </module>
-
-  <module name="RegexpSingleline">
-    <!-- Checks that FIXME is not used in comments.  TODO is preferred.
-    -->
-    <property name="format" value="((//.*)|(\*.*))FIXME" />
-    <property name="message" value='TODO is preferred to FIXME.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
-  </module>
-
-  <module name="RegexpSingleline">
-    <!-- Checks that TODOs are properly formatted.
-
-         The (?&lt;!TODO\(.{0,100}) makes the regex ignore any secondary TODO's on the line
-         so that things like //TODO(bob): remove this TODO on 1/1/2020 don't trigger a warning
-         because of the second TODO.  (The {0,100} is because java doesn't recoginize arbitrary
-         length look backs, but we know each java line should be < 100 chars.)
-    -->
-    <property name="format" value="((//.*)|(\*.*))(?&lt;!TODO\(.{0,100})(TODO[^(])|(TODO\([^)]*$)" />
-    <property name="message" value='All TODOs should be named.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
-  </module>
-
-
-  <!-- All Java AST specific tests live under TreeWalker module. -->
-  <module name="TreeWalker">
-
-    <!--
-
-    IMPORT CHECKS
-
-    -->
-
-    <module name="RedundantImport">
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="AvoidStarImport">
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="UnusedImports">
-      <!-- DPL is a notable violator of this rule. -->
-      <property name="severity" value="error"/>
-      <!-- Imports used only in Javadoc are tolerated. -->
-      <property name="processJavadoc" value="true"/>
-      <message
-          key="import.unused"
-          value="Unused import: {0}." />
-    </module>
-
-    <module name="ImportOrder">
-      <!-- Checks for out of order import statements. -->
-      <property name="severity" value="warning"/>
-      <property name="groups" value="com.google,*,java,javax"/>
-      <!-- This ensures that static imports go first. -->
-      <property name="option" value="top"/>
-      <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
-    </module>
-
-    <!--
-
-    JAVADOC CHECKS
-
-    -->
-
-    <module name="JavadocType">
-      <!-- Item 28 - Write doc comments for all exposed API elements. -->
-      <!-- Ensure all classes with visability greater than or equal to
-        protected have class level documentation. -->
-      <property name="scope" value="protected"/>
-      <property name="severity" value="error"/>
-      <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. -->
-      <property name="allowUnknownTags" value="true"/>
-      <property name="allowMissingParamTags" value="true"/>
-      <message key="javadoc.missing"
-               value="Missing a Javadoc comment."/>
-    </module>
-
-    <!--
-
-    NAMING CHECKS
-
-    -->
-
-    <!-- Item 38 - Adhere to generally accepted naming conventions -->
-
-    <module name="PackageName">
-      <!-- Validates identifiers for package names against the
-        supplied expression. -->
-      <!-- Here the default checkstyle rule restricts package name parts to
-        seven characters, this is not in line with common practice at Google.
-      -->
-      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="TypeNameCheck">
-      <metadata name="altname" value="TypeName"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="StaticVariableNameCheck">
-      <!-- Validates static, non-final fields against the supplied
-      expression "^[a-z][a-zA-Z0-9]*?$". -->
-      <metadata name="altname" value="StaticVariableName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*?$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="MemberNameCheck">
-      <!-- Validates non-static members against the supplied expression. -->
-      <metadata name="altname" value="MemberName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*?$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="MethodNameCheck">
-      <!-- Validates identifiers for method names. -->
-      <metadata name="altname" value="MethodName"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*([a-zA-Z0-9]+)*$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="ParameterName">
-      <!-- Validates identifiers for method parameters against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="LocalFinalVariableName">
-      <!-- Validates identifiers for local final variables against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="LocalVariableName">
-      <!-- Validates identifiers for local variables against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-
-    <!--
-
-    LENGTH and CODING CHECKS
-
-    -->
-
-    <module name="LineLength">
-      <!-- Checks if a line is too long. -->
-      <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/>
-      <property name="severity" value="error"/>
-
-      <!--
-        The default ignore pattern exempts the following elements:
-          - import statements
-          - long URLs inside comments
-      -->
-
-      <property name="ignorePattern"
-          value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
-          default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)|(\s*@[\w\.\$]+::\w+(?:\([^\(]*\)|\(\)\(\))?[,;]?)|(\s+\* \{@(link|see) [^\s][^\}]*\}[\.,;]?)$"/>
-    </module>
-
-    <module name="LeftCurly">
-      <!-- Checks for placement of the left curly brace ('{'). -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="RightCurly">
-      <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
-      the same line. e.g., the following example is fine:
-      <pre>
-        if {
-          ...
-        } else
-      </pre>
-      -->
-      <!-- This next example is not fine:
-      <pre>
-        if {
-          ...
-        }
-        else
-      </pre>
-      -->
-      <property name="option" value="same"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!-- Checks for braces around if and else blocks -->
-    <module name="NeedBraces">
-      <property name="severity" value="warning"/>
-      <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
-    </module>
-
-    <module name="UpperEll">
-      <!-- Checks that long constants are defined with an upper ell.-->
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="FallThrough">
-      <!-- Warn about falling through to the next case statement.  Similar to
-      javac -Xlint:fallthrough, but the check is suppressed if there is a single-line comment
-      on the last non-blank line preceding the fallen-into case.
-      -->
-      <property name="reliefPattern"
-       value=".*"/>
-      <property name="severity" value="error"/>
-    </module>
-
-
-    <!--
-
-    MODIFIERS CHECKS
-
-    -->
-
-    <module name="ModifierOrder">
-      <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
-           8.4.3.  The prescribed order is:
-           public, protected, private, abstract, static, final, transient, volatile,
-           synchronized, native, strictfp
-        -->
-    </module>
-
-
-    <!--
-
-    WHITESPACE CHECKS
-
-    -->
-
-    <module name="WhitespaceAround">
-      <!-- Checks that various tokens are surrounded by whitespace.
-           This includes most binary operators and keywords followed
-           by regular or curly braces.
-      -->
-      <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
-        BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
-        EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
-        LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
-        LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
-        MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
-        SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="WhitespaceAfter">
-      <!-- Checks that commas, semicolons and typecasts are followed by
-           whitespace.
-      -->
-      <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
-    </module>
-
-    <module name="NoWhitespaceAfter">
-      <!-- Checks that there is no whitespace after various unary operators.
-           Linebreaks are allowed.
-      -->
-      <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
-        UNARY_PLUS"/>
-      <property name="allowLineBreaks" value="true"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="NoWhitespaceBefore">
-      <!-- Checks that there is no whitespace before various unary operators.
-           Linebreaks are allowed.
-      -->
-      <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
-      <property name="allowLineBreaks" value="true"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="ParenPad">
-      <!-- Checks that there is no whitespace before close parens or after
-           open parens.
-      -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!--
-
-    MISC CHECKS
-
-    -->
-
-  </module>
-</module>
-
diff --git a/jill/rsc/META-INF/services/com.android.jill.api.JillProvider b/jill/rsc/META-INF/services/com.android.jill.api.JillProvider
deleted file mode 100644
index ec6da23..0000000
--- a/jill/rsc/META-INF/services/com.android.jill.api.JillProvider
+++ /dev/null
@@ -1 +0,0 @@
-com.android.jill.api.impl.JillProviderImpl
\ No newline at end of file
diff --git a/jill/run-jill-unit-tests b/jill/run-jill-unit-tests
deleted file mode 100755
index f005752..0000000
--- a/jill/run-jill-unit-tests
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (C) 2014 The Android Open Source Project
-#
-# Licensed 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.
-
-#!/bin/bash
-
-CURRENT_DIR=$(dirname $0)
-
-if [ -z "$ANDROID_BUILD_TOP" ] || [ "${ANDROID_BUILD_TOP}+testDefinedButNotSet" = "testDefinedButNotSet" ];
-then
-  echo "Error: environment not set. Please run source build/core/envsetup.sh."
-  exit
-fi
-
-REF_JAVA_COMPILER='javac' \
-java -cp ${ANDROID_BUILD_TOP}/out/host/common/obj/JAVA_LIBRARIES/libjackunittests_intermediates/javalib.jar:\
-${ANDROID_BUILD_TOP}/out/host/common/obj/JAVA_LIBRARIES/libjillunittests_intermediates/javalib.jar \
-org.junit.runner.JUnitCore $1
diff --git a/jill/src/com/android/jill/ContainerType.java b/jill/src/com/android/jill/ContainerType.java
deleted file mode 100644
index edb6e6f..0000000
--- a/jill/src/com/android/jill/ContainerType.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-/**
- * Represents whether a file is a directory or a zip archive.
- */
-public enum ContainerType {
-  DIR, ZIP;
-}
\ No newline at end of file
diff --git a/jill/src/com/android/jill/ExitStatus.java b/jill/src/com/android/jill/ExitStatus.java
deleted file mode 100644
index 0ac0f0f..0000000
--- a/jill/src/com/android/jill/ExitStatus.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-/**
- * Jill exit status.
- */
-public class ExitStatus {
-  /**
-   * Success.
-   */
-  public static final int SUCCESS = 0;
-  /**
-   * Unknown error.
-   */
-  public static final int FAILURE_UNKNOWN = 1;
-  /**
-   * Usage, syntax or configuration file error.
-   */
-  public static final int FAILURE_USAGE = 2;
-  /**
-   * Jill internal error.
-   */
-  public static final int FAILURE_INTERNAL = 3;
-}
diff --git a/jill/src/com/android/jill/IllegalOptionsException.java b/jill/src/com/android/jill/IllegalOptionsException.java
deleted file mode 100644
index bc295c7..0000000
--- a/jill/src/com/android/jill/IllegalOptionsException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-import javax.annotation.Nonnull;
-
-/**
- * Thrown when a {@code Options} is not valid.
- */
-public class IllegalOptionsException extends Exception {
-  private static final long serialVersionUID = 1L;
-
-  public IllegalOptionsException() {
-    super();
-  }
-
-  public IllegalOptionsException(@Nonnull String message) {
-    super(message);
-  }
-
-  public IllegalOptionsException(@Nonnull String message, @Nonnull Throwable cause) {
-    super(message, cause);
-  }
-
-  public IllegalOptionsException(@Nonnull Throwable cause) {
-    super(cause);
-  }
-}
diff --git a/jill/src/com/android/jill/Jill.java b/jill/src/com/android/jill/Jill.java
deleted file mode 100644
index 6e1e9ac..0000000
--- a/jill/src/com/android/jill/Jill.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-import com.android.jill.frontend.java.JavaTransformer;
-import com.android.jill.utils.FileUtils;
-import com.android.sched.util.Version;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.jar.JarFile;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * Main class of Jill.
- */
-public class Jill {
-
-  @CheckForNull
-  private static Version version = null;
-
-  public static void process(@Nonnull Options options) {
-    File binaryFile = options.getBinaryFile();
-    JavaTransformer jt = new JavaTransformer(getVersion().getVersion(), options);
-    if (binaryFile.isFile()) {
-      if (FileUtils.isJavaBinaryFile(binaryFile)) {
-        List<File> javaBinaryFiles = new ArrayList<File>();
-        javaBinaryFiles.add(binaryFile);
-        jt.transform(javaBinaryFiles);
-      } else if (FileUtils.isJarFile(binaryFile)) {
-        try {
-          jt.transform(new JarFile(binaryFile));
-        } catch (IOException e) {
-          throw new JillException("Fails to create jar file " + binaryFile.getName(), e);
-        }
-      } else {
-        throw new JillException("Unsupported file type: " + binaryFile.getName());
-      }
-    } else {
-      List<File> javaBinaryFiles = new ArrayList<File>();
-      FileUtils.getJavaBinaryFiles(binaryFile, javaBinaryFiles);
-      jt.transform(javaBinaryFiles);
-    }
-  }
-
-  @Nonnull
-  public static Version getVersion() {
-    if (version == null) {
-      try {
-        version = new Version("jill", Jill.class.getClassLoader());
-      } catch (IOException e) {
-        System.err.println("Failed to read version properties file: " + e.getMessage());
-        throw new AssertionError();
-      }
-    }
-
-    assert version != null;
-    return version;
-  }
-
-}
diff --git a/jill/src/com/android/jill/JillException.java b/jill/src/com/android/jill/JillException.java
deleted file mode 100644
index dcfd541..0000000
--- a/jill/src/com/android/jill/JillException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-import javax.annotation.Nonnull;
-
-/**
- * Thrown when something goes wrong into Jill.
- */
-public class JillException extends RuntimeException {
-  private static final long serialVersionUID = 1L;
-
-  public JillException() {
-    super();
-  }
-
-  public JillException(@Nonnull String message) {
-    super(message);
-  }
-
-  public JillException(@Nonnull String message, @Nonnull Throwable cause) {
-    super(message, cause);
-  }
-
-  public JillException(@Nonnull Throwable cause) {
-    super(cause);
-  }
-}
diff --git a/jill/src/com/android/jill/Main.java b/jill/src/com/android/jill/Main.java
deleted file mode 100644
index 172c355..0000000
--- a/jill/src/com/android/jill/Main.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-import com.android.sched.util.config.cli.TokenIterator;
-import com.android.sched.util.location.NoLocation;
-
-import org.kohsuke.args4j.CmdLineException;
-import org.kohsuke.args4j.CmdLineParser;
-import org.kohsuke.args4j.ParserProperties;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Nonnull;
-
-/**
- *  Main class for Jill tool.
- */
-public class Main {
-
-  public static void main(@Nonnull String[] args) {
-    Options options = null;
-
-    try {
-      options = getOptions(args);
-
-      if (options.askForHelp()) {
-        printUsage(System.out);
-        System.exit(ExitStatus.SUCCESS);
-      }
-
-      if (options.askForVersion()) {
-        System.out.println("Jill");
-        System.out.println("Version: " + Jill.getVersion().getVerboseVersion() + '.');
-        System.exit(ExitStatus.SUCCESS);
-      }
-
-      System.exit(runJill(System.err, options));
-
-    } catch (CmdLineException e) {
-      if (e.getMessage() != null) {
-        System.err.println(e.getMessage());
-      }
-      CmdLineParser parser = e.getParser();
-      if (parser != null) {
-        printUsage(System.out);
-      } else {
-        System.err.println("Try --help for help");
-      }
-      System.exit(ExitStatus.FAILURE_USAGE);
-    } catch (IOException e) {
-      System.err.println(e.getMessage());
-
-      System.exit(ExitStatus.FAILURE_USAGE);
-    }
-
-    System.exit(ExitStatus.FAILURE_UNKNOWN);
-  }
-
-  protected static int runJill(@Nonnull PrintStream err, @Nonnull Options options) {
-    try {
-      Jill.process(options);
-
-    } catch (JillException e) {
-      if (options != null) {
-        err.println("Binary transformation of " + options.getBinaryFile().getName()
-            + " failed.");
-        if (options.isVerbose()) {
-          e.printStackTrace(err);
-        }
-      } else {
-        err.println("Binary transformation failed.");
-      }
-
-      return ExitStatus.FAILURE_INTERNAL;
-    }
-    return ExitStatus.SUCCESS;
-  }
-
-  @Nonnull
-  public static Options getOptions(@Nonnull String[] args) throws CmdLineException, IOException {
-    Options options = new Options();
-
-
-    CmdLineParser parser =
-        new CmdLineParser(options, ParserProperties.defaults().withUsageWidth(100));
-
-    TokenIterator iterator = new TokenIterator(new NoLocation(), args);
-    List<String> list = new ArrayList<String>();
-    while (iterator.hasNext()) {
-      list.add(iterator.next());
-    }
-    parser.parseArgument(list);
-    parser.stopOptionParsing();
-
-    try {
-      options.checkValidity();
-    } catch (IllegalOptionsException e) {
-      throw new CmdLineException(parser, e.getMessage(), e);
-    }
-
-    return options;
-  }
-
-  protected static void printUsage(@Nonnull PrintStream printStream) {
-    CmdLineParser parser =
-        new CmdLineParser(new Options(), ParserProperties.defaults().withUsageWidth(100));
-    printStream.println("Usage: <options> <class files to be transformed contained recursively"
-        + " in directories or in a zip/jar file>");
-    printStream.println();
-    printStream.println("Options:");
-    parser.printUsage(printStream);
-  }
-}
diff --git a/jill/src/com/android/jill/Options.java b/jill/src/com/android/jill/Options.java
deleted file mode 100644
index 420d364..0000000
--- a/jill/src/com/android/jill/Options.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-import com.android.jill.utils.FileUtils;
-
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
-
-import java.io.File;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * Jill command line options.
- */
-public class Options {
-
-  @CheckForNull
-  @Argument(usage = "read command line from file", metaVar = "@<FILE>")
-  private File binaryFile;
-
-  @Option(name = "--verbose", usage = "enable verbosity (default: false)")
-  private  boolean verbose = false;
-
-  @Option(name = "-h", aliases = "--help", usage = "display help")
-  protected boolean help;
-
-  @CheckForNull
-  @Option(name = "--output", usage = "output file", metaVar = "FILE")
-  protected File output;
-
-  @Option(name = "--version", usage = "display version")
-  protected boolean version;
-
-  @Option(name = "--tolerant", usage = "be tolerant to malformed input (default: false)")
-  protected boolean tolerant = false;
-
-  private final ContainerType outputContainer = ContainerType.ZIP;
-
-  @Option(name = "--no-debug", usage = "disable debug info emission")
-  protected boolean disableEmitDebugInfo = false;
-
-  @CheckForNull
-  private PrintStream err;
-  @CheckForNull
-  private File workingDir;
-
-  public void checkValidity() throws IllegalOptionsException {
-    if (askForVersion() || askForHelp()) {
-      return;
-    }
-
-    if (binaryFile != null) {
-      checkBinaryFileValidity();
-    } else {
-      throw new IllegalOptionsException("Input file not provided");
-    }
-    if (output != null) {
-      if (outputContainer == ContainerType.DIR) {
-        checkOutputDir();
-      }
-    } else {
-      throw new IllegalOptionsException("Output directory not provided");
-    }
-  }
-
-  public void setBinaryFile(@Nonnull File binaryFile) {
-    this.binaryFile = binaryFile;
-  }
-
-  public void setOutput(@Nonnull File output) {
-    this.output = output;
-  }
-
-  @Nonnull
-  public File getOutput() {
-    assert output != null;
-    if (workingDir != null && !output.isAbsolute()) {
-      return new File(workingDir, output.getPath());
-    } else {
-      return output;
-    }
-  }
-
-  @Nonnull
-  public File getBinaryFile() {
-    assert binaryFile != null;
-    if (workingDir != null && !binaryFile.isAbsolute()) {
-      return new File(workingDir, binaryFile.getPath());
-    } else {
-      return binaryFile;
-    }
-  }
-
-  public boolean askForVersion() {
-    return version;
-  }
-
-  public boolean askForHelp() {
-    return help;
-  }
-
-  public void setVerbose(boolean verbose) {
-    this.verbose = verbose;
-  }
-
-
-  public boolean isVerbose() {
-    return verbose;
-  }
-
-  public void setTolerant(boolean tolerant) {
-    this.tolerant = tolerant;
-  }
-
-  public boolean isTolerant() {
-    return tolerant;
-  }
-
-  public boolean isEmitDebugInfo() {
-    return !disableEmitDebugInfo;
-  }
-
-  public void setEmitDebugInfo(boolean emitDebugInfo) {
-    disableEmitDebugInfo = !emitDebugInfo;
-  }
-
-  @Nonnull
-  public ContainerType getOutputContainer() {
-    return outputContainer;
-  }
-
-
-  public void setStandardError(@Nonnull PrintStream standardError) {
-    err = standardError;
-  }
-
-  @CheckForNull
-  public PrintStream getStandardError() {
-    return err;
-  }
-
-  public void setWorkingDirectory(@Nonnull File workingDir) {
-    this.workingDir = workingDir;
-  }
-
-  private void checkBinaryFileValidity() throws IllegalOptionsException {
-    assert binaryFile != null;
-
-    File binaryFile = getBinaryFile();
-
-    if (!binaryFile.exists()) {
-      throw new IllegalOptionsException(binaryFile.getName() + " does not exists.");
-    }
-
-    if (binaryFile.isFile() && FileUtils.isJarFile(binaryFile)) {
-      return;
-    }
-
-    if (binaryFile.isFile() && !FileUtils.isJavaBinaryFile(binaryFile)
-        && !FileUtils.isJarFile(binaryFile)) {
-      throw new IllegalOptionsException(binaryFile.getName() + " is not a supported binary file.");
-    }
-
-    List<File> binaryFiles = new ArrayList<File>();
-    FileUtils.getJavaBinaryFiles(binaryFile, binaryFiles);
-    if (binaryFiles.isEmpty()) {
-      System.err.println("Warning: Folder " + binaryFile.getName()
-          + " does not contains class files.");
-    }
-  }
-
-  private void checkOutputDir() throws IllegalOptionsException {
-    assert output != null;
-
-    File output = getOutput();
-
-    if (!output.exists()) {
-      throw new IllegalOptionsException(output.getName() + " does not exist.");
-    }
-
-    if (!output.canRead() || !output.canWrite()) {
-      throw new IllegalOptionsException("The specified output folder '"
-          + output.getAbsolutePath()
-          + "' for jack files cannot be written to or read from.");
-    }
-  }
-}
diff --git a/jill/src/com/android/jill/api/impl/JillProviderImpl.java b/jill/src/com/android/jill/api/impl/JillProviderImpl.java
deleted file mode 100644
index e3f3863..0000000
--- a/jill/src/com/android/jill/api/impl/JillProviderImpl.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.impl;
-
-import com.android.jill.Jill;
-import com.android.jill.api.ConfigNotSupportedException;
-import com.android.jill.api.JillConfig;
-import com.android.jill.api.JillProvider;
-import com.android.jill.api.v01.Api01Config;
-import com.android.jill.api.v01.Cli01Config;
-import com.android.jill.api.v01.impl.Api01ConfigImpl;
-import com.android.jill.api.v01.impl.Cli01ConfigImpl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * This class provides an implementation to build the requested {@link JillConfig}
- */
-public class JillProviderImpl implements JillProvider {
-
-  @Override
-  @Nonnull
-  @SuppressWarnings("unchecked")
-  public <T extends JillConfig> T createConfig(@Nonnull Class<T> cls)
-      throws ConfigNotSupportedException {
-    if (cls == Api01Config.class) {
-      return (T) new Api01ConfigImpl();
-    } else if (cls == Cli01Config.class) {
-      return (T) new Cli01ConfigImpl();
-    }
-
-    throw new ConfigNotSupportedException(cls.getName() + " are not supported");
-  }
-
-  @Override
-  @Nonnull
-  public <T extends JillConfig> boolean isConfigSupported(@Nonnull Class<T> cls) {
-    return cls == Api01Config.class || cls == Cli01Config.class;
-  }
-
-  @Override
-  @Nonnull
-  public Collection<Class<? extends JillConfig>> getSupportedConfigs() {
-    List<Class<? extends JillConfig>> result = new ArrayList<Class<? extends JillConfig>>(2);
-    result.add(Api01Config.class);
-    result.add(Cli01Config.class);
-    return result;
-  }
-
-  @Override
-  @Nonnull
-  public String getTranslatorVersion() {
-     return Jill.getVersion().getVersion();
-  }
-
-  @Override
-  @Nonnull
-  public String getTranslatorReleaseName() {
-    return Jill.getVersion().getReleaseName();
-  }
-
-  @Override
-  public int getTranslatorReleaseCode() {
-    return Jill.getVersion().getReleaseCode();
-  }
-
-  @Override
-  public int getTranslatorSubReleaseCode() {
-    return Jill.getVersion().getSubReleaseCode();
-  }
-
-  @Override
-  @Nonnull
-  public SubReleaseKind getTranslatorSubReleaseKind() {
-    switch (Jill.getVersion().getSubReleaseKind()) {
-      case ENGINEERING:
-        return SubReleaseKind.ENGINEERING;
-      case PRE_ALPHA:
-        return SubReleaseKind.PRE_ALPHA;
-      case ALPHA:
-        return SubReleaseKind.ALPHA;
-      case BETA:
-        return SubReleaseKind.BETA;
-      case CANDIDATE:
-        return SubReleaseKind.CANDIDATE;
-      case RELEASE:
-        return SubReleaseKind.RELEASE;
-      default:
-        throw new AssertionError(Jill.getVersion().getSubReleaseKind().name());
-    }
-  }
-
-  @Override
-  @CheckForNull
-  public String getTranslatorBuildId() {
-    return Jill.getVersion().getBuildId();
-  }
-
-  @Override
-  @CheckForNull
-  public String getTranslatorSourceCodeBase() {
-     return Jill.getVersion().getCodeBase();
-  }
-}
\ No newline at end of file
diff --git a/jill/src/com/android/jill/api/v01/impl/Api01ConfigImpl.java b/jill/src/com/android/jill/api/v01/impl/Api01ConfigImpl.java
deleted file mode 100644
index 6aba8a0..0000000
--- a/jill/src/com/android/jill/api/v01/impl/Api01ConfigImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01.impl;
-
-import com.android.jill.Jill;
-import com.android.jill.Options;
-import com.android.jill.api.v01.Api01Config;
-import com.android.jill.api.v01.Api01TranslationTask;
-import com.android.jill.api.v01.ConfigurationException;
-import com.android.jill.utils.FileUtils;
-
-import java.io.File;
-
-import javax.annotation.Nonnull;
-
-/**
- * This class provides the version 01 implementation of Jill API.
- */
-public class Api01ConfigImpl implements Api01Config {
-
-  @Nonnull
-  private final Options options;
-
-  public Api01ConfigImpl() {
-    options = new Options();
-  }
-
-  @Override
-  @Nonnull
-  public Api01TranslationTask getTask() {
-    return new Api01TranslationTaskImpl(options);
-  }
-
-  private static class Api01TranslationTaskImpl implements Api01TranslationTask {
-
-    @Nonnull
-    private final Options options;
-
-    public Api01TranslationTaskImpl(@Nonnull Options options) {
-      this.options = options;
-    }
-
-    @Override
-    public void run() {
-      Jill.process(options);
-    }
-
-  }
-
-  @Override
-  public void setVerbose(boolean isVerbose) {
-    options.setVerbose(isVerbose);
-  }
-
-  @Override
-  public void setInputJavaBinaryFile(@Nonnull File input) throws ConfigurationException {
-    if (!input.exists()) {
-      throw new ConfigurationException("Input file does not exist: " + input.getPath());
-    }
-    if (!input.getAbsoluteFile().isFile()) {
-      throw new ConfigurationException("Input is not a file: " + input.getPath());
-    }
-    if (!FileUtils.isJarFile(input)) {
-      throw new ConfigurationException("Unsupported file type: " + input.getName());
-    }
-    options.setBinaryFile(input);
-  }
-
-  @Override
-  public void setOutputJackFile(@Nonnull File outputJackFile) {
-    options.setOutput(outputJackFile);
-  }
-
-  @Override
-  public void setDebugInfo(boolean debugInfo) {
-    options.setEmitDebugInfo(debugInfo);
-  }
-
-}
diff --git a/jill/src/com/android/jill/api/v01/impl/Cli01ConfigImpl.java b/jill/src/com/android/jill/api/v01/impl/Cli01ConfigImpl.java
deleted file mode 100644
index 186aff0..0000000
--- a/jill/src/com/android/jill/api/v01/impl/Cli01ConfigImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.api.v01.impl;
-
-import com.android.jill.Main;
-import com.android.jill.Options;
-import com.android.jill.api.v01.Cli01Config;
-import com.android.jill.api.v01.Cli01TranslationTask;
-import com.android.jill.api.v01.ConfigurationException;
-
-import org.kohsuke.args4j.CmdLineException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * This class provides the version 01 implementation of Jill CLI.
- */
-public class Cli01ConfigImpl implements Cli01Config {
-
-  @CheckForNull
-  private PrintStream standardError;
-  @CheckForNull
-  private File workingDirectory;
-
-  @Override
-  @Nonnull
-  public Cli01TranslationTask getTask(@Nonnull String[] args) throws ConfigurationException {
-    try {
-      Options options = Main.getOptions(args);
-      options.setStandardError(standardError);
-      options.setWorkingDirectory(workingDirectory);
-      return new Cli01TranslationTaskImpl(options);
-    } catch (CmdLineException e) {
-      throw new ConfigurationException(e.getMessage(), e);
-    } catch (IOException e) {
-      throw new ConfigurationException(e.getMessage(), e);
-    }
-  }
-
-  private static class Cli01TranslationTaskImpl extends Main implements Cli01TranslationTask {
-
-    @Nonnull
-    private final Options options;
-
-    public Cli01TranslationTaskImpl(@Nonnull Options options) {
-      this.options = options;
-    }
-
-    @Override
-    public int run() {
-      PrintStream err = options.getStandardError();
-      if (err == null) {
-        err = System.err;
-      }
-      return runJill(err, options);
-    }
-
-  }
-
-  @Override
-  public void setStandardError(@Nonnull PrintStream standardError) {
-    this.standardError = standardError;
-  }
-
-  @Override
-  public void setStandardOutput(@Nonnull PrintStream standardOutput) {
-  }
-
-  @Override
-  public void setWorkingDirectory(@Nonnull File workingDirectory) {
-    this.workingDirectory = workingDirectory;
-  }
-}
-
diff --git a/jill/src/com/android/jill/backend/jayce/JayceOutputStream.java b/jill/src/com/android/jill/backend/jayce/JayceOutputStream.java
deleted file mode 100644
index 885b3db..0000000
--- a/jill/src/com/android/jill/backend/jayce/JayceOutputStream.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.backend.jayce;
-
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.annotation.Nonnull;
-
-/**
- * This class extends {@code DataOutputStream} to add uleb128 support for int and long.
- */
-class JayceOutputStream implements DataOutput {
-
-  @Nonnull
-  private final DataOutputStream out;
-
-  public JayceOutputStream(@Nonnull OutputStream out) {
-    this.out = new DataOutputStream(out);
-  }
-
-  /**
-   * Converts a string into its Java-style UTF-8 form. Java-style UTF-8
-   * differs from normal UTF-8 in the handling of character '\0' and
-   * surrogate pairs.
-   *
-   * @param string {@code non-null;} the string to convert
-   * @return {@code non-null;} the UTF-8 bytes for it
-   */
-  @Nonnull
-  private static byte[] stringToUtf8Bytes(@Nonnull String string) {
-      int len = string.length();
-      byte[] bytes = new byte[len * 3]; // Avoid having to reallocate.
-      int outAt = 0;
-
-      for (int i = 0; i < len; i++) {
-          char c = string.charAt(i);
-          if ((c != 0) && (c < 0x80)) {
-              bytes[outAt] = (byte) c;
-              outAt++;
-          } else if (c < 0x800) {
-              bytes[outAt] = (byte) (((c >> 6) & 0x1f) | 0xc0);
-              bytes[outAt + 1] = (byte) ((c & 0x3f) | 0x80);
-              outAt += 2;
-          } else {
-              bytes[outAt] = (byte) (((c >> 12) & 0x0f) | 0xe0);
-              bytes[outAt + 1] = (byte) (((c >> 6) & 0x3f) | 0x80);
-              bytes[outAt + 2] = (byte) ((c & 0x3f) | 0x80);
-              outAt += 3;
-          }
-      }
-
-      byte[] result = new byte[outAt];
-      System.arraycopy(bytes, 0, result, 0, outAt);
-      return result;
-  }
-
-  @Override
-  public void write(int b) throws IOException {
-    out.write(b);
-  }
-
-  @Override
-  public void write(byte[] b) throws IOException {
-    out.write(b);
-  }
-
-  @Override
-  public void write(byte[] b, int off, int len) throws IOException {
-    out.write(b, off, len);
-  }
-
-  @Override
-  public void writeBoolean(boolean v) throws IOException {
-    out.writeBoolean(v);
-  }
-
-  @Override
-  public void writeByte(int v) throws IOException {
-    out.writeByte(v);
-  }
-
-  @Override
-  public void writeShort(int v) throws IOException {
-    out.writeShort(v);
-  }
-
-  @Override
-  public void writeChar(int v) throws IOException {
-    out.writeChar(v);
-  }
-
-  /**
-   * Encode an integer value into uleb128 format and write it to the stream.
-   */
-  @Override
-  public void writeInt(int v) throws IOException {
-    int remaining = v >> 7;
-    boolean hasMore = true;
-    int end = ((v & Integer.MIN_VALUE) == 0) ? 0 : -1;
-
-    while (hasMore) {
-      hasMore = (remaining != end) || ((remaining & 1) != ((v >> 6) & 1));
-
-      writeByte((byte) ((v & 0x7f) | (hasMore ? 0x80 : 0)));
-      v = remaining;
-      remaining >>= 7;
-    }
-  }
-  /**
-   * Encode a long value into uleb128 format and write it to the stream.
-   */
-  @Override
-  public void writeLong(long v) throws IOException {
-    long remaining = v >> 7;
-    boolean hasMore = true;
-    long end = ((v & Long.MIN_VALUE) == 0) ? 0 : -1;
-
-    while (hasMore) {
-      hasMore = (remaining != end) || ((remaining & 1) != ((v >> 6) & 1));
-
-      writeByte((byte) ((v & 0x7f) | (hasMore ? 0x80 : 0)));
-      v = remaining;
-      remaining >>= 7;
-    }
-  }
-
-  @Override
-  public void writeFloat(float v) throws IOException {
-    out.writeFloat(v);
-  }
-
-  @Override
-  public void writeDouble(double v) throws IOException {
-    out.writeDouble(v);
-  }
-
-  @Override
-  public void writeBytes(String s) throws IOException {
-    out.writeBytes(s);
-  }
-
-  @Override
-  public void writeChars(String s) throws IOException {
-    out.writeChars(s);
-  }
-
-  @Override
-  public void writeUTF(String s) throws IOException {
-    if (s == null) {
-      writeInt(-1);
-    } else {
-      byte[] utf8String = stringToUtf8Bytes(s);
-      writeInt(utf8String.length);
-      write(utf8String);
-    }
-  }
-
-  public void flush() throws IOException {
-    out.flush();
-  }
-
-  public void close() throws IOException {
-    out.close();
-  }
-}
diff --git a/jill/src/com/android/jill/backend/jayce/JaycePrettyWriter.java b/jill/src/com/android/jill/backend/jayce/JaycePrettyWriter.java
deleted file mode 100644
index 10a3f0c..0000000
--- a/jill/src/com/android/jill/backend/jayce/JaycePrettyWriter.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.backend.jayce;
-
-import com.google.common.base.Strings;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Jayce pretty writer.
- */
-public class JaycePrettyWriter extends JayceWriter {
-
-  @Nonnull
-  private static final String LINE_SEPARATOR = System.getProperty("line.separator");
-
-  @Nonnull
-  private static final String INDENT_GRANULARITY = "  ";
-
-  @Nonnegative
-  private int indent = 0;
-
-  public JaycePrettyWriter(@Nonnull OutputStream out) {
-    super(out);
-  }
-
-  @Override
-  public void writeKeyword(@Nonnull Token token) throws IOException {
-    writeIdent();
-    super.writeKeyword(token);
-    writeLn();
-  }
-
-  @Override
-  public void writeOpen() throws IOException {
-    writeIdent();
-    super.writeOpen();
-    writeLn();
-    indentIn();
-  }
-
-  @Override
-  public void writeClose() throws IOException {
-    indentOut();
-    writeIdent();
-    super.writeClose();
-    writeLn();
-  }
-
-  @Override
-  public void writeString(@CheckForNull String string) throws IOException {
-    writeIdent();
-    super.writeString(string);
-    writeLn();
-  }
-
-  @Override
-  public void writeNull() throws IOException {
-    writeIdent();
-    super.writeNull();
-  }
-
-  @Override
-  public void writeFileName(@CheckForNull String fileName) throws IOException {
-    writeIdent();
-    super.writeFileName(fileName);
-    writeLn();
-  }
-
-  @Override
-  public void writeCurrentLineInfo(int lineNumber)
-      throws IOException {
-    writeIdent();
-    super.writeCurrentLineInfo(lineNumber);
-    writeLn();
-  }
-
-  @Override
-  protected void writeSpace() throws IOException {
-    writeLn();
-  }
-
-  @Override
-  public void writeInt(int value) throws IOException {
-    writeIdent();
-    super.writeInt(value);
-  }
-
-  @Override
-  public void writeByte(byte value) throws IOException {
-    writeIdent();
-    super.writeByte(value);
-  }
-
-  @Override
-  public void writeChar(char value) throws IOException {
-    writeIdent();
-    super.writeChar(value);
-  }
-
-  @Override
-  public void writeShort(short value) throws IOException {
-    writeIdent();
-    super.writeShort(value);
-  }
-
-  @Override
-  public void writeLong(long value) throws IOException {
-    writeIdent();
-    super.writeLong(value);
-  }
-
-  @Override
-  public void writeFloat(float value) throws IOException {
-    writeIdent();
-    super.writeFloat(value);
-  }
-
-  @Override
-  public void writeDouble(double value) throws IOException {
-    writeIdent();
-    super.writeDouble(value);
-  }
-
-  private void writeIdent() throws IOException {
-    writers.peek().writeChars(Strings.repeat(INDENT_GRANULARITY, indent));
-  }
-
-  private void writeLn() throws IOException {
-    writers.peek().writeChars(LINE_SEPARATOR);
-  }
-
-  private void indentIn() {
-    indent++;
-  }
-
-  private void indentOut() {
-    indent--;
-  }
-}
diff --git a/jill/src/com/android/jill/backend/jayce/JayceWriter.java b/jill/src/com/android/jill/backend/jayce/JayceWriter.java
deleted file mode 100644
index 07e418b..0000000
--- a/jill/src/com/android/jill/backend/jayce/JayceWriter.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.backend.jayce;
-
-import com.android.jill.utils.enums.DispatchKindIdHelper;
-import com.android.jill.utils.enums.FieldRefKindIdHelper;
-import com.android.jill.utils.enums.MethodKindIdHelper;
-import com.android.jill.utils.enums.ReceiverKindIdHelper;
-import com.android.jill.utils.enums.RetentionPolicyIdHelper;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.Stack;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- *  Jayce writer.
- */
-public class JayceWriter {
-
-  protected final Stack<JayceOutputStream> writers = new Stack<JayceOutputStream>();
-  private final Stack<ByteArrayOutputStream> outputStreams = new Stack<ByteArrayOutputStream>();
-  private final Stack<Integer> nodeCounters = new Stack<Integer>();
-
-  @Nonnull
-  private final List<String> currentCatchBlockList = new ArrayList<String>();
-
-  public JayceWriter(@Nonnull OutputStream out) {
-    writers.push(new JayceOutputStream(out));
-    nodeCounters.push(Integer.valueOf(0));
-  }
-
-  public void writeBoolean(boolean value)  throws IOException {
-    writers.peek().writeBoolean(value);
-  }
-
-  private void writeIntInternal(int value) throws IOException {
-    writers.peek().writeInt(value);
-  }
-
-  public void writeInt(int value) throws IOException {
-    writeIntInternal(value);
-    writeSpace();
-  }
-
-  public void writeTrimmedInt(int value) throws IOException {
-    writeIntInternal(value);
-  }
-
-  private void writeLongInternal(long value) throws IOException {
-    writers.peek().writeLong(value);
-  }
-
-  public void writeLong(long value) throws IOException {
-    writeLongInternal(value);
-    writeSpace();
-  }
-
-  public void writeByte(byte value) throws IOException {
-    writers.peek().writeByte(value);
-    writeSpace();
-  }
-
-  public void writeShort(short value) throws IOException {
-    writers.peek().writeShort(value);
-    writeSpace();
-  }
-
-  public void writeChar(char value) throws IOException {
-    writers.peek().writeChar(value);
-    writeSpace();
-  }
-
-  public void writeFloat(float value) throws IOException {
-    writeIntInternal(Float.floatToRawIntBits(value));
-    writeSpace();
-  }
-
-  public void writeDouble(double value) throws IOException {
-    writeLongInternal(Double.doubleToRawLongBits(value));
-    writeSpace();
-  }
-
-  public void writeKeyword(@Nonnull Token token) throws IOException {
-    writers.peek().writeByte(token.ordinal());
-    nodeCounters.push(Integer.valueOf(nodeCounters.pop().intValue() + 1));
-  }
-
-  public void writeToken(@Nonnull Token token) throws IOException {
-    writers.peek().writeByte(token.ordinal());
-  }
-
-  @SuppressWarnings("unused")
-  public void writeOpen() throws IOException {
-    nodeCounters.push(Integer.valueOf(0));
-  }
-
-  public void writeClose() throws IOException {
-    writeToken(Token.RPARENTHESIS);
-    nodeCounters.pop();
-  }
-
-  public void writeOpenNodeList() {
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    outputStreams.push(baos);
-    writers.push(new JayceOutputStream(baos));
-    nodeCounters.push(Integer.valueOf(0));
-  }
-
-  public void writeCloseNodeList() throws IOException {
-    JayceOutputStream w = writers.pop();
-    w.flush();
-    ByteArrayOutputStream baos = outputStreams.pop();
-    writeIntInternal(nodeCounters.pop().intValue());
-    writers.peek().write(baos.toByteArray());
-    w.close();
-    writeToken(Token.RPARENTHESIS);
-  }
-
-  public void writeRetentionPolicyEnum(@Nonnull Enum<?> enumValue) throws IOException {
-    writeByte(RetentionPolicyIdHelper.getId(enumValue));
-  }
-
-  public void writeFieldRefKindEnum(@Nonnull Enum<?> enumValue) throws IOException {
-    writeByte(FieldRefKindIdHelper.getId(enumValue));
-  }
-
-  public void writeMethodKindEnum(@Nonnull Enum<?> enumValue) throws IOException {
-    writeByte(MethodKindIdHelper.getId(enumValue));
-  }
-
-  public void writeReceiverKindEnum(@Nonnull Enum<?> enumValue) throws IOException {
-    writeByte(ReceiverKindIdHelper.getId(enumValue));
-  }
-
-  public void writeDispatchKindEnum(@Nonnull Enum<?> enumValue) throws IOException {
-    writeByte(DispatchKindIdHelper.getId(enumValue));
-  }
-
-  public void writeIds(@Nonnull List<String> list) throws IOException {
-    writeOpen();
-    writeIntInternal(list.size());
-    for (String id : list) {
-      writeId(id);
-    }
-
-    writeClose();
-  }
-
-  public void writeCatchBlockIds(@Nonnull Set<String> list) throws IOException {
-    List<String> removedIds = new ArrayList<String>(currentCatchBlockList.size());
-    List<String> addedIds = new ArrayList<String>(list.size());
-
-    for (String s : currentCatchBlockList) {
-      removedIds.add(s);
-    }
-    for (String s : list) {
-      addedIds.add(s);
-    }
-
-    // intersection(current, list)
-    currentCatchBlockList.retainAll(list);
-    // current \ intersection(current, list)
-    removedIds.removeAll(currentCatchBlockList);
-    // list \ intersection(current, list)
-    addedIds.removeAll(currentCatchBlockList);
-
-    int addedIdsSize = addedIds.size();
-    int removedIdsSize = removedIds.size();
-
-    if (addedIdsSize > 0) {
-      writeOpenAddCatchBlockIds();
-      writeTrimmedInt(addedIdsSize);
-      for (int i = 0; i < addedIdsSize; i++) {
-        writeString(addedIds.get(i));
-      }
-      writeCloseCatchBlockIds();
-    }
-
-    if (removedIdsSize > 0) {
-      writeOpenRemoveCatchBlockIds();
-      writeTrimmedInt(removedIdsSize);
-      for (int i = 0; i < removedIdsSize; i++) {
-        writeString(removedIds.get(i));
-      }
-      writeCloseCatchBlockIds();
-    }
-    currentCatchBlockList.addAll(addedIds);
-  }
-
-  public void clearCatchBlockIds() {
-    currentCatchBlockList.clear();
-  }
-
-  public boolean isCurrentCatchBlockListEmpty() {
-    return currentCatchBlockList.isEmpty();
-  }
-
-  public void writeId(@CheckForNull String id)  throws IOException {
-    writeStringInternal(id);
-  }
-
-  private void writeStringInternal(@CheckForNull String string) throws IOException {
-    writers.peek().writeUTF(string);
-  }
-
-  public void writeString(@CheckForNull String string)  throws IOException {
-    writeStringInternal(string);
-  }
-
-  public void writeNull()  throws IOException {
-    writeToken(Token.NULL);
-    writeSpace();
-    nodeCounters.push(Integer.valueOf(nodeCounters.pop().intValue() + 1));
-  }
-
-  @SuppressWarnings("unused")
-  protected void writeSpace()  throws IOException{
-  }
-
-  public void writeFileName(@CheckForNull String fileName) throws IOException {
-    writeOpenFileName();
-    writeStringInternal(fileName);
-    writeCloseFileName();
-  }
-
-  private void writeOpenFileName() throws IOException {
-    writeToken(Token.SHARP);
-  }
-
-  @SuppressWarnings("unused")
-  private void writeCloseFileName()  throws IOException{
-  }
-
-  public void writeCurrentLineInfo(int lineNumber)
-      throws IOException {
-    writeOpenLineInfo();
-    writeIntInternal(lineNumber);
-    writeCloseLineInfo();
-  }
-
-  private void writeOpenLineInfo() throws IOException {
-    writeToken(Token.LBRACKET);
-  }
-
-  @SuppressWarnings("unused")
-  private void writeCloseLineInfo()  throws IOException{
-  }
-
-  private void writeOpenAddCatchBlockIds() throws IOException {
-    writeToken(Token.LCURLY_ADD);
-  }
-
-  private void writeOpenRemoveCatchBlockIds() throws IOException {
-    writeToken(Token.LCURLY_REMOVE);
-  }
-
-  @SuppressWarnings("unused")
-  private void writeCloseCatchBlockIds()  throws IOException{
-  }
-
-  public void flush() throws IOException {
-    writers.peek().flush();
-  }
-}
diff --git a/jill/src/com/android/jill/backend/jayce/Token.java b/jill/src/com/android/jill/backend/jayce/Token.java
deleted file mode 100644
index d1113a5..0000000
--- a/jill/src/com/android/jill/backend/jayce/Token.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.backend.jayce;
-
-
-import javax.annotation.CheckForNull;
-
-/**
- * Tokens of Jayce.
- */
-public enum Token {
-
-  EOF(null),
-
-  DOUBLE_QUOTE("\""),
-
-  LPARENTHESIS("("),
-  RPARENTHESIS(")"),
-  SHARP("#"),
-  LBRACKET("["),
-  RBRACKET("]"),
-  LCURLY_ADD("{+"),
-  LCURLY_REMOVE("{-"),
-  RCURLY("}"),
-  NULL("null"),
-
-  NUMBER_VALUE(null),
-  STRING_VALUE(null),
-
-  ABSENT_ARRAY_DIMENSION("absent-array-dimension"),
-  ADD_OPERATION("+"),
-  ALLOC("alloc"),
-  AND_OPERATION("&&"),
-  ANNOTATION("annotation-literal"),
-  ANNOTATION_METHOD("annotation-method"),
-  ANNOTATION_TYPE("annotation"),
-  ARRAY_LENGTH("array-length"),
-  ARRAY_LITERAL("array-literal"),
-  ARRAY_REF("array-ref"),
-  ASG_ADD_OPERATION("+="),
-  ASG_BIT_AND_OPERATION("&="),
-  ASG_BIT_OR_OPERATION("|="),
-  ASG_BIT_XOR_OPERATION("^="),
-  ASG_CONCAT_OPERATION("asg-concat"),
-  ASG_DIV_OPERATION("/="),
-  ASG_MOD_OPERATION("%="),
-  ASG_MUL_OPERATION("*="),
-  ASG_OPERATION("="),
-  ASG_SHL_OPERATION("<<="),
-  ASG_SHR_OPERATION(">>="),
-  ASG_SHRU_OPERATION(">>>="),
-  ASG_SUB_OPERATION("-="),
-  ASSERT_STATEMENT("assert"),
-  BIT_AND_OPERATION("&"),
-  BIT_OR_OPERATION("|"),
-  BIT_XOR_OPERATION("^"),
-  BLOCK("block"),
-  BOOLEAN_LITERAL("boolean"),
-  BREAK_STATEMENT("break"),
-  BYTE_LITERAL("byte"),
-  CASE_STATEMENT("case"),
-  CATCH_BLOCK("catch"),
-  CHAR_LITERAL("char"),
-  CLASS("class"),
-  CLASS_LITERAL("class-literal"),
-  CONCAT_OPERATION("concat"),
-  CONDITIONAL_EXPRESSION ("?"),
-  CONSTRUCTOR ("constructor"),
-  CONTINUE_STATEMENT("continue"),
-  DIV_OPERATION("/"),
-  DO_STATEMENT("do"),
-  DOUBLE_LITERAL("double"),
-  DYNAMIC_CAST_OPERATION("cast"),
-  ENUM("enum"),
-  ENUM_FIELD("enum-field"),
-  ENUM_LITERAL("enum-literal"),
-  EQ_OPERATION("=="),
-  EXCEPTION_RUNTIME_VALUE("ex-runtime-value"),
-  EXPRESSION_STATEMENT("expression-statement"),
-  FIELD("field"),
-  FIELD_INITIALIZER("field-intializer"),
-  FIELD_REF("field-ref"),
-  FLOAT_LITERAL("float"),
-  FOR_STATEMENT("for"),
-  GENERIC_SIGNATURE("generic-signature"),
-  GOTO("goto"),
-  GTE_OPERATION(">="),
-  GT_OPERATION(">"),
-  IF_STATEMENT("if"),
-  INSTANCE_OF("instanceof"),
-  INT_LITERAL("int"),
-  INTERFACE("interface"),
-  LABELED_STATEMENT("label"),
-  LOCAL("local"),
-  LOCAL_REF("local-ref"),
-  LOCK("lock"),
-  LONG_LITERAL("long"),
-  LTE_OPERATION("<="),
-  LT_OPERATION("<"),
-  METHOD("method"),
-  METHOD_BODY("body"),
-  METHOD_CALL("call"),
-  METHOD_LITERAL("method-literal"),
-  MOD_OPERATION("%"),
-  MUL_OPERATION("*"),
-  MULTI_EXPRESSION("multi-expression"),
-  NAME_VALUE_PAIR("name-value-pair"),
-  NEQ_OPERATION("!="),
-  NATIVE_METHOD_BODY("native-body"),
-  NEW_ARRAY("new-array"),
-  NEW_INSTANCE("new"),
-  NULL_LITERAL("null-literal"),
-  OR_OPERATION("||"),
-  PARAMETER("parameter"),
-  PARAMETER_REF("parameter-ref"),
-  POSTFIX_DEC_OPERATION("postfix-dec"),
-  POSTFIX_INC_OPERATION("postfix-inc"),
-  PREFIX_BIT_NOT_OPERATION("~"),
-  PREFIX_DEC_OPERATION("prefix-dec"),
-  PREFIX_INC_OPERATION("prefix-inc"),
-  PREFIX_NEG_OPERATION("neg"),
-  PREFIX_NOT_OPERATION("not"),
-  RESERVED("reserved"),
-  REINTERPRETCAST_OPERATION("reinterpret-cast"),
-  RETURN_STATEMENT("return"),
-  SHL_OPERATION("<<"),
-  SHORT_LITERAL("short"),
-  SHR_OPERATION(">>"),
-  SHRU_OPERATION(">>>"),
-  SIMPLE_NAME("simple-name"),
-  SUB_OPERATION("-"),
-  STRING_LITERAL("string"),
-  SWITCH_STATEMENT("switch"),
-  SYNCHRONIZED_BLOCK("synchronized-block"),
-  THIS_REF("this"),
-  THIS_REF_TYPE_INFO("this-type-info"),
-  THROW_STATEMENT("throw"),
-  THROWN_EXCEPTION("thrown-exception"),
-  TRY_STATEMENT("try"),
-  UNLOCK("unlock"),
-  WHILE_STATEMENT("while")
-  ;
-
-  @CheckForNull
-  private String label;
-
-  private Token(@CheckForNull String text) {
-    this.label = text;
-  }
-
-  public int getId() {
-    return ordinal();
-  }
-
-  @CheckForNull
-  public String getText() {
-    return label;
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/AnnotationWriter.java b/jill/src/com/android/jill/frontend/java/AnnotationWriter.java
deleted file mode 100644
index 4bb366e..0000000
--- a/jill/src/com/android/jill/frontend/java/AnnotationWriter.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import com.android.jill.JillException;
-import com.android.jill.backend.jayce.JayceWriter;
-import com.android.jill.backend.jayce.Token;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AnnotationNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldNode;
-import org.objectweb.asm.tree.MethodNode;
-
-import java.io.IOException;
-import java.lang.annotation.Retention;
-import java.util.List;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Annotation transformer to Jayce.
- */
-public class AnnotationWriter extends JillWriter {
-
-  private static final String JAVA_LANG_SYNTHETIC = "Ljava/lang/Synthetic;";
-
-  public AnnotationWriter(@Nonnull JayceWriter writer,
-      @Nonnull SourceInfoWriter sourceInfoWriter) {
-    super(writer, sourceInfoWriter);
-  }
-
-  public void writeRetentionPolicy(@Nonnull ClassNode cn) throws IOException {
-    assert AsmHelper.isAnnotation(cn);
-
-    boolean retentionAnnotationFound = false;
-
-    if (cn.visibleAnnotations != null) {
-      for (AnnotationNode anno : cn.visibleAnnotations) {
-        // Into Jayce, retention policy is written as a token
-        if (anno.desc.equals(Type.getType(Retention.class).getDescriptor())) {
-          assert anno.values.size() == 2;
-          assert anno.values.get(0) instanceof String;
-          assert ((String) anno.values.get(0)).equals("value");
-          assert anno.values.get(1) instanceof String[];
-
-          retentionAnnotationFound = true;
-
-          String[] enumAccess = (String[]) anno.values.get(1);
-          assert enumAccess.length == 2;
-          assert enumAccess[0].equals(Type.getType(java.lang.annotation.RetentionPolicy.class)
-              .getDescriptor());
-          if (enumAccess[1].equals(RetentionPolicy.CLASS.toString())) {
-            writer.writeRetentionPolicyEnum(RetentionPolicy.CLASS);
-          } else if (enumAccess[1].equals(RetentionPolicy.SOURCE.toString())) {
-            writer.writeRetentionPolicyEnum(RetentionPolicy.SOURCE);
-          } else if (enumAccess[1].equals(RetentionPolicy.RUNTIME.toString())) {
-            writer.writeRetentionPolicyEnum(RetentionPolicy.RUNTIME);
-          } else {
-            throw new JillException("Unknown retention policy.");
-          }
-          break;
-        }
-      }
-    }
-
-    if (!retentionAnnotationFound) {
-      // Default retention policy as specify in java doc of Annotation Type Retention.
-      writer.writeRetentionPolicyEnum(RetentionPolicy.CLASS);
-    }
-  }
-
-  public void writeAnnotations(@Nonnull ClassNode cn) throws IOException {
-    writer.writeOpenNodeList();
-
-    writeAnnotations(cn.invisibleAnnotations, RetentionPolicy.CLASS);
-    writeAnnotations(cn.visibleAnnotations, RetentionPolicy.RUNTIME);
-
-    writer.writeCloseNodeList();
-  }
-
-  public void writeAnnotations(@Nonnull MethodNode mn) throws IOException {
-    writer.writeOpenNodeList();
-
-    writeAnnotations(mn.invisibleAnnotations, RetentionPolicy.CLASS);
-    writeAnnotations(mn.visibleAnnotations, RetentionPolicy.RUNTIME);
-
-    writer.writeCloseNodeList();
-  }
-
-  public void writeAnnotations(@Nonnull FieldNode fn) throws IOException {
-    writer.writeOpenNodeList();
-
-    writeAnnotations(fn.invisibleAnnotations, RetentionPolicy.CLASS);
-    writeAnnotations(fn.visibleAnnotations, RetentionPolicy.RUNTIME);
-
-    writer.writeCloseNodeList();
-  }
-
-  public void writeAnnotations(@Nonnull MethodNode mn, @Nonnegative int parameterAnnotIdx)
-      throws IOException {
-    writer.writeOpenNodeList();
-
-    if (mn.invisibleParameterAnnotations != null) {
-      writeAnnotations(mn.invisibleParameterAnnotations[parameterAnnotIdx], RetentionPolicy.CLASS);
-    }
-
-    if (mn.visibleParameterAnnotations != null) {
-      writeAnnotations(mn.visibleParameterAnnotations[parameterAnnotIdx], RetentionPolicy.RUNTIME);
-    }
-
-    writer.writeCloseNodeList();
-  }
-
-  @Override
-  public void writeValue(Object value) throws IOException {
-    if (value instanceof String) {
-      writeValue((String) value);
-    } else if (value instanceof Integer) {
-      writeValue(((Integer) value).intValue());
-    } else if (value instanceof Boolean) {
-      writeValue(((Boolean) value).booleanValue());
-    } else if (value instanceof Byte) {
-      writeValue(((Byte) value).byteValue());
-    } else if (value instanceof Character) {
-      writeValue(((Character) value).charValue());
-    } else if (value instanceof Short) {
-      writeValue(((Short) value).shortValue());
-    } else if (value instanceof Float) {
-      writeValue(((Float) value).floatValue());
-    } else if (value instanceof Double) {
-      writeValue(((Double) value).doubleValue());
-    } else if (value instanceof Long) {
-      writeValue(((Long) value).longValue());
-    } else if (value instanceof String[]) {
-      writeValue((String[]) value);
-    } else if (value == null) {
-      writeValue();
-    } else if (value instanceof Type) {
-      writeValue((Type) value);
-    } else if (value.getClass().isArray() && value.getClass().getComponentType().isPrimitive()) {
-      writeValue(convertPrimitiveArrayToObject(value));
-    } else if (value instanceof List) {
-      writeValue(((List<?>) value).toArray());
-    } else if (value instanceof AnnotationNode) {
-      AnnotationNode annotationNode = (AnnotationNode) value;
-      assert !JAVA_LANG_SYNTHETIC.equals(annotationNode.desc);
-      writeAnnotation(annotationNode, RetentionPolicy.UNKNOWN);
-    } else {
-      throw new JillException("Not yet supported.");
-    }
-  }
-
-  private void writeAnnotations(@CheckForNull List<AnnotationNode> annotations,
-      @Nonnull RetentionPolicy retentionPolicy) throws IOException {
-    if (annotations != null) {
-      for (AnnotationNode anno : annotations) {
-        if (!JAVA_LANG_SYNTHETIC.equals(anno.desc)) {
-          writeAnnotation(anno, retentionPolicy);
-        }
-      }
-    }
-  }
-
-  private void writeAnnotation(@Nonnull AnnotationNode anno,
-      @Nonnull RetentionPolicy retentionPolicy) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.ANNOTATION);
-    writer.writeOpen();
-    writer.writeRetentionPolicyEnum(retentionPolicy);
-    writer.writeId(anno.desc);
-    writeNameValuePair(anno.values);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  private void writeNameValuePair(@CheckForNull List<Object> values) throws IOException {
-    writer.writeOpenNodeList();
-
-    if (values != null) {
-      for (int i = 0; i < values.size(); i += 2) {
-        String name = (String) values.get(i);
-        Object value = values.get(i + 1);
-        sourceInfoWriter.writeUnknwonDebugBegin();
-        writer.writeKeyword(Token.NAME_VALUE_PAIR);
-        writer.writeOpen();
-        writer.writeString(name);
-        writeValue(value);
-        sourceInfoWriter.writeUnknownDebugEnd();
-        writer.writeClose();
-      }
-    }
-
-    writer.writeCloseNodeList();
-  }
-
-  private void writeValue(@Nonnull String[] value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.ENUM_LITERAL);
-    writer.writeOpen();
-    writer.writeId(value[0]);
-    writer.writeString(value[1]);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/AsmHelper.java b/jill/src/com/android/jill/frontend/java/AsmHelper.java
deleted file mode 100644
index 7dd6442..0000000
--- a/jill/src/com/android/jill/frontend/java/AsmHelper.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.InnerClassNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.VarInsnNode;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Asm helpers.
- */
-public class AsmHelper {
-
-  @Nonnull
-  private static final String JAVA_LANG_ENUM = "java/lang/Enum";
-
-  private static final int JAVA_ACCESS_FLAGS_MASK = 0xFFFF;
-
-  @Nonnull
-  private static final String GENERIC_SIGNATURE_START = "<";
-  @Nonnull
-  private static final String GENERIC_SIGNATURE_END = ">";
-
-  public static boolean isGenericSignature(@Nonnull ClassNode cn) {
-    if (cn.signature != null && cn.signature.contains(GENERIC_SIGNATURE_START)) {
-      assert cn.signature.contains(GENERIC_SIGNATURE_END);
-      return true;
-    }
-    return false;
-  }
-
-  public static boolean isInterface(@Nonnull ClassNode cn) {
-    return ((cn.access & Opcodes.ACC_INTERFACE) != 0);
-  }
-
-  public static boolean isAnnotation(@Nonnull ClassNode cn) {
-    return ((cn.access & Opcodes.ACC_ANNOTATION) != 0);
-  }
-
-  public static boolean isEnum(@Nonnull ClassNode cn) {
-    if ((cn.access & Opcodes.ACC_ENUM) != 0) {
-      assert cn.superName != null;
-      return cn.superName.equals(JAVA_LANG_ENUM);
-    }
-    return false;
-  }
-
-  public static boolean isStatic(@Nonnull FieldNode fn) {
-    return ((fn.access & Opcodes.ACC_STATIC) != 0);
-  }
-
-  public static boolean isEnumField(@Nonnull FieldNode fn) {
-    return ((fn.access & Opcodes.ACC_ENUM) != 0);
-  }
-
-  public static boolean isNative(@Nonnull MethodNode mn) {
-    return ((mn.access & Opcodes.ACC_NATIVE) != 0);
-  }
-
-  public static boolean isAbstract(@Nonnull MethodNode mn) {
-    return ((mn.access & Opcodes.ACC_ABSTRACT) != 0);
-  }
-
-  public static boolean isStatic(@Nonnull MethodNode mn) {
-    return ((mn.access & Opcodes.ACC_STATIC) != 0);
-  }
-
-  public static boolean isPrivate(MethodNode mn) {
-    return ((mn.access & Opcodes.ACC_PRIVATE) != 0);
-  }
-
-  public static boolean isConstructor(@Nonnull MethodNode mn) {
-    return mn.name.equals("<init>");
-  }
-
-  public static boolean isStaticInit(@Nonnull MethodNode mn) {
-    return mn.name.equals("<clinit>");
-  }
-
-  public static boolean isLocalStoreOf(@Nonnull AbstractInsnNode insn, @Nonnegative int localIdx) {
-    if (!(insn instanceof VarInsnNode) && !(insn instanceof IincInsnNode)) {
-      return false;
-    }
-
-    switch (insn.getOpcode()) {
-      case Opcodes.IINC: {
-        return ((IincInsnNode) insn).var == localIdx;
-      }
-      case Opcodes.ASTORE:
-      case Opcodes.LSTORE:
-      case Opcodes.DSTORE:
-      case Opcodes.FSTORE:
-      case Opcodes.ISTORE: {
-        VarInsnNode varInsn = (VarInsnNode) insn;
-        return varInsn.var == localIdx;
-      }
-      default : {
-        return false;
-      }
-    }
-  }
-
-  public static boolean isLocalLoadOf(@Nonnull AbstractInsnNode insn, @Nonnegative int localIdx) {
-    if (!(insn instanceof VarInsnNode) && !(insn instanceof IincInsnNode)) {
-      return false;
-    }
-
-    switch (insn.getOpcode()) {
-      case Opcodes.IINC: {
-        return ((IincInsnNode) insn).var == localIdx;
-      }
-      case Opcodes.ALOAD:
-      case Opcodes.LLOAD:
-      case Opcodes.DLOAD:
-      case Opcodes.FLOAD:
-      case Opcodes.ILOAD: {
-        VarInsnNode varInsn = (VarInsnNode) insn;
-        return varInsn.var == localIdx;
-      }
-      default : {
-        return false;
-      }
-    }
-  }
-
-  @Nonnull
-  public static String getDescriptor(@Nonnull ClassNode cn) {
-    return Type.getObjectType(cn.name).getDescriptor();
-  }
-
-  @Nonnull
-  public static List<String> getDescriptorsFromInternalNames(
-      @Nonnull List<String> internalInterfaceNames) {
-    List<String> interfaceDescs = new ArrayList<String>(internalInterfaceNames.size());
-
-    for (String internalName : internalInterfaceNames) {
-      interfaceDescs.add(Type.getObjectType(internalName).getDescriptor());
-    }
-
-    return interfaceDescs;
-  }
-
-  @Nonnull
-  public static String getSourceName(@Nonnull ClassNode cn) {
-    if (cn.innerClasses != null) {
-      // Class is either an inner/local/anonymous or has inner classes
-      InnerClassNode matchingInnerClassNode = null;
-      for (InnerClassNode innerClassNode : cn.innerClasses) {
-        if (innerClassNode.name.equals(cn.name)) {
-          matchingInnerClassNode = innerClassNode;
-          break;
-        }
-      }
-      if (matchingInnerClassNode != null) {
-        return (matchingInnerClassNode.innerName != null) ? matchingInnerClassNode.innerName : "";
-      }
-    }
-    int lastPathSeparatorIndex = cn.name.lastIndexOf('/');
-    int startIndex = lastPathSeparatorIndex >= 0 ? lastPathSeparatorIndex + 1 : 0;
-    return cn.name.substring(startIndex);
-  }
-
-  public static int getModifiers(@Nonnull ClassNode cn) {
-    int modifier = cn.access;
-
-    if (cn.innerClasses != null) {
-      // Class is either an inner/local/anonymous or has inner classes
-      InnerClassNode matchingInnerClassNode = null;
-      for (InnerClassNode innerClassNode : cn.innerClasses) {
-        if (innerClassNode.name.equals(cn.name)) {
-          matchingInnerClassNode = innerClassNode;
-          break;
-        }
-      }
-      if (matchingInnerClassNode != null) {
-        modifier = matchingInnerClassNode.access;
-      }
-    }
-    // "super" is not relevant in dex format
-    modifier &= ~Opcodes.ACC_SUPER;
-    return (modifier & JAVA_ACCESS_FLAGS_MASK);
-  }
-
-  public static int getModifiers(@Nonnull MethodNode mn) {
-    return (mn.access & JAVA_ACCESS_FLAGS_MASK);
-  }
-
-  public static int getModifiers(@Nonnull FieldNode fn) {
-    return (fn.access & JAVA_ACCESS_FLAGS_MASK);
-  }
-
-}
diff --git a/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java b/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java
deleted file mode 100644
index d071e56..0000000
--- a/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import com.android.jill.Options;
-import com.android.jill.backend.jayce.JayceWriter;
-import com.android.jill.backend.jayce.Token;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldNode;
-import org.objectweb.asm.tree.InnerClassNode;
-import org.objectweb.asm.tree.LocalVariableNode;
-import org.objectweb.asm.tree.MethodNode;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Nonnull;
-
-/**
- * Write class node of Asm into Jayce.
- */
-public class ClassNodeWriter extends JillWriter {
-
-  // Extra Jack modifiers
-  public static final int COMPILE_TIME_CONSTANT = 0x20000;
-  public static final int ANONYMOUS_TYPE = 0x40000;
-
-  @Nonnull
-  private final AnnotationWriter annotWriter;
-
-  private static final int ORDINAL_UNKNOWN = -1;
-
-  @Nonnull
-  private final Options options;
-
-  public ClassNodeWriter(@Nonnull JayceWriter writer,
-      @Nonnull SourceInfoWriter sourceInfoWriter,
-      @Nonnull Options options) {
-    super(writer, sourceInfoWriter);
-    annotWriter = new AnnotationWriter(writer, sourceInfoWriter);
-    this.options = options;
-  }
-
-  public void write(@Nonnull ClassNode cn) throws IOException {
-    if (AsmHelper.isAnnotation(cn)) {
-      writeAnnotation(cn);
-    } else if (AsmHelper.isInterface(cn)) {
-      writeInterface(cn);
-    } else if (AsmHelper.isEnum(cn)){
-      writeEnum(cn);
-    } else {
-      writeClass(cn);
-    }
-  }
-
-  private void writeEnum(@Nonnull ClassNode cn) throws IOException {
-    sourceInfoWriter.writeDebugBegin(cn);
-    writer.writeKeyword(Token.ENUM);
-    writer.writeOpen();
-    writer.writeInt(AsmHelper.getModifiers(cn));
-    writer.writeId(AsmHelper.getDescriptor(cn));
-    writer.writeId(cn.superName != null ? Type.getObjectType(cn.superName).getDescriptor() : null);
-    writer.writeIds(AsmHelper.getDescriptorsFromInternalNames(cn.interfaces));
-    writeEnclosingInformation(cn);
-    writingInners(cn);
-    writeEnumFields(cn);
-    writeMethods(cn);
-    annotWriter.writeAnnotations(cn);
-    writer.writeOpenNodeList(); // Markers
-    writeGenericSignatureMarker(cn);
-    writeSourceNameMarker(cn);
-    writeThisRefTypeInfoMarker(cn);
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(cn);
-    writer.writeClose();
-  }
-
-  private void writeClass(@Nonnull ClassNode cn) throws IOException {
-    sourceInfoWriter.writeDebugBegin(cn);
-    writer.writeKeyword(Token.CLASS);
-    writer.writeOpen();
-    writer.writeInt(
-        AsmHelper.getModifiers(cn) | (AsmHelper.getSourceName(cn).equals("") ? ANONYMOUS_TYPE : 0));
-    writer.writeId(AsmHelper.getDescriptor(cn));
-    writer.writeId(cn.superName != null ? Type.getObjectType(cn.superName).getDescriptor() : null);
-    writer.writeIds(AsmHelper.getDescriptorsFromInternalNames(cn.interfaces));
-    writeEnclosingInformation(cn);
-    writingInners(cn);
-    writeFields(cn);
-    writeMethods(cn);
-    annotWriter.writeAnnotations(cn);
-    writer.writeOpenNodeList(); // Markers
-    writeGenericSignatureMarker(cn);
-    writeSourceNameMarker(cn);
-    writeThisRefTypeInfoMarker(cn);
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(cn);
-    writer.writeClose();
-  }
-
-  private void writeInterface(@Nonnull ClassNode cn) throws IOException {
-    assert isPackageInfoIfNotAbstract(cn);
-    sourceInfoWriter.writeDebugBegin(cn);
-    writer.writeKeyword(Token.INTERFACE);
-    writer.writeOpen();
-    writer.writeInt(AsmHelper.getModifiers(cn) | Opcodes.ACC_ABSTRACT);
-    writer.writeId(AsmHelper.getDescriptor(cn));
-    writer.writeIds(AsmHelper.getDescriptorsFromInternalNames(cn.interfaces));
-    writeEnclosingInformation(cn);
-    writingInners(cn);
-    writeFields(cn);
-    writeMethods(cn);
-    annotWriter.writeAnnotations(cn);
-    writer.writeOpenNodeList(); // Markers
-    writeGenericSignatureMarker(cn);
-    writeSourceNameMarker(cn);
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(cn);
-    writer.writeClose();
-  }
-
-  private boolean isPackageInfoIfNotAbstract(@Nonnull ClassNode cn) {
-    return !(((AsmHelper.getModifiers(cn) & Opcodes.ACC_ABSTRACT) == 0)
-        && !cn.name.endsWith("package-info"));
-  }
-
-  private void writeAnnotation(@Nonnull ClassNode cn) throws IOException {
-    sourceInfoWriter.writeDebugBegin(cn);
-    writer.writeKeyword(Token.ANNOTATION_TYPE);
-    writer.writeOpen();
-    annotWriter.writeRetentionPolicy(cn);
-    writer.writeInt(AsmHelper.getModifiers(cn));
-    writer.writeId(AsmHelper.getDescriptor(cn));
-    writer.writeIds(AsmHelper.getDescriptorsFromInternalNames(cn.interfaces));
-    writeEnclosingInformation(cn);
-    writingInners(cn);
-    writeFields(cn);
-    writeAnnotationMethods(cn);
-    annotWriter.writeAnnotations(cn);
-    writer.writeOpenNodeList(); // Markers
-    writeGenericSignatureMarker(cn);
-    writeSourceNameMarker(cn);
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(cn);
-    writer.writeClose();
-  }
-
-  private void writeThisRefTypeInfoMarker(@Nonnull ClassNode cn) throws IOException {
-    String thisRefSignature = null;
-    for (MethodNode mn : cn.methods) {
-      if (!AsmHelper.isStatic(mn) && mn.localVariables != null) {
-        for (LocalVariableNode lvn : mn.localVariables) {
-          if (lvn.name.equals("this")) {
-            if (thisRefSignature == null) {
-              thisRefSignature = lvn.signature;
-            } else {
-              assert thisRefSignature.equals(lvn.signature);
-            }
-          }
-        }
-      }
-    }
-    if (thisRefSignature != null) {
-      writer.writeKeyword(Token.THIS_REF_TYPE_INFO);
-      writer.writeOpen();
-      writer.writeString(thisRefSignature);
-      writer.writeClose();
-    }
-  }
-
-  private void writeGenericSignatureMarker(@Nonnull ClassNode cn) throws IOException {
-    if (AsmHelper.isGenericSignature(cn)) {
-      writer.writeKeyword(Token.GENERIC_SIGNATURE);
-      writer.writeOpen();
-      writer.writeString(cn.signature);
-      writer.writeClose();
-    }
-  }
-
-  private void writeSourceNameMarker(@Nonnull ClassNode cn) throws IOException {
-    writer.writeKeyword(Token.SIMPLE_NAME);
-    writer.writeOpen();
-    writer.writeString(AsmHelper.getSourceName(cn));
-    writer.writeClose();
-  }
-
-  private void writeGenericSignatureMarker(@Nonnull FieldNode fn) throws IOException {
-    if (fn.signature != null) {
-      writer.writeKeyword(Token.GENERIC_SIGNATURE);
-      writer.writeOpen();
-      writer.writeString(fn.signature);
-      writer.writeClose();
-    }
-  }
-
-  private void writeFields(@Nonnull ClassNode cn) throws IOException {
-    writer.writeOpenNodeList();
-    for (FieldNode fn : cn.fields) {
-      writeField(cn, fn, Token.FIELD);
-    }
-    writer.writeCloseNodeList();
-  }
-
-  private void writeEnumFields(@Nonnull ClassNode cn) throws IOException {
-    writer.writeOpenNodeList();
-    for (FieldNode fn : cn.fields) {
-      if (!AsmHelper.isEnumField(fn)) {
-        writeField(cn, fn, Token.FIELD);
-      } else {
-        writeField(cn, fn, Token.ENUM_FIELD);
-      }
-    }
-    writer.writeCloseNodeList();
-  }
-
-  private void writeField(@Nonnull ClassNode cn, @Nonnull FieldNode fn, @Nonnull Token kind)
-      throws IOException {
-    assert kind == Token.FIELD || kind == Token.ENUM_FIELD;
-    sourceInfoWriter.writeDebugBegin(cn, fn);
-    writer.writeKeyword(kind);
-    writer.writeOpen();
-    writer.writeInt(fn.value != null ? AsmHelper.getModifiers(fn) | COMPILE_TIME_CONSTANT
-        : AsmHelper.getModifiers(fn));
-    writer.writeString(fn.desc);
-    writer.writeString(fn.name);
-    writeFieldValue(cn, fn);
-    if (kind == Token.ENUM_FIELD) {
-      writer.writeInt(ORDINAL_UNKNOWN);
-    }
-    annotWriter.writeAnnotations(fn);
-    writer.writeOpenNodeList(); // Markers
-    writeGenericSignatureMarker(fn);
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(cn, fn);
-    writer.writeClose();
-  }
-
-  private void writeFieldValue(@Nonnull ClassNode cn, @Nonnull FieldNode fn) throws IOException {
-    if (AsmHelper.isStatic(fn)) {
-      Object value = fn.value;
-      if (value instanceof Integer) {
-        int intValue = ((Integer) value).intValue();
-        if (fn.desc.equals("Z")) {
-          writeValue(intValue != 0);
-        } else if (fn.desc.equals("B")) {
-          writeValue((byte) intValue);
-        } else if (fn.desc.equals("C")) {
-          writeValue((char) intValue);
-        } else if (fn.desc.equals("S")) {
-          writeValue((short) intValue);
-        } else {
-          writeValue(intValue);
-        }
-      } else if (value instanceof Long) {
-        writeValue(((Long) value).longValue());
-      } else if (value instanceof Float) {
-        writeValue(((Float) value).floatValue());
-      } else if (value instanceof Double) {
-        writeValue(((Double) value).doubleValue());
-      } else if (value instanceof String) {
-        writeValue((String) value);
-      } else {
-        writer.writeNull(); // No initial value
-      }
-    } else {
-      writer.writeNull(); // No initial value
-    }
-  }
-
-  private void writeAnnotationMethods(@Nonnull ClassNode cn) throws IOException {
-    assert AsmHelper.isAnnotation(cn);
-
-    writer.writeOpenNodeList();
-
-    for (MethodNode mn : cn.methods) {
-      new MethodBodyWriter(writer, annotWriter, cn, mn, sourceInfoWriter, options).write();
-    }
-    writer.writeCloseNodeList();
-  }
-
-  private void writeMethods(@Nonnull ClassNode cn) throws IOException {
-    writer.writeOpenNodeList();
-
-    for (MethodNode mn : cn.methods) {
-      new MethodBodyWriter(writer, annotWriter, cn, mn, sourceInfoWriter, options).write();
-    }
-    writer.writeCloseNodeList();
-  }
-
-  private void writingInners(@Nonnull ClassNode cn) throws IOException {
-    List<InnerClassNode> innerClasses = cn.innerClasses;
-    List<String> innerIds = new ArrayList<String>();
-
-    if (innerClasses != null) {
-      // Class is either an inner/local/anonymous or has inner classes
-      InnerClassNode matchingInnerClassNode = null;
-      for (InnerClassNode innerClassNode : innerClasses) {
-        if (innerClassNode.outerName != null && innerClassNode.outerName.equals(cn.name)
-            && innerClassNode.name != null) {
-          innerIds.add(Type.getObjectType(innerClassNode.name).getDescriptor());
-        }
-      }
-    }
-    writer.writeIds(innerIds);
-  }
-
-  private void writeEnclosingInformation(@Nonnull ClassNode cn) throws IOException {
-    List<InnerClassNode> innerClasses = cn.innerClasses;
-    if (innerClasses != null) {
-      // Class is either an inner/local/anonymous or has inner classes
-      InnerClassNode matchingInnerClassNode = null;
-      for (InnerClassNode innerClassNode : innerClasses) {
-        if (innerClassNode.name.equals(cn.name)) {
-          matchingInnerClassNode = innerClassNode;
-          break;
-        }
-      }
-      if (matchingInnerClassNode != null) {
-        // Inner, anonymous or local)
-        if (cn.outerMethod != null) {
-          // Local or anonymous in method
-          assert cn.outerMethodDesc != null;
-          if (!(AsmHelper.isInterface(cn) || AsmHelper.isAnnotation(cn))) {
-            // EnclosingClass
-            writer.writeId(Type.getObjectType(cn.outerClass).getDescriptor()); // EnclosingType
-            writer.writeId(Type.getObjectType(cn.outerClass).getDescriptor());
-            writer.writeId(cn.outerMethod + cn.outerMethodDesc); // EnclosingMethod
-          } else {
-            writer.writeId(null); // EnclosingType
-          }
-        } else {
-          // Inner or anonymous as init of field
-          String outerClassName =
-              (cn.outerClass != null) ? (cn.outerClass) : (matchingInnerClassNode.outerName);
-          if (outerClassName != null) {
-            writer.writeId(Type.getObjectType(outerClassName).getDescriptor()); // EnclosingType
-          } else {
-            writer.writeId(null); // EnclosingType unknown
-          }
-          if (!(AsmHelper.isInterface(cn) || AsmHelper.isAnnotation(cn))) {
-            writer.writeId(null); // EnclosingMethodClass
-            writer.writeId(null); // EnclosingMethod
-          }
-        }
-      } else {
-        writer.writeId(null); // EnclosingType
-        if (!(AsmHelper.isInterface(cn) || AsmHelper.isAnnotation(cn))) {
-          writer.writeId(null); // EnclosingMethodClass
-          writer.writeId(null); // EnclosingMethod
-        }
-      }
-    } else {
-      writer.writeId(null); // EnclosingType
-      if (!(AsmHelper.isInterface(cn) || AsmHelper.isAnnotation(cn))) {
-        writer.writeId(null); // EnclosingMethodClass
-        writer.writeId(null); // EnclosingMethod
-      }
-    }
-  }
-
-}
diff --git a/jill/src/com/android/jill/frontend/java/DuplicateJackFileException.java b/jill/src/com/android/jill/frontend/java/DuplicateJackFileException.java
deleted file mode 100644
index 55239a2..0000000
--- a/jill/src/com/android/jill/frontend/java/DuplicateJackFileException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import javax.annotation.Nonnull;
-
-/**
- * Thrown when there are 2 Jack files with the same path.
- */
-public class DuplicateJackFileException extends Exception {
-  private static final long serialVersionUID = 1L;
-
-  public DuplicateJackFileException() {
-    super();
-  }
-
-  public DuplicateJackFileException(@Nonnull String message) {
-    super(message);
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/JavaTransformer.java b/jill/src/com/android/jill/frontend/java/JavaTransformer.java
deleted file mode 100644
index ad6a6f0..0000000
--- a/jill/src/com/android/jill/frontend/java/JavaTransformer.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import com.android.jill.ContainerType;
-import com.android.jill.JillException;
-import com.android.jill.Options;
-import com.android.jill.backend.jayce.JayceWriter;
-import com.android.jill.utils.FileUtils;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.tree.ClassNode;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Properties;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * Transforms java binary files into jayce.
- */
-public class JavaTransformer {
-
-  @Nonnull
-  private static final String LIB_MAJOR_VERSION = "1";
-
-  @Nonnull
-  private static final String LIB_MINOR_VERSION = "1";
-
-  @Nonnull
-  private static final String JAYCE_MAJOR_VERSION = "2";
-
-  @Nonnull
-  private static final String JAYCE_MINOR_VERSION = "15";
-
-  @Nonnull
-  private static final String KEY_LIB_MAJOR_VERSION = "lib.version.major";
-
-  @Nonnull
-  private static final String KEY_LIB_MINOR_VERSION = "lib.version.minor";
-
-  @Nonnull
-  private static final String KEY_LIB_EMITTER = "lib.emitter";
-
-  @Nonnull
-  private static final String KEY_LIB_EMITTER_VERSION = "lib.emitter.version";
-
-  @Nonnull
-  private static final String KEY_JAYCE = "jayce";
-
-  @Nonnull
-  private static final String KEY_JAYCE_MAJOR_VERSION = "jayce.version.major";
-
-  @Nonnull
-  private static final String KEY_JAYCE_MINOR_VERSION = "jayce.version.minor";
-
-  @Nonnull
-  private static final String JACK_LIBRARY_PROPERTIES = "jack.properties";
-
-  @Nonnull
-  private final String version;
-
-  private final Options options;
-
-  @Nonnull
-  private static final String JAYCE_FILE_EXTENSION = ".jayce";
-
-  @Nonnull
-  private static final String JAYCE_PREFIX_INTO_LIB = "jayce";
-
-  @Nonnull
-  private static final char TYPE_NAME_SEPARATOR = '/';
-
-  @Nonnull
-  private final Properties jackLibraryProperties;
-
-  public JavaTransformer(@Nonnull String version, @Nonnull Options options) {
-    this.version = version;
-    this.options = options;
-    jackLibraryProperties = new Properties();
-    jackLibraryProperties.put(KEY_LIB_EMITTER, "jill");
-    jackLibraryProperties.put(KEY_LIB_EMITTER_VERSION, version);
-    jackLibraryProperties.put(KEY_LIB_MAJOR_VERSION, LIB_MAJOR_VERSION);
-    jackLibraryProperties.put(KEY_LIB_MINOR_VERSION, LIB_MINOR_VERSION);
-  }
-
-  public void transform(@Nonnull List<File> javaBinaryFiles) {
-    ZipOutputStream zos = null;
-    try {
-      if (options.getOutputContainer() == ContainerType.ZIP) {
-        zos = new ZipOutputStream(new FileOutputStream(options.getOutput()));
-        for (File fileToTransform : javaBinaryFiles) {
-          FileInputStream fis = new FileInputStream(fileToTransform);
-          try {
-            transformToZip(fis, zos, null);
-          } catch (DuplicateJackFileException e) {
-            System.err.println(e.getMessage());
-          } finally {
-            fis.close();
-          }
-        }
-      } else {
-        for (File fileToTransform : javaBinaryFiles) {
-          FileInputStream fis = new FileInputStream(fileToTransform);
-          try {
-            transformToDir(fis, options.getOutput());
-          } catch (DuplicateJackFileException e) {
-            System.err.println(e.getMessage());
-          } finally {
-            fis.close();
-          }
-        }
-      }
-      dumpJackLibraryProperties(zos);
-    } catch (IOException e) {
-      throw new JillException("Transformation failure.", e);
-    } finally {
-      if (zos != null) {
-        try {
-          zos.close();
-        } catch (IOException e) {
-          throw new JillException("Error closing zip.", e);
-        }
-      }
-    }
-  }
-
-  public void transform(@Nonnull JarFile jarFile) {
-    ZipOutputStream zos = null;
-    try {
-      if (options.getOutputContainer() == ContainerType.ZIP) {
-        zos = new ZipOutputStream(new FileOutputStream(options.getOutput()));
-      }
-      transformJavaFiles(jarFile, zos);
-      dumpJackLibraryProperties(zos);
-    } catch (Exception e) {
-      throw new JillException("Failed to transform " + jarFile.getName(), e);
-    } finally {
-      if (zos != null) {
-        try {
-          zos.close();
-        } catch (IOException e) {
-          throw new JillException("Error closing zip.", e);
-        }
-      }
-    }
-  }
-
-  private void dumpJackLibraryProperties(@CheckForNull ZipOutputStream zos) {
-    if (zos != null) {
-      dumpPropertiesToZip(zos, jackLibraryProperties);
-    } else {
-      dumpPropertiesToFile(new File(options.getOutput(), JACK_LIBRARY_PROPERTIES),
-          jackLibraryProperties);
-    }
-  }
-
-  private void dumpPropertiesToZip(@Nonnull ZipOutputStream zos,
-      @Nonnull Properties libraryProperties) {
-    try {
-      ZipEntry entry = new ZipEntry(JACK_LIBRARY_PROPERTIES);
-      zos.putNextEntry(entry);
-      libraryProperties.store(zos, "Library Properties");
-    } catch (IOException e) {
-      throw new JillException("Error writing '" + JACK_LIBRARY_PROPERTIES + "' to output zip", e);
-    }
-  }
-
-  private void dumpPropertiesToFile(@Nonnull File outputFile,
-      @Nonnull Properties libraryProperties) {
-    File outputDir = options.getOutput();
-    File libraryPropertiesFile = new File(outputDir, JACK_LIBRARY_PROPERTIES);
-    FileOutputStream fos = null;
-    try {
-      fos = new FileOutputStream(libraryPropertiesFile);
-      libraryProperties.store(fos, "Library Properties");
-    } catch (IOException e) {
-      throw new JillException(
-          "Error writing '" + JACK_LIBRARY_PROPERTIES + "' to " + outputFile.getAbsolutePath(), e);
-    } finally {
-      if (fos != null) {
-        try {
-          fos.close();
-        } catch (IOException e) {
-          throw new JillException("Error closing output " + outputFile.getAbsolutePath(), e);
-        }
-      }
-    }
-  }
-
-  private void transformJavaFiles(@Nonnull JarFile jarFile, @CheckForNull ZipOutputStream zos)
-      throws IOException {
-    final Enumeration<JarEntry> entries = jarFile.entries();
-    while (entries.hasMoreElements()) {
-      final JarEntry entry = entries.nextElement();
-      String name = entry.getName();
-      if (FileUtils.isJavaBinaryFile(name)) {
-        JarEntry fileEntry = jarFile.getJarEntry(name);
-        if (!fileEntry.isDirectory()) {
-          InputStream is = jarFile.getInputStream(fileEntry);
-          try {
-            if (zos != null) {
-              assert options.getOutputContainer() == ContainerType.ZIP;
-              transformToZip(is, zos, jarFile);
-            } else {
-              assert options.getOutputContainer() == ContainerType.DIR;
-              transformToDir(is, options.getOutput());
-            }
-          } catch (DuplicateJackFileException e) {
-            System.err.println(e.getMessage());
-          }
-        }
-      }
-    }
-  }
-
-  private void transformToZip(@Nonnull InputStream is, @Nonnull ZipOutputStream zipOutputStream,
-      @CheckForNull JarFile jarFile) throws IOException, DuplicateJackFileException {
-    ClassNode cn = getClassNode(is);
-    String filePath = getFilePath(cn.name);
-    if (jarFile != null && jarFile.getEntry(filePath) != null) {
-      throw new DuplicateJackFileException("Jack file '" + filePath
-          + "' was already copied as a resource to archive '" + options.getOutput()
-          + "' and thus won't be retransformed from class file.");
-    }
-    try {
-      ZipEntry entry = new ZipEntry(filePath);
-      zipOutputStream.putNextEntry(entry);
-      transform(cn, zipOutputStream);
-    } catch (IOException e) {
-      throw new JillException("Error writing to output zip", e);
-    }
-  }
-
-  private void transformToDir(@Nonnull InputStream is, @Nonnull File outputDir)
-      throws IOException, DuplicateJackFileException {
-    ClassNode cn = getClassNode(is);
-    String filePath = getFilePath(cn.name);
-
-    File outputFile = new File(outputDir, filePath);
-    if (outputFile.exists()) {
-      throw new DuplicateJackFileException("Jack file '" + outputFile.getAbsolutePath()
-          + "' was already copied as a resource and thus won't be retransformed from class file.");
-    }
-    FileOutputStream fos = null;
-    try {
-      createParentDirectories(outputFile);
-      fos = new FileOutputStream(outputFile);
-      transform(cn, fos);
-    } catch (IOException e) {
-      throw new JillException("Unable to create output file " + outputFile.getName(), e);
-    } finally {
-      if (fos != null) {
-        try {
-          fos.close();
-        } catch (IOException e) {
-          throw new JillException("Error closing output " + outputFile.getAbsolutePath(), e);
-        }
-      }
-    }
-  }
-
-  private void transform(@Nonnull ClassNode cn, @Nonnull OutputStream os) throws IOException {
-
-    JayceWriter writer = createWriter(os);
-
-    ClassNodeWriter asm2jayce =
-        new ClassNodeWriter(writer, new SourceInfoWriter(writer), options);
-
-    asm2jayce.write(cn);
-
-    writer.flush();
-  }
-
-  private void createParentDirectories(File outputFile) throws IOException {
-    File parentFile = outputFile.getParentFile();
-    if (!parentFile.exists() && !parentFile.mkdirs()) {
-      throw new IOException("Could not create directory \"" + parentFile.getName() + "\"");
-    }
-  }
-
-  private JayceWriter createWriter(@Nonnull OutputStream os) {
-    JayceWriter writer = new JayceWriter(os);
-    setJayceProperties();
-    return writer;
-  }
-
-  @Nonnull
-  private static String getFilePath(@Nonnull String typeBinaryName) {
-    return JAYCE_PREFIX_INTO_LIB + File.separatorChar
-        + typeBinaryName.replace(TYPE_NAME_SEPARATOR, File.separatorChar) + JAYCE_FILE_EXTENSION;
-  }
-
-  @Nonnull
-  private ClassNode getClassNode(@Nonnull InputStream is) throws IOException {
-    ClassReader cr = new ClassReader(is);
-    ClassNode cn = new ClassNode();
-    cr.accept(cn, ClassReader.SKIP_FRAMES
-        | (options.isEmitDebugInfo() ? 0 : ClassReader.SKIP_DEBUG));
-    return cn;
-  }
-
-  private void setJayceProperties() {
-    jackLibraryProperties.put(KEY_JAYCE, String.valueOf(true));
-    jackLibraryProperties.put(KEY_JAYCE_MAJOR_VERSION, JAYCE_MAJOR_VERSION);
-    jackLibraryProperties.put(KEY_JAYCE_MINOR_VERSION, JAYCE_MINOR_VERSION);
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/JillWriter.java b/jill/src/com/android/jill/frontend/java/JillWriter.java
deleted file mode 100644
index eeb500e..0000000
--- a/jill/src/com/android/jill/frontend/java/JillWriter.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import com.android.jill.JillException;
-import com.android.jill.backend.jayce.JayceWriter;
-import com.android.jill.backend.jayce.Token;
-
-import org.objectweb.asm.Type;
-
-import java.io.IOException;
-import java.lang.reflect.Array;
-
-import javax.annotation.Nonnull;
-
-/**
- * {@code JillWriter}s are helper class build around a Jayce writer to realize
- * Jayce file output.
- */
-public abstract class JillWriter {
-
-  @Nonnull
-  protected final JayceWriter writer;
-
-  @Nonnull
-  protected final SourceInfoWriter sourceInfoWriter;
-
-  public JillWriter(@Nonnull JayceWriter writer,
-      @Nonnull SourceInfoWriter sourceInfoWriter) {
-    this.writer = writer;
-    this.sourceInfoWriter = sourceInfoWriter;
-  }
-
-  protected void writeValue(Object value)  throws IOException{
-    if (value == null) {
-      writer.writeNull();
-    } else if (value instanceof Boolean) {
-      writeValue(((Boolean) value).booleanValue());
-    } else if (value instanceof Integer) {
-      writeValue(((Integer) value).intValue());
-    } else if (value instanceof Long){
-      writeValue(((Long) value).longValue());
-    } else if (value instanceof Float) {
-      writeValue(((Float) value).floatValue());
-    } else if (value instanceof Double) {
-      writeValue(((Double) value).doubleValue());
-    } else if (value instanceof String) {
-      writeValue((String) value);
-    } else if (value instanceof Type) {
-      writeValue((Type) value);
-    } else {
-      throw new JillException("Unsupported object value.");
-    }
-  }
-
-  protected void writeValue(@Nonnull String value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.STRING_LITERAL);
-    writer.writeOpen();
-    writer.writeString(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(boolean value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.BOOLEAN_LITERAL);
-    writer.writeOpen();
-    writer.writeBoolean(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(byte value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.BYTE_LITERAL);
-    writer.writeOpen();
-    writer.writeByte(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(char value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.CHAR_LITERAL);
-    writer.writeOpen();
-    writer.writeChar(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(short value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.SHORT_LITERAL);
-    writer.writeOpen();
-    writer.writeShort(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(int value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.INT_LITERAL);
-    writer.writeOpen();
-    writer.writeInt(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(float value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.FLOAT_LITERAL);
-    writer.writeOpen();
-    writer.writeFloat(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(double value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.DOUBLE_LITERAL);
-    writer.writeOpen();
-    writer.writeDouble(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(long value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.LONG_LITERAL);
-    writer.writeOpen();
-    writer.writeLong(value);
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue() throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.NULL_LITERAL);
-    writer.writeOpen();
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(@Nonnull Type value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.CLASS_LITERAL);
-    writer.writeOpen();
-    writer.writeId(value.getDescriptor());
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  protected void writeValue(@Nonnull Object[] value) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.ARRAY_LITERAL);
-    writer.writeOpen();
-    writer.writeOpenNodeList();
-    for (int j = 0; j < value.length; ++j) {
-      writeValue(value[j]);
-    }
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  @Nonnull
-  protected Object[] convertPrimitiveArrayToObject(@Nonnull Object array) {
-    assert array.getClass().isArray();
-    assert array.getClass().getComponentType().isPrimitive();
-
-    int length = Array.getLength(array);
-    Object objectArray[] = new Object[length];
-
-    for (int i = 0; i < length; i++) {
-      objectArray[i] = Array.get(array, i);
-    }
-
-    return objectArray;
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
deleted file mode 100644
index 0788f1d..0000000
--- a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
+++ /dev/null
@@ -1,2516 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import com.android.jill.JillException;
-import com.android.jill.Options;
-import com.android.jill.backend.jayce.JayceWriter;
-import com.android.jill.backend.jayce.Token;
-import com.android.jill.frontend.java.analyzer.JillAnalyzer;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.JSRInlinerAdapter;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.FrameNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.InsnNode;
-import org.objectweb.asm.tree.IntInsnNode;
-import org.objectweb.asm.tree.JumpInsnNode;
-import org.objectweb.asm.tree.LabelNode;
-import org.objectweb.asm.tree.LdcInsnNode;
-import org.objectweb.asm.tree.LineNumberNode;
-import org.objectweb.asm.tree.LocalVariableNode;
-import org.objectweb.asm.tree.LookupSwitchInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.MultiANewArrayInsnNode;
-import org.objectweb.asm.tree.TableSwitchInsnNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-import org.objectweb.asm.tree.TypeInsnNode;
-import org.objectweb.asm.tree.VarInsnNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.AnalyzerException;
-import org.objectweb.asm.tree.analysis.BasicInterpreter;
-import org.objectweb.asm.tree.analysis.BasicValue;
-import org.objectweb.asm.tree.analysis.Frame;
-import org.objectweb.asm.util.Printer;
-import org.objectweb.asm.util.Textifier;
-import org.objectweb.asm.util.TraceMethodVisitor;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Method body writer.
- */
-public class MethodBodyWriter extends JillWriter implements Opcodes {
-
-  @Nonnull
-  private final Map<String, Variable> nameToVar = new HashMap<String, Variable>();
-
-  @Nonnull
-  private final Map<Variable, Variable> parameter2Var = new LinkedHashMap<Variable, Variable>();
-
-  public static final int CONSTRUCTOR  = 0x10000;
-
-  /**
-   * Kinds of method call dispatch.
-   */
-  public enum DispatchKind {
-    VIRTUAL,
-    DIRECT
-  }
-
-  /**
-   * Kinds of method.
-   */
-  public enum MethodKind {
-    STATIC,
-    INSTANCE_NON_VIRTUAL,
-    INSTANCE_VIRTUAL
-  }
-
-  /**
-   * Kinds of method call receiver.
-   */
-  public enum MethodCallReceiverKind {
-    CLASS,
-    INTERFACE
-  }
-
-  /**
-   * kinds of field reference.
-   */
-  public enum FieldRefKind {
-    INSTANCE,
-    STATIC;
-  }
-
-  private static class Case {
-    @Nonnull
-    LabelNode labelNode;
-    @CheckForNull
-    Integer key;
-    @Nonnull
-    String caseId;
-
-    public Case(
-        @Nonnull LabelNode labelNode, @Nonnegative int switchIdx, @CheckForNull Integer key) {
-      this.labelNode = labelNode;
-      this.key = key;
-      caseId = switchIdx + "_" + (this.key != null ? this.key : "default");
-    }
-  }
-
-  private static class CmpOperands{
-    @Nonnegative
-    int opcode;
-    @Nonnull
-    Variable lhs;
-    @Nonnull
-    Variable rhs;
-
-    public CmpOperands(@Nonnegative int opcode, @Nonnull Variable lhs, @Nonnull Variable rhs) {
-      this.opcode = opcode;
-      this.lhs = lhs;
-      this.rhs = rhs;
-    }
-  }
-
-  @Nonnull
-  private final HashMap<Variable, CmpOperands> cmpOperands =
-      new HashMap<Variable, MethodBodyWriter.CmpOperands>();
-
-  @Nonnull
-  private final AnnotationWriter annotWriter;
-
-  @Nonnegative
-  private static final int NO_MODIFIER = 0;
-
-  private static final int TOP_OF_STACK = -1;
-
-  @Nonnull
-  private final Set<String> currentCatchList = new HashSet<String>();
-
-  @Nonnegative
-  private int currentLine = 0;
-
-  @Nonnull
-  private final ClassNode currentClass;
-
-  @Nonnull
-  private final MethodNode currentMethod;
-
-  @Nonnull
-  private final Analyzer<BasicValue> analyzer;
-
-  @Nonnegative
-  private int unusedVarCount = 0;
-
-  @Nonnegative
-  private int currentPc = 0;
-
-  private int startLine = -1;
-  private int endLine = -1;
-
-  @Nonnull
-  private final Options options;
-
-  @Nonnull
-  private final Map<TryCatchBlockNode, Variable> catchBlockToCatchedVariable =
-    new HashMap<TryCatchBlockNode, Variable>();
-
-  public MethodBodyWriter(@Nonnull JayceWriter writer,
-      @Nonnull AnnotationWriter annotWriter,
-      @Nonnull ClassNode cn, @Nonnull MethodNode mn,
-      @Nonnull SourceInfoWriter sourceInfoWriter,
-      @Nonnull Options options) {
-    super(writer, sourceInfoWriter);
-    this.annotWriter = annotWriter;
-    this.options = options;
-    currentClass = cn;
-    BasicInterpreter bi = new JillAnalyzer();
-    analyzer = new Analyzer<BasicValue>(bi);
-
-    if (mn.instructions.size() != 0) {
-      currentMethod = getMethodWithoutJSR(mn);
-
-      try {
-        analyzer.analyze(currentClass.name, currentMethod);
-
-        removeDeadCode();
-
-        analyzer.analyze(currentClass.name, currentMethod);
-      } catch (AnalyzerException e) {
-        throw new JillException("Variable analyser fails.", e);
-      }
-    } else {
-      currentMethod = mn;
-    }
-  }
-
-  public void write() throws IOException {
-    if (AsmHelper.isAnnotation(currentClass)) {
-      writeAnnotationMethod();
-    } else if (AsmHelper.isConstructor(currentMethod)) {
-      writeConstructor();
-    } else {
-      writeMethod();
-    }
-  }
-
-  private void writeConstructor() throws IOException {
-    computeStartAndEndLine();
-    sourceInfoWriter.writeDebugBegin(currentClass, startLine);
-    writer.writeKeyword(Token.CONSTRUCTOR);
-    writer.writeOpen();
-    writeParameters();
-    writer.writeInt(AsmHelper.getModifiers(currentMethod));
-    annotWriter.writeAnnotations(currentMethod);
-    writeMethodBody();
-    writer.writeOpenNodeList(); // Markers
-    writeOriginalTypeInfoMarker();
-    writeThrownExceptionMarker();
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, endLine);
-    writer.writeClose();
-  }
-
-  private void writeMethod() throws IOException {
-    computeStartAndEndLine();
-    sourceInfoWriter.writeDebugBegin(currentClass, startLine);
-    writer.writeKeyword(Token.METHOD);
-    writer.writeOpen();
-    writer.writeString(currentMethod.name);
-    writer.writeId(Type.getReturnType(currentMethod.desc).getDescriptor());
-    writeParameters();
-
-    MethodKind methodKind;
-    if (AsmHelper.isStatic(currentMethod)) {
-      methodKind = MethodKind.STATIC;
-    } else if (AsmHelper.isConstructor(currentMethod) || AsmHelper.isPrivate(currentMethod)) {
-      methodKind = MethodKind.INSTANCE_NON_VIRTUAL;
-    } else {
-      methodKind = MethodKind.INSTANCE_VIRTUAL;
-    }
-    writer.writeMethodKindEnum(methodKind);
-
-    writer.writeInt(AsmHelper.isStaticInit(currentMethod) ? AsmHelper.getModifiers(currentMethod)
-        | CONSTRUCTOR : AsmHelper.getModifiers(currentMethod));
-    annotWriter.writeAnnotations(currentMethod);
-    writeMethodBody();
-    writer.writeOpenNodeList(); // Markers
-    writeOriginalTypeInfoMarker();
-    writeThrownExceptionMarker();
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, endLine);
-    writer.writeClose();
-  }
-
-  private void writeAnnotationMethod() throws IOException {
-    computeStartAndEndLine();
-    sourceInfoWriter.writeDebugBegin(currentClass, startLine);
-    writer.writeKeyword(Token.ANNOTATION_METHOD);
-    writer.writeOpen();
-    writer.writeString(currentMethod.name);
-    writer.writeId(Type.getReturnType(currentMethod.desc).getDescriptor());
-    writer.writeInt(AsmHelper.getModifiers(currentMethod));
-    annotWriter.writeAnnotations(currentMethod);
-    if (currentMethod.annotationDefault != null) {
-      annotWriter.writeValue(currentMethod.annotationDefault);
-    } else {
-      writer.writeNull();
-    }
-    writer.writeOpenNodeList(); // Markers
-    writeOriginalTypeInfoMarker();
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, endLine);
-    writer.writeClose();
-  }
-
-  private void writeOriginalTypeInfoMarker() throws IOException {
-    if (currentMethod.signature != null) {
-      writer.writeKeyword(Token.GENERIC_SIGNATURE);
-      writer.writeOpen();
-      writer.writeString(currentMethod.signature);
-      writer.writeClose();
-    } else {
-      writer.writeNull();
-    }
-  }
-
-  private void writeThrownExceptionMarker() throws IOException {
-    if (currentMethod.exceptions != null && !currentMethod.exceptions.isEmpty()) {
-      writer.writeKeyword(Token.THROWN_EXCEPTION);
-      writer.writeOpen();
-      writer.writeIds(AsmHelper.getDescriptorsFromInternalNames(currentMethod.exceptions));
-      writer.writeClose();
-    }
-  }
-
-  @Nonnull
-  private MethodNode getMethodWithoutJSR(@Nonnull MethodNode mn) {
-    JSRInlinerAdapter jsrInliner =
-        new JSRInlinerAdapter(null, mn.access, mn.name, mn.desc, mn.signature,
-            mn.exceptions.toArray(new String[mn.exceptions.size()]));
-
-    mn.accept(jsrInliner);
-
-    return jsrInliner;
-  }
-
-  private void writeMethodBody() throws IOException {
-    currentCatchList.clear();
-    writer.clearCatchBlockIds();
-
-    if (AsmHelper.isNative(currentMethod)) {
-      writeNativeMethodBody();
-    } else if (AsmHelper.isAbstract(currentMethod)) {
-      writer.writeNull();
-    } else {
-      createCaughtVariables();
-      currentLine = startLine;
-      writeJavaMethodBody();
-    }
-
-    assert writer.isCurrentCatchBlockListEmpty();
-  }
-
-  private void computeStartAndEndLine() {
-    for (AbstractInsnNode insn : currentMethod.instructions.toArray()) {
-      if (insn instanceof LineNumberNode) {
-        LineNumberNode lnn = (LineNumberNode) insn;
-
-        if (startLine == -1) {
-          startLine = lnn.line;
-          endLine = lnn.line + 1;
-          continue;
-        }
-
-        if (lnn.line < startLine) {
-          startLine = lnn.line;
-        } else if (lnn.line > endLine) {
-          endLine = lnn.line;
-        }
-      }
-    }
-  }
-
-  private void createCaughtVariables() {
-    for (TryCatchBlockNode tryCatchNode : currentMethod.tryCatchBlocks) {
-      Variable declaringCatchVariable = null;
-      Type caughtType;
-      if (tryCatchNode.type == null) {
-        // Jack represents finally by a catch on java.lang.Object.
-        caughtType = Type.getType(Object.class);
-      } else {
-        // If there are multi catches, it is not possible to compute precisely the common type of
-        // exceptions without having the full classpath and by loading all classes. Jill uses
-        // Throwable as common type even when a more precise type is known.
-        // This type will be cast with a reinterpret cast to the right type when it will be used.
-        caughtType = Type.getType(Throwable.class);
-      }
-      String id = "-e_" + (unusedVarCount++);
-      declaringCatchVariable = new Variable(id, id, caughtType, null);
-      catchBlockToCatchedVariable.put(tryCatchNode, declaringCatchVariable);
-    }
-  }
-
-  private void writeNativeMethodBody() throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.NATIVE_METHOD_BODY);
-    writer.writeOpen();
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  private void writeJavaMethodBody() throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, startLine);
-    writer.writeKeyword(Token.METHOD_BODY);
-    writer.writeOpen();
-    writeLocals();
-    writeBody();
-    sourceInfoWriter.writeDebugEnd(currentClass, endLine);
-    writer.writeClose();
-  }
-
-  private void writeBody() throws IOException {
-
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.BLOCK);
-    writer.writeOpen();
-    writer.writeOpenNodeList();
-
-    if (currentMethod.instructions.size() == 0) {
-      if (options.isTolerant()) {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.THROW_STATEMENT);
-        writer.writeOpen();
-        writer.writeKeyword(Token.NEW_INSTANCE);
-        writer.writeOpen();
-        // Type of created object
-        writer.writeId("Ljava/lang/AssertionError;");
-        // Empty argument types
-        writer.writeIds(Collections.<String>emptyList());
-        // No arguments
-        writer.writeOpenNodeList();
-        writer.writeCloseNodeList();
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-      } else {
-        throw new JillException("Method should have instructions.");
-      }
-    } else {
-      for (Map.Entry<Variable, Variable> entry : parameter2Var.entrySet()) {
-        Variable p = entry.getKey();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeLocalRef(entry.getValue());
-        if (p.getType() == Type.BOOLEAN_TYPE) {
-          writeCastOperation(Token.REINTERPRETCAST_OPERATION, p, Type.INT_TYPE.getDescriptor());
-        } else {
-          writeLocalRef(p);
-        }
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-      }
-
-      Frame<BasicValue>[] frames = analyzer.getFrames();
-
-      for (int insnIdx = 0; insnIdx < currentMethod.instructions.size(); insnIdx++) {
-        currentPc = insnIdx;
-        AbstractInsnNode insn = currentMethod.instructions.get(insnIdx);
-        Frame<BasicValue> currentFrame = frames[insnIdx];
-        // There's no next frame if insn is a return, and the last instruction.
-        Frame<BasicValue> nextFrame = (insnIdx < frames.length - 1) ? frames[insnIdx + 1] : null;
-
-        if (insn instanceof JumpInsnNode) {
-          writeInsn(currentFrame, (JumpInsnNode) insn, insnIdx);
-        } else if (insn instanceof LdcInsnNode) {
-          assert nextFrame != null;
-          writeInsn(nextFrame, (LdcInsnNode) insn);
-        } else if (insn instanceof InsnNode) {
-          writeInsn(currentFrame, nextFrame, (InsnNode) insn);
-        } else if (insn instanceof VarInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (VarInsnNode) insn);
-        } else if (insn instanceof LabelNode) {
-          computeCatchList((LabelNode) insn);
-          writeCatchBlock((LabelNode) insn, insnIdx, frames);
-          writeLabelInsn(insnIdx);
-        } else if (insn instanceof FieldInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (FieldInsnNode) insn);
-        } else if (insn instanceof MethodInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (MethodInsnNode) insn);
-        } else if (insn instanceof LineNumberNode) {
-          currentLine = ((LineNumberNode) insn).line;
-        } else if (insn instanceof FrameNode) {
-          // Nothing to do.
-        } else if (insn instanceof TypeInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (TypeInsnNode) insn);
-        } else if (insn instanceof TableSwitchInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (TableSwitchInsnNode) insn, insnIdx);
-        } else if (insn instanceof LookupSwitchInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (LookupSwitchInsnNode) insn, insnIdx);
-        } else if (insn instanceof IntInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (IntInsnNode) insn);
-        } else if (insn instanceof IincInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (IincInsnNode) insn);
-        } else if (insn instanceof MultiANewArrayInsnNode) {
-          assert nextFrame != null;
-          writeInsn(currentFrame, nextFrame, (MultiANewArrayInsnNode) insn);
-        } else {
-          throw new JillException("Unsupported instruction.");
-        }
-      }
-
-      // Current solution for comparison requires its result to be consumed by an "if"
-      if (!cmpOperands.isEmpty()) {
-        throw new AssertionError("A comparison has not been followed by an if");
-      }
-    }
-
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeCatchBlock(@Nonnull LabelNode labelNode, @Nonnegative int labelIdx,
-      @Nonnull Frame<BasicValue>[] frames) throws IOException {
-    for (TryCatchBlockNode tryCatchNode : currentMethod.tryCatchBlocks) {
-      if (tryCatchNode.handler == labelNode) {
-        // Always create a variable that will be typed with catched exception. Reuse computed
-        // variable is not possible since type could be lost due to merging.
-        Variable declaringCatchVariable = catchBlockToCatchedVariable.get(tryCatchNode);
-
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.CATCH_BLOCK);
-        writer.writeOpen();
-        writer.writeId(getCatchId(tryCatchNode.handler));
-
-        // Take into account multi catches by computing the list of caught types for this handler
-        List<String> ids = new ArrayList<String>();
-        if (tryCatchNode.type == null) {
-          // Jack represents finally by a catch on java.lang.Object.
-          ids.add(Type.getType(Object.class).getDescriptor());
-        } else {
-          ids.add(Type.getObjectType(tryCatchNode.type).getDescriptor());
-          for (TryCatchBlockNode tryCatchNode2 : currentMethod.tryCatchBlocks) {
-            if (labelNode == tryCatchNode2.handler && tryCatchNode != tryCatchNode2
-                && !tryCatchNode.type.equals(tryCatchNode2.type)) {
-              ids.add(Type.getObjectType(tryCatchNode2.type).getDescriptor());
-            }
-          }
-        }
-        writer.writeIds(ids);
-
-        writeLocal(declaringCatchVariable);
-
-        writer.writeOpenNodeList();
-
-        if (frames[labelIdx] != null) {
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeCatchBlockIds(currentCatchList);
-          writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-          writer.writeOpen();
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(Token.ASG_OPERATION);
-          writer.writeOpen();
-          writeStackAccess(frames[labelIdx], TOP_OF_STACK);
-          writeLocalRef(declaringCatchVariable);
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-        }
-        writeGoto(tryCatchNode.handler);
-
-        writer.writeCloseNodeList();
-
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break; // Write catch block only one time even if the handler is used severals times.
-      }
-    }
-  }
-
-  private void computeCatchList(@Nonnull LabelNode labelNode) {
-    for (TryCatchBlockNode tryCatchNode : currentMethod.tryCatchBlocks) {
-      String id = getCatchId(tryCatchNode.handler);
-      if (tryCatchNode.start == labelNode) {
-        currentCatchList.add(id);
-      } else if (tryCatchNode.end == labelNode) {
-        currentCatchList.remove(id);
-      }
-    }
-  }
-
-  @Nonnull
-  private String getCatchId(@Nonnull LabelNode labelNode) {
-    int insnIndex = currentMethod.instructions.indexOf(labelNode);
-    return Integer.toString(insnIndex) + "-catch";
-  }
-
-  private void writeLabelInsn(@Nonnegative int insnIdx)
-        throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.LABELED_STATEMENT);
-    writer.writeOpen();
-    String id = Integer.toString(insnIdx);
-    writer.writeString(id);
-    writer.writeId(id);
-    writeEmptyBlock();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeEmptyBlock() throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.BLOCK);
-    writer.writeOpen();
-    writer.writeOpenNodeList();
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull IincInsnNode iincInsn) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeLocalAccess(nextFrame, iincInsn.var);
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ADD_OPERATION);
-    writer.writeOpen();
-    writeLocalAccess(frame, iincInsn.var);
-    writeValue(iincInsn.incr);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull IntInsnNode intInsn) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(nextFrame, TOP_OF_STACK);
-
-    switch (intInsn.getOpcode()) {
-      case BIPUSH: {
-        writeValue(intInsn.operand);
-        break;
-      }
-      case SIPUSH: {
-        writeValue(intInsn.operand);
-        break;
-      }
-      case NEWARRAY: {
-
-        switch (intInsn.operand) {
-          case T_BOOLEAN: {
-            writeNewArray(frame, "[Z", 1);
-            break;
-          }
-          case T_CHAR: {
-            writeNewArray(frame, "[C", 1);
-            break;
-          }
-          case T_FLOAT: {
-            writeNewArray(frame, "[F", 1);
-            break;
-          }
-          case T_DOUBLE: {
-            writeNewArray(frame, "[D", 1);
-            break;
-          }
-          case T_BYTE: {
-            writeNewArray(frame, "[B", 1);
-            break;
-          }
-          case T_SHORT: {
-            writeNewArray(frame, "[S", 1);
-            break;
-          }
-          case T_INT: {
-            writeNewArray(frame, "[I", 1);
-            break;
-          }
-          case T_LONG: {
-            writeNewArray(frame, "[J", 1);
-            break;
-          }
-          default: {
-            throw new JillException("Unsupported array type.");
-          }
-        }
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[intInsn.getOpcode()]);
-      }
-    }
-
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull MultiANewArrayInsnNode manaIns) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(nextFrame, TOP_OF_STACK);
-    writeNewArray(frame, manaIns.desc, manaIns.dims);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeNewArray(
-      @Nonnull Frame<BasicValue> frame, @Nonnull String typeDesc, @Nonnegative int dims)
-      throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.NEW_ARRAY);
-    writer.writeOpen();
-    writer.writeId(typeDesc);
-    writer.writeOpenNodeList();
-    for (int i = (dims - 1); i >= 0; i--) {
-      writeStackAccess(frame, TOP_OF_STACK - i);
-    }
-    writer.writeCloseNodeList();
-    writer.writeOpenNodeList(); // Empty initializers list.
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeArrayRef(@Nonnull Frame<BasicValue> frame, int startIdx,
-      @Nonnegative int opcode) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ARRAY_REF);
-    writer.writeOpen();
-    Type refType = frame.getStack(frame.getStackSize() + startIdx).getType();
-
-    // Ensure reference to array, or null. Null case can happen in this case:
-    // int a[] = null;
-    // return a[0] <- aload_0, iconst_0, iaload
-    assert refType.getSort() == Type.ARRAY || "null".equals(refType.getInternalName());
-
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
-    writer.writeOpen();
-    switch (opcode) {
-      case BALOAD:
-      case BASTORE: {
-        if (refType.getDescriptor().equals("[Z")) {
-          writer.writeId(Type.getType("[Z").getDescriptor());
-        } else {
-          writer.writeId(Type.getType("[B").getDescriptor());
-        }
-        break;
-      }
-      case CALOAD:
-      case CASTORE: {
-        writer.writeId(Type.getType("[C").getDescriptor());
-        break;
-      }
-      case SALOAD:
-      case SASTORE: {
-        writer.writeId(Type.getType("[S").getDescriptor());
-        break;
-      }
-      case IALOAD:
-      case IASTORE: {
-        writer.writeId(Type.getType("[I").getDescriptor());
-        break;
-      }
-      case LALOAD:
-      case LASTORE: {
-        writer.writeId(Type.getType("[J").getDescriptor());
-        break;
-      }
-      case FALOAD:
-      case FASTORE: {
-        writer.writeId(Type.getType("[F").getDescriptor());
-        break;
-      }
-      case DALOAD:
-      case DASTORE: {
-        writer.writeId(Type.getType("[D").getDescriptor());
-        break;
-      }
-      case AALOAD:
-      case AASTORE: {
-        writer.writeId(Type.getType("[Ljava/lang/Object;").getDescriptor());
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[opcode]);
-      }
-    }
-    writeStackAccess(frame, startIdx);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-
-    writeStackAccess(frame, startIdx + 1);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull LookupSwitchInsnNode switchInsn, @Nonnegative int idx) throws IOException {
-    List<String> cases = new ArrayList<String>();
-    List<Case> casesLabelNodeAndKey = new ArrayList<Case>();
-    Case defaultCase = new Case(switchInsn.dflt, idx, null);
-    casesLabelNodeAndKey.add(defaultCase);
-    cases.add(defaultCase.caseId);
-    int caseIdx = 0;
-    for (LabelNode labelNode : switchInsn.labels) {
-      Case c = new Case(labelNode, idx, switchInsn.keys.get(caseIdx++));
-      casesLabelNodeAndKey.add(c);
-      cases.add(c.caseId);
-    }
-    writeSwitch(frame, cases, casesLabelNodeAndKey);
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull TableSwitchInsnNode switchInsn, @Nonnegative int idx) throws IOException {
-    List<String> cases = new ArrayList<String>();
-    List<Case> casesLabelNodeAndKey = new ArrayList<Case>();
-    Case defaultCase = new Case(switchInsn.dflt, idx, null);
-    casesLabelNodeAndKey.add(defaultCase);
-    cases.add(defaultCase.caseId);
-    int key = switchInsn.min;
-    for (LabelNode labelNode : switchInsn.labels) {
-      Case c = new Case(labelNode, idx, Integer.valueOf(key++));
-      casesLabelNodeAndKey.add(c);
-      cases.add(c.caseId);
-    }
-    writeSwitch(frame, cases, casesLabelNodeAndKey);
-  }
-
-  private void writeSwitch(@Nonnull Frame<BasicValue> frame, @Nonnull List<String> cases,
-      @Nonnull List<Case> casesLabelNodeAndKey)
-      throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.SWITCH_STATEMENT);
-    writer.writeOpen();
-    writeStackAccess(frame, TOP_OF_STACK);
-    writer.writeIds(cases);
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.BLOCK);
-    writer.writeOpen();
-    writer.writeOpenNodeList();
-    for (Case c : casesLabelNodeAndKey) {
-      sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-      writer.writeCatchBlockIds(currentCatchList);
-      writer.writeKeyword(Token.CASE_STATEMENT);
-      writer.writeOpen();
-      writer.writeId(c.caseId);
-      writeValue(c.key);
-      sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-      writer.writeClose();
-      writeGoto(c.labelNode);
-    }
-    writer.writeCloseNodeList();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull TypeInsnNode typeInsn) throws IOException {
-
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(nextFrame, TOP_OF_STACK);
-
-    String descriptor = Type.getObjectType(typeInsn.desc).getDescriptor();
-
-    switch (typeInsn.getOpcode()) {
-      case NEW: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ALLOC);
-        writer.writeOpen();
-        writer.writeId(descriptor);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case ANEWARRAY: {
-        writeNewArray(frame, "[" + descriptor, 1);
-        break;
-      }
-      case INSTANCEOF: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
-        writer.writeOpen();
-        writer.writeId(Type.BOOLEAN_TYPE.getDescriptor());
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.INSTANCE_OF);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        writer.writeId(descriptor);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass,
-            currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case CHECKCAST: {
-        writeCastOperation(Token.DYNAMIC_CAST_OPERATION, frame, descriptor, TOP_OF_STACK);
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[typeInsn.getOpcode()]);
-      }
-    }
-
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull FieldInsnNode fldInsn) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-
-    switch (fldInsn.getOpcode()) {
-      case PUTFIELD: {
-        writeInstanceFieldRef(fldInsn, frame, TOP_OF_STACK - 1);
-        if (Type.getType(fldInsn.desc) == Type.BOOLEAN_TYPE) {
-          writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame,
-              Type.BOOLEAN_TYPE.getDescriptor(), TOP_OF_STACK);
-        } else {
-          writeStackAccess(frame, TOP_OF_STACK);
-        }
-        break;
-      }
-      case PUTSTATIC: {
-        writeStaticFieldRef(fldInsn);
-        if (Type.getType(fldInsn.desc) == Type.BOOLEAN_TYPE) {
-          writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame,
-              Type.BOOLEAN_TYPE.getDescriptor(), TOP_OF_STACK);
-        } else {
-          writeStackAccess(frame, TOP_OF_STACK);
-        }
-        break;
-      }
-      case GETFIELD: {
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        if (Type.getType(fldInsn.desc) == Type.BOOLEAN_TYPE) {
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
-          writer.writeOpen();
-          writer.writeId(Type.INT_TYPE.getDescriptor());
-          writeInstanceFieldRef(fldInsn, frame, TOP_OF_STACK);
-          sourceInfoWriter.writeDebugEnd(currentClass,
-              currentLine + 1);
-          writer.writeClose();
-        } else {
-          writeInstanceFieldRef(fldInsn, frame, TOP_OF_STACK);
-        }
-        break;
-      }
-      case GETSTATIC: {
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        if (Type.getType(fldInsn.desc) == Type.BOOLEAN_TYPE) {
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
-          writer.writeOpen();
-          writer.writeId(Type.INT_TYPE.getDescriptor());
-          writeStaticFieldRef(fldInsn);
-          sourceInfoWriter.writeDebugEnd(currentClass,
-              currentLine + 1);
-          writer.writeClose();
-        } else {
-          writeStaticFieldRef(fldInsn);
-        }
-        break;
-      }
-      default:
-        throw new JillException("Not yet supported " + Printer.OPCODES[fldInsn.getOpcode()]);
-    }
-
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull MethodInsnNode mthInsn) throws IOException {
-    switch (mthInsn.getOpcode()) {
-      case INVOKEINTERFACE:
-      case INVOKESTATIC:
-      case INVOKEVIRTUAL:
-      case INVOKESPECIAL: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-
-        Type returnType = Type.getReturnType(mthInsn.desc);
-        if (returnType != Type.VOID_TYPE) {
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(Token.ASG_OPERATION);
-          writer.writeOpen();
-          writeStackAccess(nextFrame, TOP_OF_STACK);
-          if (returnType == Type.BOOLEAN_TYPE) {
-            sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-            writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
-            writer.writeOpen();
-            writer.writeId(Type.INT_TYPE.getDescriptor());
-          }
-        }
-
-        DispatchKind dispatchKind;
-        MethodKind methodKind;
-        MethodCallReceiverKind receiverKind;
-        switch (mthInsn.getOpcode()) {
-          case INVOKEINTERFACE: {
-            dispatchKind = DispatchKind.VIRTUAL;
-            methodKind = MethodKind.INSTANCE_VIRTUAL;
-            receiverKind = MethodCallReceiverKind.INTERFACE;
-            break;
-          }
-          case INVOKESTATIC: {
-            dispatchKind = DispatchKind.DIRECT;
-            methodKind = MethodKind.STATIC;
-            receiverKind = MethodCallReceiverKind.CLASS;
-            break;
-          }
-          case INVOKEVIRTUAL: {
-            dispatchKind = DispatchKind.VIRTUAL;
-            methodKind = MethodKind.INSTANCE_VIRTUAL;
-            receiverKind = MethodCallReceiverKind.CLASS;
-            break;
-          }
-          case INVOKESPECIAL: {
-            if (mthInsn.owner.equals(currentClass.name) || mthInsn.name.equals("<init>")) {
-              dispatchKind = DispatchKind.DIRECT;
-              methodKind = MethodKind.INSTANCE_NON_VIRTUAL;
-              receiverKind = MethodCallReceiverKind.CLASS;
-            } else {
-              dispatchKind = DispatchKind.DIRECT;
-              methodKind = MethodKind.INSTANCE_VIRTUAL;
-              receiverKind = MethodCallReceiverKind.CLASS;
-            }
-            break;
-          }
-          default: {
-            throw new JillException("Opcode not supported " + Printer.OPCODES[mthInsn.getOpcode()]);
-          }
-        }
-
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.METHOD_CALL);
-        writer.writeOpen();
-        Type receiverType = Type.getObjectType(mthInsn.owner);
-        int stackArgIndex = Type.getArgumentTypes(mthInsn.desc).length;
-
-        if (mthInsn.getOpcode() == INVOKESTATIC) {
-          writer.writeNull(); // Instance
-        } else {
-          // Add implicit argument 'this'
-          stackArgIndex++;
-          // Cast instance to receiver type
-          if (receiverType.equals(frame.getStack(frame.getStackSize() - stackArgIndex).getType())
-              || mthInsn.name.equals("<init>")) {
-            // It is not possible to add cast on object before call to init
-            writeStackAccess(frame, -stackArgIndex);
-          } else {
-            writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, receiverType.getDescriptor(),
-                -stackArgIndex);
-          }
-          stackArgIndex--;
-        }
-
-        if (receiverType.getSort() == Type.ARRAY) {
-          // Currently Jack file does not support that array types are used as a receiver or
-          // declaring type into a method call.
-          receiverType = Type.getType(Object.class);
-        }
-        writer.writeId(receiverType.getDescriptor()); // Receiver type
-        writer.writeReceiverKindEnum(receiverKind);
-
-        writer.writeId(mthInsn.name);
-        Type[] argumentTypes = Type.getArgumentTypes(mthInsn.desc);
-        List<String> argsTypeIds = new ArrayList<String>(argumentTypes.length);
-        for (Type argType : argumentTypes) {
-          argsTypeIds.add(argType.getDescriptor());
-        }
-        writer.writeIds(argsTypeIds);
-        writer.writeMethodKindEnum(methodKind);
-
-        writer.writeId(returnType.getDescriptor());
-        int argIdx = 0;
-        writer.writeOpenNodeList();
-        while (stackArgIndex > 0) {
-          Type argType = argumentTypes[argIdx++];
-          if (argType.getSort() == Type.OBJECT || argType.getSort() == Type.ARRAY
-              || argType.getSort() == Type.BYTE || argType.getSort() == Type.CHAR
-              || argType.getSort() == Type.SHORT || argType.getSort() == Type.BOOLEAN) {
-            writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, argType.getDescriptor(),
-                -stackArgIndex);
-          } else {
-            writeStackAccess(frame, -stackArgIndex);
-          }
-          stackArgIndex--;
-        }
-        writer.writeCloseNodeList();
-        writer.writeDispatchKindEnum(dispatchKind);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-
-        if (returnType != Type.VOID_TYPE) {
-          if (returnType == Type.BOOLEAN_TYPE) {
-            sourceInfoWriter.writeDebugEnd(currentClass,
-                currentLine + 1);
-            writer.writeClose();
-          }
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-        }
-
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[mthInsn.getOpcode()]);
-      }
-    }
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
-      @Nonnull VarInsnNode varInsn) throws IOException {
-    switch (varInsn.getOpcode()) {
-      case FLOAD:
-      case DLOAD:
-      case LLOAD:
-      case ILOAD:
-      case ALOAD: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        if (getLocalVariable(frame, varInsn.var).getType() == Type.BOOLEAN_TYPE) {
-          writeCastOperation(Token.REINTERPRETCAST_OPERATION, getLocalVariable(frame, varInsn.var),
-              Type.INT_TYPE.getDescriptor());
-        } else {
-          writeLocalAccess(frame, varInsn.var);
-        }
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case FSTORE:
-      case DSTORE:
-      case LSTORE:
-      case ISTORE:
-      case ASTORE: {
-        // Uninitialize variable means dead store. Do not generate them.
-        if (nextFrame.getLocal(varInsn.var) != BasicValue.UNINITIALIZED_VALUE) {
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeCatchBlockIds(currentCatchList);
-          writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-          writer.writeOpen();
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(Token.ASG_OPERATION);
-          writer.writeOpen();
-          writeLocalAccess(nextFrame, varInsn.var);
-          Type destType = getLocalVariable(nextFrame, varInsn.var).getType();
-          if (destType == Type.BOOLEAN_TYPE) {
-            writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame,
-                Type.BOOLEAN_TYPE.getDescriptor(), TOP_OF_STACK);
-          } else if (getStackVariable(frame, TOP_OF_STACK).getType() != destType) {
-            writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, destType.getDescriptor(),
-                TOP_OF_STACK);
-          } else {
-            writeStackAccess(frame, TOP_OF_STACK);
-          }
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-        }
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[varInsn.getOpcode()]);
-      }
-    }
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> frame,
-      @CheckForNull Frame<BasicValue> nextFrame, @Nonnull InsnNode insn) throws IOException {
-    switch (insn.getOpcode()) {
-      case ICONST_M1:
-      case ICONST_0:
-      case ICONST_1:
-      case ICONST_2:
-      case ICONST_3:
-      case ICONST_4:
-      case ICONST_5: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        writeValue(insn.getOpcode() - ICONST_0);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case ACONST_NULL: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        writeValue();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case LCONST_0:
-      case LCONST_1: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        writeValue((long) (insn.getOpcode() - LCONST_0));
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case FCONST_0:
-      case FCONST_1:
-      case FCONST_2: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        writeValue((float) (insn.getOpcode() - FCONST_0));
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case DCONST_0:
-      case DCONST_1: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        writeValue((double) (insn.getOpcode() - DCONST_0));
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case D2L:
-      case F2L:
-      case I2L: {
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(long.class, frame, nextFrame);
-        break;
-      }
-      case D2F:
-      case I2F:
-      case L2F:{
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(float.class, frame, nextFrame);
-        break;
-      }
-      case F2D:
-      case I2D:
-      case L2D: {
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(double.class, frame, nextFrame);
-        break;
-      }
-      case D2I:
-      case F2I:
-      case L2I: {
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(int.class, frame, nextFrame);
-        break;
-      }
-      case I2B: {
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(byte.class, frame, nextFrame);
-        break;
-      }
-      case I2C: {
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(char.class, frame, nextFrame);
-        break;
-      }
-      case I2S: {
-        assert nextFrame != null;
-        writePrimitiveTypeConversion(short.class, frame, nextFrame);
-        break;
-      }
-      case DRETURN:
-      case LRETURN:
-      case FRETURN: {
-        writeReturn(frame, TOP_OF_STACK);
-        break;
-      }
-      case ARETURN:
-      case IRETURN: {
-        Type returnType = Type.getReturnType(currentMethod.desc);
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.RETURN_STATEMENT);
-        writer.writeOpen();
-        writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, returnType.getDescriptor(),
-            TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case RETURN: {
-        writeReturn(frame, 0);
-        break;
-      }
-      case DADD:
-      case FADD:
-      case IADD:
-      case LADD: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.ADD_OPERATION, frame, nextFrame);
-        break;
-      }
-      case LCMP:
-      case FCMPL:
-      case FCMPG:
-      case DCMPL:
-      case DCMPG: {
-        assert nextFrame != null;
-        Variable lhs = getStackVariable(frame, TOP_OF_STACK - 1);
-        Variable rhs = getStackVariable(frame, TOP_OF_STACK);
-        Variable result = getStackVariable(nextFrame, TOP_OF_STACK);
-        cmpOperands.put(result, new CmpOperands(insn.getOpcode(), lhs, rhs));
-        break;
-      }
-      case DSUB:
-      case FSUB:
-      case ISUB:
-      case LSUB: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.SUB_OPERATION, frame, nextFrame);
-        break;
-      }
-      case DMUL:
-      case FMUL:
-      case IMUL:
-      case LMUL: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.MUL_OPERATION, frame, nextFrame);
-        break;
-      }
-      case DDIV:
-      case FDIV:
-      case IDIV:
-      case LDIV: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.DIV_OPERATION, frame, nextFrame);
-        break;
-      }
-      case DREM:
-      case FREM:
-      case IREM:
-      case LREM: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.MOD_OPERATION, frame, nextFrame);
-        break;
-      }
-      case DNEG:
-      case FNEG:
-      case INEG:
-      case LNEG: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.PREFIX_NEG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case ISHL:
-      case LSHL: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.SHL_OPERATION, frame, nextFrame);
-        break;
-      }
-      case ISHR:
-      case LSHR: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.SHR_OPERATION, frame, nextFrame);
-        break;
-      }
-      case IUSHR:
-      case LUSHR: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.SHRU_OPERATION, frame, nextFrame);
-        break;
-      }
-      case IAND:
-      case LAND: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.BIT_AND_OPERATION, frame, nextFrame);
-        break;
-      }
-      case IOR:
-      case LOR: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.BIT_OR_OPERATION, frame, nextFrame);
-        break;
-      }
-      case IXOR:
-      case LXOR: {
-        assert nextFrame != null;
-        writeBinaryOperation(Token.BIT_XOR_OPERATION, frame, nextFrame);
-        break;
-      }
-      case ARRAYLENGTH: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ARRAY_LENGTH);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-
-      case IALOAD:
-      case LALOAD:
-      case FALOAD:
-      case DALOAD:
-      case AALOAD:
-      case BALOAD:
-      case CALOAD:
-      case SALOAD: {
-        assert nextFrame != null;
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(nextFrame, TOP_OF_STACK);
-        writeArrayRef(frame, TOP_OF_STACK - 1, insn.getOpcode());
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case IASTORE:
-      case LASTORE:
-      case FASTORE:
-      case DASTORE:
-      case AASTORE:
-      case BASTORE:
-      case CASTORE:
-      case SASTORE: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeArrayRef(frame, TOP_OF_STACK - 2, insn.getOpcode());
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case MONITORENTER: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.LOCK);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case MONITOREXIT: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.UNLOCK);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case SWAP: {
-        // frame and nextFrame have the same height, thus frame can always be used to compute stack
-        // variables.
-        Variable tmpVar = getTempVarFromTopOfStack(frame);
-
-        // tmpVar = frame.stack[frame.stack.size() + TOP_OF_STACK - 1]
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeLocalRef(tmpVar);
-        writeStackAccess(frame, TOP_OF_STACK - 1);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-
-        // frame.stack[frame.stack.size() + TOP_OF_STACK - 1] =
-        // frame.stack[frame.stack.size() + TOP_OF_STACK]
-        writeAssign(frame, TOP_OF_STACK, frame, TOP_OF_STACK - 1);
-
-        // frame.stack[frame.stack.size() + TOP_OF_STACK] = tmpVar
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-        writer.writeOpen();
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(Token.ASG_OPERATION);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        writeLocalRef(tmpVar);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case DUP: {
-        assert nextFrame != null;
-        writeDup(frame, nextFrame);
-        break;
-      }
-      case DUP2: {
-        assert nextFrame != null;
-        if (frame.getStack(frame.getStackSize() + TOP_OF_STACK).getSize() == 1) {
-          assert frame.getStack(frame.getStackSize() + TOP_OF_STACK - 1).getSize() == 1;
-          writeDup2(frame, nextFrame);
-        } else {
-          writeDup(frame, nextFrame);
-        }
-        break;
-      }
-      case DUP_X1: {
-        assert nextFrame != null;
-        assert frame.getStack(frame.getStackSize() + TOP_OF_STACK).getSize() == 1;
-        assert frame.getStack(frame.getStackSize() + TOP_OF_STACK - 1).getSize() == 1;
-        writeDupX1(frame, nextFrame);
-        break;
-      }
-      case DUP_X2: {
-        assert nextFrame != null;
-        Variable value1 = getStackVariable(frame, TOP_OF_STACK);
-        Variable value2 = getStackVariable(frame, TOP_OF_STACK - 1);
-        assert value1.getType().getSize() == 1;
-        if (value2.getType().getSize() == 1) {
-          Variable value3 = getStackVariable(frame, TOP_OF_STACK - 2);
-          assert value3.getType().getSize() == 1;
-          writeDupX2(frame, nextFrame);
-        } else {
-          writeDupX1(frame, nextFrame);
-        }
-        break;
-      }
-      case DUP2_X1: {
-        assert nextFrame != null;
-        Variable value1 = getStackVariable(frame, TOP_OF_STACK);
-        Variable value2 = getStackVariable(frame, TOP_OF_STACK - 1);
-        assert value2.getType().getSize() == 1;
-        if (value1.getType().getSize() == 1) {
-          Variable value3 = getStackVariable(frame, TOP_OF_STACK - 2);
-          assert value3.getType().getSize() == 1;
-          writeDup2X1(frame, nextFrame);
-        } else {
-          writeDupX1(frame, nextFrame);
-        }
-        break;
-      }
-      case DUP2_X2: {
-        assert nextFrame != null;
-        Variable value1 = getStackVariable(frame, TOP_OF_STACK);
-        Variable value2 = getStackVariable(frame, TOP_OF_STACK - 1);
-        if (value1.getType().getSize() == 1) {
-          Variable value3 = getStackVariable(frame, TOP_OF_STACK - 2);
-          if (value3.getType().getSize() == 1) {
-            Variable value4 = getStackVariable(frame, TOP_OF_STACK - 3);
-            assert value4.getType().getSize() == 1;
-            writeDup2X2(frame, nextFrame);
-          } else {
-            writeDup2X1(frame, nextFrame);
-          }
-        } else {
-          if (value2.getType().getSize() == 1) {
-            Variable value3 = getStackVariable(frame, TOP_OF_STACK - 2);
-            assert value3.getType().getSize() == 1;
-            writeDupX2(frame, nextFrame);
-          } else  {
-            writeDupX1(frame, nextFrame);
-          }
-        }
-        break;
-      }
-      case NOP:
-      case POP:
-      case POP2:{
-        break;
-      }
-      case ATHROW: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.THROW_STATEMENT);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[insn.getOpcode()]);
-      }
-    }
-  }
-
-  private void writeInsn(@Nonnull Frame<BasicValue> nextFrame, @Nonnull LdcInsnNode ldcInsn)
-      throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(nextFrame, TOP_OF_STACK);
-    writeValue(ldcInsn.cst);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeInsn(
-      @Nonnull Frame<BasicValue> frame, @Nonnull JumpInsnNode jumpInsn, @Nonnegative int insIndex)
-      throws IOException {
-    switch (jumpInsn.getOpcode()) {
-      case IFNONNULL:
-      case IFNULL:
-      case IFEQ:
-      case IFGE:
-      case IFGT:
-      case IFLE:
-      case IFLT:
-      case IFNE: {
-        Variable topOfStackVariable = getStackVariable(frame, TOP_OF_STACK);
-        CmpOperands cmpOps = cmpOperands.get(topOfStackVariable);
-        if (cmpOps != null) {
-          // CmpOperands concerns double, float and long types
-          assert jumpInsn.getOpcode() != IFNONNULL && jumpInsn.getOpcode() != IFNULL;
-          // Not operator can be generate only for double and long types to manage comparisons with
-          // Nan.
-          Token comparisonToken = getConditionToken(jumpInsn.getOpcode());
-          boolean needNotoperator = needNotOperator(comparisonToken, cmpOps);
-
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeCatchBlockIds(currentCatchList);
-          writer.writeKeyword(Token.IF_STATEMENT);
-          writer.writeOpen();
-          if (needNotoperator) {
-            sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-            writer.writeKeyword(Token.PREFIX_NOT_OPERATION);
-            writer.writeOpen();
-          } else {
-            // Condition is inverted to be compliant with language level semantics
-            // This has been done for comparison to NaN, which forces the branching order.
-            comparisonToken = invertComparisonToken(comparisonToken);
-          }
-
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(comparisonToken);
-          writer.writeOpen();
-          writeLocalRef(cmpOps.lhs);
-          writeLocalRef(cmpOps.rhs);
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-
-          if (needNotoperator) {
-            sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-            writer.writeClose();
-          }
-
-          int labeledStatmentIndex = insIndex + 1;
-          writeGoto(labeledStatmentIndex);
-          writeGoto(jumpInsn.label);
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-
-          insertLabeledStatementIfNecessary(labeledStatmentIndex);
-
-          cmpOperands.remove(topOfStackVariable);
-        } else {
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeCatchBlockIds(currentCatchList);
-          writer.writeKeyword(Token.IF_STATEMENT);
-          writer.writeOpen();
-          Token conditionalToken = getConditionToken(jumpInsn.getOpcode());
-          sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-          writer.writeKeyword(conditionalToken);
-          writer.writeOpen();
-          writeStackAccess(frame, TOP_OF_STACK);
-          Variable v = getStackVariable(frame, TOP_OF_STACK);
-          if (v.getType().equals(Type.BOOLEAN_TYPE)) {
-            writeValue(false);
-          } else if (v.getType().equals(Type.BYTE_TYPE)
-               || v.getType().equals(Type.CHAR_TYPE)
-               || v.getType().equals(Type.SHORT_TYPE)
-               || v.getType().equals(Type.INT_TYPE)) {
-            writeValue(0);
-          } else {
-            writeValue();
-          }
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-          writeGoto(jumpInsn.label);
-          writer.writeNull();
-          sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-          writer.writeClose();
-        }
-        break;
-      }
-      case IF_ICMPEQ:
-      case IF_ICMPGE:
-      case IF_ICMPGT:
-      case IF_ICMPLE:
-      case IF_ICMPLT:
-      case IF_ICMPNE:
-      case IF_ACMPEQ:
-      case IF_ACMPNE: {
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeCatchBlockIds(currentCatchList);
-        writer.writeKeyword(Token.IF_STATEMENT);
-        writer.writeOpen();
-        Token conditionalToken = getConditionToken(jumpInsn.getOpcode());
-        sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-        writer.writeKeyword(conditionalToken);
-        writer.writeOpen();
-        writeStackAccess(frame, TOP_OF_STACK - 1);
-        writeStackAccess(frame, TOP_OF_STACK);
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        writeGoto(jumpInsn.label);
-        writer.writeNull();
-        sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-        writer.writeClose();
-        break;
-      }
-      case GOTO: {
-        writeGoto(jumpInsn.label);
-        break;
-      }
-      default: {
-        throw new JillException("Not yet supported " + Printer.OPCODES[jumpInsn.getOpcode()]);
-      }
-    }
-  }
-
-
-  private void insertLabeledStatementIfNecessary(@Nonnegative int labeledStatmentIndex)
-      throws IOException {
-    AbstractInsnNode existing = currentMethod.instructions.get(labeledStatmentIndex);
-    if (existing instanceof LabelNode) {
-      return;
-    } else {
-      writeLabelInsn(labeledStatmentIndex);
-    }
-  }
-
-  @Nonnull
-  private Token getConditionToken(@Nonnegative int opcode) {
-    switch (opcode) {
-      case IFNULL:
-      case IF_ACMPEQ:
-      case IF_ICMPEQ:
-      case IFEQ:
-        return Token.EQ_OPERATION;
-      case IF_ICMPGE:
-      case IFGE:
-        return Token.GTE_OPERATION;
-      case IF_ICMPGT:
-      case IFGT:
-        return Token.GT_OPERATION;
-      case IF_ICMPLE:
-      case IFLE:
-        return Token.LTE_OPERATION;
-      case IF_ICMPLT:
-      case IFLT:
-        return Token.LT_OPERATION;
-      case IFNONNULL:
-      case IF_ACMPNE:
-      case IF_ICMPNE:
-      case IFNE:
-        return Token.NEQ_OPERATION;
-    }
-    throw new JillException("Unsupported condition.");
-  }
-
-  @Nonnull
-  private Token invertComparisonToken(@Nonnull Token cmpToken) {
-    switch (cmpToken) {
-      case GTE_OPERATION: {
-        return Token.LT_OPERATION;
-      }
-      case GT_OPERATION: {
-        return Token.LTE_OPERATION;
-      }
-      case LTE_OPERATION: {
-        return Token.GT_OPERATION;
-      }
-      case LT_OPERATION: {
-        return Token.GTE_OPERATION;
-      }
-      case EQ_OPERATION: {
-        return Token.NEQ_OPERATION;
-      }
-      case NEQ_OPERATION: {
-        return Token.EQ_OPERATION;
-      }
-      default: {
-        return cmpToken;
-      }
-    }
-  }
-
-  @Nonnull
-  private boolean needNotOperator(@Nonnull Token cmpToken, @Nonnull CmpOperands cmpOps) {
-    switch (cmpToken) {
-      case GTE_OPERATION:
-      case GT_OPERATION: {
-        return !isCmpg(cmpOps);
-      }
-      case LTE_OPERATION:
-      case LT_OPERATION: {
-        return !isCmpl(cmpOps);
-      }
-      default: {
-        return false;
-      }
-    }
-  }
-
-  private boolean isCmpl(@Nonnull CmpOperands cmpOps) {
-    return cmpOps.opcode == DCMPL || cmpOps.opcode == FCMPL;
-  }
-
-  private boolean isCmpg(@Nonnull CmpOperands cmpOps) {
-    return cmpOps.opcode == DCMPG || cmpOps.opcode == FCMPG;
-  }
-
-  private void writeGoto(LabelNode labelNode) throws IOException {
-    int insIndex = currentMethod.instructions.indexOf(labelNode);
-    writeGoto(insIndex);
-  }
-
-  private void writeGoto(int insIndex) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.GOTO);
-    writer.writeOpen();
-    writer.writeId(Integer.toString(insIndex));
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeReturn(@Nonnull Frame<BasicValue> frame, int stackIdx) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.RETURN_STATEMENT);
-    writer.writeOpen();
-    if (stackIdx == 0) {
-      writer.writeNull();
-    } else {
-      writeStackAccess(frame, stackIdx);
-    }
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeStackAccess(@Nonnull Frame<BasicValue> frame, int stackIdx)
-      throws IndexOutOfBoundsException, IOException {
-    writeLocalRef(getStackVariable(frame, stackIdx));
-  }
-
-  private void writeLocalAccess(@Nonnull Frame<BasicValue> frame, @Nonnegative int localIdx)
-      throws IndexOutOfBoundsException, IOException {
-    writeLocalRef(getLocalVariable(frame, localIdx));
-  }
-
-  private void writeLocalRef(@Nonnull Variable v) throws IOException {
-    if (v.isThis()) {
-      sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-      writer.writeKeyword(Token.THIS_REF);
-      writer.writeOpen();
-      writer.writeId(v.getType().getDescriptor());
-      sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-      writer.writeClose();
-    } else {
-      Token token = v.isParameter() ? Token.PARAMETER_REF : Token.LOCAL_REF;
-      sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-      writer.writeKeyword(token);
-      writer.writeOpen();
-      writer.writeId(v.getId());
-      sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-      writer.writeClose();
-    }
-  }
-
-  private void writeInstanceFieldRef(@Nonnull FieldInsnNode fldInsn,
-      @Nonnull Frame<BasicValue> frame, int offset) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.FIELD_REF);
-    writer.writeOpen();
-    writer.writeId(fldInsn.name);
-    writer.writeId(fldInsn.desc);
-    writer.writeId(Type.getObjectType(fldInsn.owner).getDescriptor());
-    writer.writeFieldRefKindEnum(FieldRefKind.INSTANCE);
-    writeStackAccess(frame, offset);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeStaticFieldRef(@Nonnull FieldInsnNode fldInsn)
-      throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.FIELD_REF);
-    writer.writeOpen();
-    writer.writeId(fldInsn.name);
-    writer.writeId(fldInsn.desc);
-    writer.writeId(Type.getObjectType(fldInsn.owner).getDescriptor());
-    writer.writeFieldRefKindEnum(FieldRefKind.STATIC);
-    writer.writeNull();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  public void dump() {
-    Textifier t = new Textifier();
-    Frame<BasicValue>[] frames = analyzer.getFrames();
-    List<Object> text = t.getText();
-    int insnIdx = 0;
-
-    currentMethod.accept(new TraceMethodVisitor(t));
-
-    for (Object o : text) {
-      if (insnIdx < frames.length && frames[insnIdx] != null) {
-        System.out.print(insnIdx + " : [");
-        for (int i = 0; i < frames[insnIdx].getLocals(); i++) {
-          BasicValue bv = frames[insnIdx].getLocal(i);
-          System.out.print(bv.toString() + " ");
-        }
-        System.out.print("| ");
-        for (int i = 0; i < frames[insnIdx].getStackSize(); i++) {
-          BasicValue bv = frames[insnIdx].getStack(i);
-          System.out.print(bv.toString() + " ");
-        }
-        System.out.println("]");
-      }
-      System.out.print(o);
-      insnIdx++;
-    }
-  }
-
-  private void writeLocals() throws IOException {
-    writer.writeOpenNodeList();
-
-    if (currentMethod.instructions.size() != 0) {
-      Iterator<Variable> varIt = collectLocals();
-      while (varIt.hasNext()) {
-        writeLocal(varIt.next());
-      }
-    }
-
-    writer.writeCloseNodeList();
-  }
-
-  private void writeLocal(Variable v) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.LOCAL);
-    writer.writeOpen();
-    writer.writeId(v.getId());
-    writer.writeInt(v.isSynthetic() ? Opcodes.ACC_SYNTHETIC : NO_MODIFIER);
-    writer.writeId(v.getType().getDescriptor());
-    writer.writeId(v.getName());
-    writer.writeOpenNodeList(); // Empty annotation set, annotations on locals are not kept
-    writer.writeCloseNodeList();
-    writer.writeOpenNodeList();
-    if (v.hasSignature()) {
-      writer.writeKeyword(Token.GENERIC_SIGNATURE); // Marker generic signature
-      writer.writeOpen();
-      writer.writeString(v.getSignature());
-      writer.writeClose();
-    }
-    writer.writeCloseNodeList();
-    // TODO(mikaelpeltier): Add debug information.
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  private void writePrimitiveTypeConversion(@Nonnull Class<?> targetType,
-      @Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame) throws IOException {
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(nextFrame, TOP_OF_STACK);
-    writeCastOperation(Token.DYNAMIC_CAST_OPERATION, frame, Type.getDescriptor(targetType),
-        TOP_OF_STACK);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeCastOperation(@Nonnull Token cast, @Nonnull Variable var,
-      @Nonnull String typeDesc) throws IOException {
-    assert cast == Token.DYNAMIC_CAST_OPERATION || cast == Token.REINTERPRETCAST_OPERATION;
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(cast);
-    writer.writeOpen();
-    writer.writeId(typeDesc);
-    writeLocalRef(var);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeCastOperation(@Nonnull Token cast, @Nonnull Frame<BasicValue> frame,
-      @Nonnull String typeDesc, int stackIdx) throws IOException {
-    writeCastOperation(cast, getStackVariable(frame, stackIdx), typeDesc);
-  }
-
-  private void writeDup(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
-  }
-
-  private void writeDupX1(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
-    writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
-    writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 2);
-  }
-
-  private void writeDupX2(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
-    writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
-    writeAssign(frame, TOP_OF_STACK - 2, nextFrame, TOP_OF_STACK - 2);
-    writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 3);
-  }
-
-  private void writeDup2(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
-    writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
-  }
-
-  private void writeDup2X1(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
-    writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
-    writeAssign(frame, TOP_OF_STACK - 2, nextFrame, TOP_OF_STACK - 2);
-    writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 3);
-    writeAssign(nextFrame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 4);
-  }
-
-  private void writeDup2X2(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
-    writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
-    writeAssign(frame, TOP_OF_STACK - 2, nextFrame, TOP_OF_STACK - 2);
-    writeAssign(frame, TOP_OF_STACK - 3, nextFrame, TOP_OF_STACK - 3);
-    writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 4);
-    writeAssign(nextFrame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 5);
-  }
-
-  /**
-   * writes frame2.stack[frame.stack.size() + offset2] = frame1.stack[frame.stack.size() + offset1]
-   *
-   * @throws IOException
-   */
-  private void writeAssign(@Nonnull Frame<BasicValue> frame1, int offset1,
-      @Nonnull Frame<BasicValue> frame2, int offset2) throws IOException {
-    assert !isBooleanAssignIssue(
-        getStackVariable(frame2, offset2),
-        getStackVariable(frame1, offset1));
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(frame2, offset2);
-    writeStackAccess(frame1, offset1);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  private void writeBinaryOperation(
-      @Nonnull Token op, @Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
-      throws IOException {
-    assert !isBooleanAssignIssue(
-        getStackVariable(frame, TOP_OF_STACK - 1),
-        getStackVariable(frame, TOP_OF_STACK));
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeCatchBlockIds(currentCatchList);
-    writer.writeKeyword(Token.EXPRESSION_STATEMENT);
-    writer.writeOpen();
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(Token.ASG_OPERATION);
-    writer.writeOpen();
-    writeStackAccess(nextFrame, TOP_OF_STACK);
-    sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
-    writer.writeKeyword(op);
-    writer.writeOpen();
-    writeStackAccess(frame, TOP_OF_STACK - 1);
-    writeStackAccess(frame, TOP_OF_STACK);
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-    sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1);
-    writer.writeClose();
-  }
-
-  @Nonnull
-  private Iterator<Variable> collectLocals() {
-    Set<Variable> locals = new LinkedHashSet<Variable>();
-
-    Frame<BasicValue>[] frames = analyzer.getFrames();
-    for (int frameIdx = 0; frameIdx < frames.length; frameIdx++) {
-      currentPc = frameIdx;
-      Frame<BasicValue> frame = frames[frameIdx];
-      if (frame != null) {
-        for (int localIdx = 0; localIdx < frame.getLocals(); localIdx++) {
-          BasicValue bv = frame.getLocal(localIdx);
-          if (bv != BasicValue.UNINITIALIZED_VALUE) {
-            Variable local = getLocalVariable(frame, localIdx);
-            if (!local.isParameter() && !local.isThis()) {
-              locals.add(local);
-            }
-          }
-        }
-        for (int stackIdx = 0; stackIdx < frame.getStackSize(); stackIdx++) {
-          Variable v = getStackVariable(frame, -stackIdx - 1);
-          locals.add(v);
-        }
-      }
-    }
-
-    // Do not forget to collect temporary variable required by some instructions.
-    for (int insnIdx = 0; insnIdx < currentMethod.instructions.size(); insnIdx++) {
-      AbstractInsnNode insn = currentMethod.instructions.get(insnIdx);
-      if (insn.getOpcode() == SWAP) {
-        locals.add(getTempVarFromTopOfStack(frames[insnIdx]));
-      }
-    }
-
-    return locals.iterator();
-  }
-
-  @Nonnull
-  private Variable getTempVarFromTopOfStack(@Nonnull Frame<BasicValue> frame) {
-    Variable topOfStackBeforeInst = getStackVariable(frame, TOP_OF_STACK);
-    String tmpVarId = "-swap_tmp_" + typeToUntypedDesc(topOfStackBeforeInst.getType());
-    Variable tmpVariable =
-        getVariable(tmpVarId, tmpVarId, topOfStackBeforeInst.getType(), null);
-    tmpVariable.setSynthetic();
-    return tmpVariable;
-  }
-
-  private void writeParameters()
-      throws IOException {
-    writer.writeOpenNodeList();
-
-    int parameterIdx = 0;
-    int parameterAnnotationIdx = 0;
-    currentPc = 0;
-
-    if (!AsmHelper.isStatic(currentMethod)) {
-      Type parameterType = Type.getObjectType(currentClass.name);
-      LocalVariableNode lvn = getLocalVariableNode(parameterIdx);
-      if (lvn == null) {
-        String pid = getUnnamedParameterId(parameterIdx, parameterType);
-        Variable p = getVariable(pid, pid, parameterType, null);
-        p.setThis();
-
-        Type untypedParameter = typeToUntyped(parameterType);
-        String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
-        Variable local = getVariable(lid, lid, untypedParameter, null);
-
-        parameter2Var.put(p, local);
-      } else {
-        assert parameterType.getDescriptor().equals(lvn.desc);
-        Variable p = getVariable(getNamedLocalId(lvn), lvn.name, parameterType, lvn.signature);
-        p.setThis();
-      }
-      parameterIdx++;
-    }
-
-    for (Type paramType : Type.getArgumentTypes(currentMethod.desc)) {
-      LocalVariableNode lvn = getLocalVariableNode(parameterIdx);
-      if (lvn == null) {
-        String pid = getUnnamedParameterId(parameterIdx, paramType);
-        Variable p = getVariable(pid, pid, paramType, null);
-        p.setParameter();
-        writeParameter(paramType, parameterIdx, p, parameterAnnotationIdx++);
-
-        Type untypedParameter = typeToUntyped(paramType);
-        String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
-        Variable local = getVariable(lid, lid, untypedParameter, null);
-
-        parameter2Var.put(p, local);
-      } else {
-        assert paramType.getDescriptor().equals(lvn.desc);
-        Variable p = getVariable(getNamedLocalId(lvn), lvn.name, paramType, lvn.signature);
-        p.setParameter();
-        writeParameter(paramType, parameterIdx, p, parameterAnnotationIdx++);
-      }
-      parameterIdx += paramType.getSize();
-    }
-
-    writer.writeCloseNodeList();
-  }
-
-  private void writeParameter(@Nonnull Type paramType, @Nonnegative int localIdx,
-      @Nonnull Variable param, @Nonnegative int parameterAnnotationIdx) throws IOException {
-    sourceInfoWriter.writeUnknwonDebugBegin();
-    writer.writeKeyword(Token.PARAMETER);
-    writer.writeOpen();
-    writer.writeId(param.getId());
-    writer.writeInt(NO_MODIFIER);
-    writer.writeId(paramType.getDescriptor());
-    writer.writeString(param.getName());
-    annotWriter.writeAnnotations(currentMethod, parameterAnnotationIdx);
-    writer.writeOpenNodeList();
-    if (param.hasSignature()) {
-      writer.writeKeyword(Token.GENERIC_SIGNATURE); // Marker generic signature
-      writer.writeOpen();
-      writer.writeString(param.getSignature());
-      writer.writeClose();
-    }
-    writer.writeCloseNodeList();
-    // TODO(mikaelpeltier) Add debug information of parameter
-    sourceInfoWriter.writeUnknownDebugEnd();
-    writer.writeClose();
-  }
-
-  @CheckForNull
-  private LocalVariableNode getLocalVariableNode(@Nonnegative int localIdx) {
-    assert localIdx >= 0;
-    if (options.isEmitDebugInfo() && currentMethod.localVariables != null) {
-      for (LocalVariableNode lvn : currentMethod.localVariables) {
-        int startScope = currentMethod.instructions.indexOf(lvn.start) - 1;
-        int endScope = currentMethod.instructions.indexOf(lvn.end);
-        if (lvn.index == localIdx && currentPc >= startScope && currentPc <= endScope) {
-          assert lvn.desc != null;
-          return lvn;
-        }
-      }
-    }
-
-    return null;
-  }
-
-  private void removeDeadCode() {
-    Frame<BasicValue>[] frames = analyzer.getFrames();
-    AbstractInsnNode[] insns = currentMethod.instructions.toArray();
-    for (int i = 0; i < frames.length; ++i) {
-      if (frames[i] == null) {
-        // do not remove labels, they may be used as local scope bounds or catch bounds.
-        AbstractInsnNode insn = insns[i];
-        if (insn instanceof LabelNode) {
-          continue;
-        }
-        currentMethod.instructions.remove(insn);
-      }
-    }
-  }
-
-  private boolean isBooleanAssignIssue(@Nonnull Variable lhs, @Nonnull Variable rhs) {
-    return isBooleanAssignIssue(lhs.getType(), rhs.getType());
-  }
-
-  private boolean isBooleanAssignIssue(@Nonnull Type lhs, @Nonnull Type rhs) {
-    return (lhs == Type.BOOLEAN_TYPE && rhs != Type.BOOLEAN_TYPE)
-        || (rhs == Type.BOOLEAN_TYPE && lhs != Type.BOOLEAN_TYPE);
-  }
-
-  @Nonnull
-  private Variable getLocalVariable(@Nonnull Frame<BasicValue> frame, @Nonnegative int localIdx){
-    BasicValue bv = frame.getLocal(localIdx);
-    assert bv != BasicValue.UNINITIALIZED_VALUE;
-    LocalVariableNode lvn = getLocalVariableNode(localIdx);
-    String localName;
-    String id;
-    Type localType;
-    String signature;
-    Variable v;
-    if (lvn == null) {
-      id = getUnnamedLocalId(localIdx, bv.getType());
-      localName = id;
-      localType = typeToUntyped(bv.getType());
-      signature = null;
-      v = getVariable(id, localName, localType, signature);
-      // Unnamed variable will be define as synthetic
-      v.setSynthetic();
-    } else {
-      id = getNamedLocalId(lvn);
-      localName = lvn.name;
-      localType = Type.getType(lvn.desc);
-      signature = lvn.signature;
-      v = getVariable(id, localName, localType, signature);
-    }
-    return v;
-  }
-
-  @Nonnull
-  private String getUnnamedParameterId(@Nonnegative int localIdx, @Nonnull Type localType) {
-    return "-p_" + localIdx + "_" + stringLegalizer(localType.getDescriptor());
-  }
-
-  @Nonnull
-  private String getUnnamedLocalId(@Nonnegative int localIdx, @Nonnull Type localType) {
-    return "-l_" + localIdx + "_" + typeToUntypedDesc(localType);
-  }
-
-  @Nonnull
-  private String getNamedLocalId(@Nonnull LocalVariableNode lvn) {
-    return (lvn.name + "_" + lvn.index + "_" + (lvn.signature != null ?
-        stringLegalizer(lvn.signature) : stringLegalizer(lvn.desc)));
-  }
-
-  @Nonnull
-  private Variable getStackVariable(@Nonnull Frame<BasicValue> frame, int stackIdx){
-    int stackHeight = frame.getStackSize() + stackIdx;
-    BasicValue bv = frame.getStack(stackHeight);
-    assert bv != BasicValue.UNINITIALIZED_VALUE;
-    String id = "-s_" + stackHeight + "_" + typeToUntypedDesc(bv.getType());
-    Variable variable = getVariable(id, id, typeToUntyped(bv.getType()), null);
-    variable.setSynthetic();
-    return variable;
-  }
-
-  @Nonnull
-  private Variable getVariable(@Nonnull String id, @Nonnull String name, @Nonnull Type type,
-      @CheckForNull String signature) {
-    Variable var = nameToVar.get(id);
-
-    if (var == null) {
-      var = new Variable(id, name, type, signature);
-      nameToVar.put(id, var);
-    }
-
-    return var;
-  }
-
-  @Nonnull
-  private String typeToUntypedDesc(@Nonnull Type type) {
-    if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
-      return "R";
-    } else if (type.getSort() == Type.BOOLEAN || type.getSort() == Type.BYTE
-        || type.getSort() == Type.CHAR || type.getSort() == Type.SHORT
-        || type.getSort() == Type.INT) {
-      return Type.INT_TYPE.getDescriptor();
-    }
-    return type.getDescriptor();
-  }
-
-  @Nonnull
-  private Type typeToUntyped(@Nonnull Type type) {
-    if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
-      return Type.getType("Ljava/lang/Object;");
-    } else if (type.getSort() == Type.BOOLEAN || type.getSort() == Type.BYTE
-        || type.getSort() == Type.CHAR || type.getSort() == Type.SHORT
-        || type.getSort() == Type.INT) {
-      return Type.INT_TYPE;
-    }
-    return type;
-  }
-
-  @Nonnull
-  private String stringLegalizer(@Nonnull String str) {
-    return str.replace('/', '_').replace(';', '_').replace('<', '_').replace('>', '_')
-        .replace(':', '_');
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/RetentionPolicy.java b/jill/src/com/android/jill/frontend/java/RetentionPolicy.java
deleted file mode 100644
index 53bb6cb..0000000
--- a/jill/src/com/android/jill/frontend/java/RetentionPolicy.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-
-
-/**
- * Annotation retention policy
- */
-public enum RetentionPolicy {
-  /**
-   *  @see RetentionPolicy#SOURCE
-   */
-  SOURCE,
-  /**
-   *  @see RetentionPolicy#CLASS
-   */
-  CLASS,
-  /**
-   *  @see RetentionPolicy#RUNTIME
-   */
-  RUNTIME,
-  /**
-   * Retention policy is unknown, it is useful for annotation literal where only root
-   * annotation have a retention policy, others annotation literal have unknown retention.
-   */
-  UNKNOWN
-}
diff --git a/jill/src/com/android/jill/frontend/java/SourceInfoWriter.java b/jill/src/com/android/jill/frontend/java/SourceInfoWriter.java
deleted file mode 100644
index bf46df2..0000000
--- a/jill/src/com/android/jill/frontend/java/SourceInfoWriter.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import com.android.jill.backend.jayce.JayceWriter;
-
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldNode;
-
-import java.io.IOException;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * This writer handles source info writing context.
- */
-public class SourceInfoWriter {
-
-  @Nonnull
-  protected final JayceWriter writer;
-
-  /* debug infos */
-  @Nonnegative
-  private static final int NO_START_LINE = 0;
-
-  @Nonnegative
-  private static final int NO_END_LINE = 0;
-
-  private static final String NO_FILENAME = null;
-
-  @CheckForNull
-  private String currentFileName;
-
-  @Nonnegative
-  private int currentLineNumber;
-
-  public SourceInfoWriter(JayceWriter writer) {
-    this.writer = writer;
-  }
-
-  public void writeDebugBegin(@Nonnull ClassNode cn) throws IOException {
-    writeDebugBegin(cn, NO_START_LINE);
-  }
-
-  public void writeDebugBegin(@Nonnull ClassNode cn, @Nonnull FieldNode fn)
-      throws IOException {
-    writeUnknwonDebugBegin();
-  }
-
-  public void writeDebugBegin(@Nonnull ClassNode cn, int startLine)
-      throws IOException {
-    if (cn.sourceFile == null) {
-      writeUnknwonDebugBegin();
-    } else {
-      writeDebugBeginInternal(cn.sourceFile, startLine);
-    }
-  }
-
-  public void writeUnknwonDebugBegin() throws IOException {
-    writeDebugBeginInternal(NO_FILENAME, NO_START_LINE);
-  }
-
-  private void writeDebugBeginInternal(@CheckForNull String sourceFile, int startLine)
-      throws IOException {
-    writeFileNameIfDifferentFromCurrent(sourceFile);
-    writeLineIfDifferentFromCurrent(startLine, true);
-  }
-
-  public void writeDebugEnd(@Nonnull ClassNode cn)
-      throws IOException {
-    writeDebugEnd(cn, NO_END_LINE);
-  }
-
-  public void writeDebugEnd(@Nonnull ClassNode cn, @Nonnull FieldNode fn)
-      throws IOException {
-    writeUnknownDebugEnd();
-  }
-
-  public void writeDebugEnd(@Nonnull ClassNode cn, int endLine) throws IOException {
-    if (cn.sourceFile == null) {
-      writeUnknownDebugEnd();
-    } else {
-      writeLineIfDifferentFromCurrent(endLine, false);
-    }
-  }
-
-  public void writeUnknownDebugEnd() throws IOException {
-    writeLineIfDifferentFromCurrent(NO_END_LINE, false);
-  }
-
-  private void writeFileNameIfDifferentFromCurrent(@CheckForNull String fileName)
-      throws IOException {
-    if (fileName != null && !fileName.equals(currentFileName)) {
-      writeCurrentFileName(fileName);
-    }
-    // Assume that elements with unknown debug infos are in same file.
-  }
-
-  private void writeCurrentFileName(@Nonnull String fileName)
-      throws IOException {
-    writer.writeFileName(fileName);
-    currentFileName = fileName;
-  }
-
-  private void writeLineIfDifferentFromCurrent(@Nonnegative int lineNumber,
-      boolean isStartLine)
-      throws IOException {
-    if (lineNumber != currentLineNumber) {
-      writeCurrentLine(lineNumber);
-    }
-  }
-
-  private void writeCurrentLine(@Nonnegative int lineNumber)
-      throws IOException {
-    writer.writeCurrentLineInfo(lineNumber);
-    currentLineNumber = lineNumber;
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/Variable.java b/jill/src/com/android/jill/frontend/java/Variable.java
deleted file mode 100644
index 526b282..0000000
--- a/jill/src/com/android/jill/frontend/java/Variable.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java;
-
-import org.objectweb.asm.Type;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * Represents variables that are used by Jill to represent local and stack items.
- */
-public class Variable {
-
-  @Nonnull
-  private final Type type;
-
-  @Nonnull
-  private final String id;
-
-  @CheckForNull
-  private final String signature;
-
-  @Nonnull
-  private String name;
-
-  private boolean isThis;
-
-  private boolean isParameter;
-
-  private boolean isSynthetic;
-
-  public Variable(@Nonnull String id, @Nonnull String name, @Nonnull Type type,
-      @CheckForNull String signature) {
-    this.id = id;
-    this.name = name;
-    this.type = type;
-    this.signature = signature;
-    isThis = false;
-    isParameter = false;
-    isSynthetic = false;
-  }
-
-  @Nonnull
-  public Type getType() {
-    return type;
-  }
-
-  public void setName(@Nonnull String name) {
-    this.name = name;
-  }
-
-  public boolean hasSignature() {
-    return signature != null;
-  }
-
-  @Nonnull
-  public String getSignature() {
-    assert signature != null;
-    return signature;
-  }
-
-  @Nonnull
-  public String getName() {
-    return name;
-  }
-
-  @Nonnull
-  public String getId() {
-    return id;
-  }
-
-  public boolean isThis() {
-    return isThis;
-  }
-
-  public void setThis() {
-    this.isThis = true;
-  }
-
-  public boolean isParameter() {
-    return isParameter;
-  }
-
-  public void setParameter() {
-    this.isParameter = true;
-  }
-
-  public boolean isSynthetic() {
-    return isSynthetic;
-  }
-
-  public void setSynthetic() {
-    this.isSynthetic = true;
-  }
-}
diff --git a/jill/src/com/android/jill/frontend/java/analyzer/JillAnalyzer.java b/jill/src/com/android/jill/frontend/java/analyzer/JillAnalyzer.java
deleted file mode 100644
index 34aa756..0000000
--- a/jill/src/com/android/jill/frontend/java/analyzer/JillAnalyzer.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.frontend.java.analyzer;
-
-import com.google.common.base.Strings;
-
-import com.android.jill.JillException;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.analysis.AnalyzerException;
-import org.objectweb.asm.tree.analysis.BasicInterpreter;
-import org.objectweb.asm.tree.analysis.BasicValue;
-
-import javax.annotation.Nonnull;
-
-/**
- * Jill analyzer computes types by separating arrays and references, instead of using a single
- * "object reference" type. Nevertheless it does not compute always the exact type of object
- * reference but uses {@Code java.lang.Object} when exact type computation requires to load
- * classes.
- */
-public class JillAnalyzer extends BasicInterpreter {
-
-  @Override
-  public BasicValue newValue(Type type) {
-    if (type == null) {
-      return BasicValue.UNINITIALIZED_VALUE;
-    }
-    switch (type.getSort()) {
-      case Type.VOID:
-        return null;
-      case Type.BOOLEAN:
-      case Type.CHAR:
-      case Type.BYTE:
-      case Type.SHORT:
-      case Type.INT:
-        return BasicValue.INT_VALUE;
-      case Type.FLOAT:
-        return BasicValue.FLOAT_VALUE;
-      case Type.LONG:
-        return BasicValue.LONG_VALUE;
-      case Type.DOUBLE:
-        return BasicValue.DOUBLE_VALUE;
-      case Type.ARRAY:
-      case Type.OBJECT:
-        return new BasicValue(type);
-      default:
-        throw new Error("Internal error");
-    }
-  }
-
-
-  @Override
-  public BasicValue binaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2)
-      throws AnalyzerException {
-    if (insn.getOpcode() == AALOAD) {
-      // value1 means array reference.
-      Type arrayType = value1.getType();
-      String arrayTypeDesc = arrayType.getDescriptor();
-      if (arrayType.getSort() == Type.ARRAY) {
-        return newValue(Type.getType(arrayTypeDesc.substring(1)));
-      } else if ("Lnull;".equals(arrayTypeDesc)) {
-        return value1;
-      }
-
-      throw new JillException("Fails to retrieve array element value");
-    }
-    return super.binaryOperation(insn, value1, value2);
-  }
-
-  @Override
-  public BasicValue merge(final BasicValue v, final BasicValue w) {
-    assert v != null;
-    assert w != null;
-
-    if (v.equals(w) || v == BasicValue.UNINITIALIZED_VALUE) {
-      return v;
-    } else if (w == BasicValue.UNINITIALIZED_VALUE) {
-      return BasicValue.UNINITIALIZED_VALUE;
-    } else {
-      Type type1 = v.getType();
-      Type type2 = w.getType();
-
-      if ((type1.getSort() == Type.ARRAY && type2.getSort() == Type.OBJECT
-          && !isKnownNull(type2))
-          || (type1.getSort() == Type.OBJECT && !isKnownNull(type1) &&
-          type2.getSort() == Type.ARRAY)) {
-        return BasicValue.REFERENCE_VALUE;
-      } else if ((type1.getSort() == Type.ARRAY || isKnownNull(type1))
-          && (type2.getSort() == Type.ARRAY || isKnownNull(type2))) {
-        if (isKnownNull(type1)) {
-          return w;
-        } else if (isKnownNull(type2)) {
-          return v;
-        } else {
-          BasicValue componentUnion =
-              merge(new BasicValue(type1.getElementType()), new BasicValue(type2.getElementType()));
-          if (componentUnion == BasicValue.UNINITIALIZED_VALUE) {
-            return BasicValue.REFERENCE_VALUE;
-          }
-          return new BasicValue(Type.getType(
-              Strings.repeat("[", Math.min(type1.getDimensions(), type2.getDimensions()))
-              + componentUnion.getType().getDescriptor()));
-        }
-      } else if (type1.getSort() == Type.OBJECT && type2.getSort() == Type.OBJECT) {
-        if (isKnownNull(type1)) {
-          return w;
-        } else if (isKnownNull(type2)) {
-          return v;
-        } else {
-          return BasicValue.REFERENCE_VALUE;
-        }
-      } else if (isIntLike(type1) && isIntLike(type2)) {
-        return BasicValue.INT_VALUE;
-      } else {
-        return BasicValue.UNINITIALIZED_VALUE;
-      }
-    }
-  }
-
-  private boolean isIntLike(@Nonnull Type t) {
-    return t == Type.BOOLEAN_TYPE || t == Type.BYTE_TYPE || t == Type.CHAR_TYPE
-        || t == Type.SHORT_TYPE || t == Type.INT_TYPE;
-  }
-
-  private boolean isKnownNull(@Nonnull Type t) {
-    return ("Lnull;".equals(t.getDescriptor()));
-  }
-}
diff --git a/jill/src/com/android/jill/utils/FileUtils.java b/jill/src/com/android/jill/utils/FileUtils.java
deleted file mode 100644
index 460baa5..0000000
--- a/jill/src/com/android/jill/utils/FileUtils.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.utils;
-
-import java.io.File;
-import java.util.List;
-
-import javax.annotation.Nonnull;
-
-/**
- * Utilities related to file support.
- */
-public class FileUtils {
-
-  @Nonnull
-  public static final String JAVA_BINARY_FILE_EXTENSION = ".class";
-
-  @Nonnull
-  public static final String JAR_FILE_EXTENSION = ".jar";
-
-  public static void getJavaBinaryFiles(@Nonnull File file, @Nonnull List<File> binaryFiles) {
-    if (file.isDirectory()) {
-      File allFiles[] = file.listFiles();
-      for (File aFile : allFiles) {
-        getJavaBinaryFiles(aFile, binaryFiles);
-      }
-    } else if (isJavaBinaryFile(file)) {
-      binaryFiles.add(file.getAbsoluteFile());
-    }
-  }
-
-  public static boolean isJavaBinaryFile(@Nonnull File file) {
-    return isJavaBinaryFile(file.getName());
-  }
-
-  public static boolean isJavaBinaryFile(@Nonnull String fileName) {
-    return fileName.endsWith(FileUtils.JAVA_BINARY_FILE_EXTENSION);
-  }
-
-  public static boolean isJarFile(@Nonnull File file) {
-    return file.getName().endsWith(FileUtils.JAR_FILE_EXTENSION);
-  }
-}
diff --git a/jill/src/com/android/jill/utils/enums/DispatchKindIdHelper.java b/jill/src/com/android/jill/utils/enums/DispatchKindIdHelper.java
deleted file mode 100644
index bd0b504..0000000
--- a/jill/src/com/android/jill/utils/enums/DispatchKindIdHelper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.utils.enums;
-
-import com.android.jill.frontend.java.MethodBodyWriter.DispatchKind;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * A helper class to encode {@link DispatchKind} enum values in Jayce format.
- */
-public class DispatchKindIdHelper {
-
-  @Nonnull
-  private static byte[] ids;
-
-  static {
-    ids = new byte[2];
-    ids[DispatchKind.VIRTUAL.ordinal()]  = 0;
-    ids[DispatchKind.DIRECT.ordinal()]   = 1;
-  }
-
-  @Nonnegative
-  public static byte getId(@Nonnull Enum<?> enumValue) {
-    return ids[enumValue.ordinal()];
-  }
-}
diff --git a/jill/src/com/android/jill/utils/enums/FieldRefKindIdHelper.java b/jill/src/com/android/jill/utils/enums/FieldRefKindIdHelper.java
deleted file mode 100644
index 8f01158..0000000
--- a/jill/src/com/android/jill/utils/enums/FieldRefKindIdHelper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.utils.enums;
-
-import com.android.jill.frontend.java.MethodBodyWriter.FieldRefKind;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * A helper class to encode {@link FieldRefKind} enum values in Jayce format.
- */
-public class FieldRefKindIdHelper {
-
-  @Nonnull
-  private static byte[] ids;
-
-  static {
-    ids = new byte[2];
-    ids[FieldRefKind.INSTANCE.ordinal()] = 0;
-    ids[FieldRefKind.STATIC.ordinal()]   = 1;
-  }
-
-  @Nonnegative
-  public static byte getId(@Nonnull Enum<?> enumValue) {
-    return ids[enumValue.ordinal()];
-  }
-}
diff --git a/jill/src/com/android/jill/utils/enums/MethodKindIdHelper.java b/jill/src/com/android/jill/utils/enums/MethodKindIdHelper.java
deleted file mode 100644
index e8f5c6e..0000000
--- a/jill/src/com/android/jill/utils/enums/MethodKindIdHelper.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.utils.enums;
-
-import com.android.jill.frontend.java.MethodBodyWriter.MethodKind;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * A helper class to encode {@link MethodKind} enum values in Jayce format.
- */
-public class MethodKindIdHelper {
-
-  @Nonnull
-  private static byte[] ids;
-
-  static {
-    ids = new byte[3];
-    ids[MethodKind.STATIC.ordinal()]               = 0;
-    ids[MethodKind.INSTANCE_NON_VIRTUAL.ordinal()] = 1;
-    ids[MethodKind.INSTANCE_VIRTUAL.ordinal()]     = 2;
-  }
-
-  @Nonnegative
-  public static byte getId(@Nonnull Enum<?> enumValue) {
-    return ids[enumValue.ordinal()];
-  }
-}
diff --git a/jill/src/com/android/jill/utils/enums/ReceiverKindIdHelper.java b/jill/src/com/android/jill/utils/enums/ReceiverKindIdHelper.java
deleted file mode 100644
index 047e606..0000000
--- a/jill/src/com/android/jill/utils/enums/ReceiverKindIdHelper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.utils.enums;
-
-import com.android.jill.frontend.java.MethodBodyWriter.MethodCallReceiverKind;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * A helper class to encode {@link MethodCallReceiverKind} enum values in Jayce format.
- */
-public class ReceiverKindIdHelper {
-
-  @Nonnull
-  private static byte[] ids;
-
-  static {
-    ids = new byte[2];
-    ids[MethodCallReceiverKind.CLASS.ordinal()]     = 0;
-    ids[MethodCallReceiverKind.INTERFACE.ordinal()] = 1;
-  }
-
-  @Nonnegative
-  public static byte getId(@Nonnull Enum<?> enumValue) {
-    return ids[enumValue.ordinal()];
-  }
-}
diff --git a/jill/src/com/android/jill/utils/enums/RetentionPolicyIdHelper.java b/jill/src/com/android/jill/utils/enums/RetentionPolicyIdHelper.java
deleted file mode 100644
index f955601..0000000
--- a/jill/src/com/android/jill/utils/enums/RetentionPolicyIdHelper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill.utils.enums;
-
-import com.android.jill.frontend.java.RetentionPolicy;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * A helper class to encode {@link RetentionPolicy} enum values in Jayce format.
- */
-public class RetentionPolicyIdHelper {
-
-  @Nonnull
-  private static byte[] ids;
-
-  static {
-    ids = new byte[5];
-    ids[RetentionPolicy.SOURCE.ordinal()]  = 0;
-    ids[RetentionPolicy.CLASS.ordinal()]   = 1;
-    ids[RetentionPolicy.RUNTIME.ordinal()] = 2;
-    ids[RetentionPolicy.UNKNOWN.ordinal()] = 4;
-  }
-
-  @Nonnegative
-  public static byte getId(@Nonnull Enum<?> enumValue) {
-    return ids[enumValue.ordinal()];
-  }
-}
diff --git a/jill/tests/com/android/jill/AllTests.java b/jill/tests/com/android/jill/AllTests.java
deleted file mode 100644
index e3ead54..0000000
--- a/jill/tests/com/android/jill/AllTests.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * Test suite containing all tests.
- */
-@RunWith(Suite.class)
-@SuiteClasses(value = {
-    Core.class})
-public class AllTests {
-}
diff --git a/jill/tests/com/android/jill/Core.java b/jill/tests/com/android/jill/Core.java
deleted file mode 100644
index 7c26772..0000000
--- a/jill/tests/com/android/jill/Core.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-import com.android.jack.TestTools;
-import com.android.jack.test.TestsProperties;
-
-import org.junit.Ignore;
-import org.junit.Test;
-
-import java.io.File;
-
-@Ignore("Tree")
-public class Core {
-
-  @Test
-  public void coreToJayceFromJar() throws Exception {
-    Options options = new Options();
-    options.setBinaryFile(new File(TestsProperties.getAndroidRootDir().getPath()
-        + "/out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes.jar"));
-    options.setVerbose(true);
-    options.output = TestTools.createTempFile("jillTest", ".zip");
-    Jill.process(options);
-  }
-
-  @Test
-  public void coreToJayceFromFolder() throws Exception {
-    Options options = new Options();
-    options.setBinaryFile(new File(TestsProperties.getAndroidRootDir().getPath()
-        + "/out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes/"));
-    options.setVerbose(true);
-    options.output = TestTools.createTempFile("jillTest", ".zip");
-    Jill.process(options);
-  }
-}
diff --git a/jill/tests/com/android/jill/LongLastingTests.java b/jill/tests/com/android/jill/LongLastingTests.java
deleted file mode 100644
index edcab23..0000000
--- a/jill/tests/com/android/jill/LongLastingTests.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-
-import com.android.jack.category.SlowTests;
-
-import org.junit.experimental.categories.Categories;
-import org.junit.experimental.categories.Categories.IncludeCategory;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * Test suite containing tests that are too time-consuming and cannot be run before submitting each
- * CL.
- */
-@RunWith(Categories.class)
-@IncludeCategory(SlowTests.class)
-@SuiteClasses(value = {AllTests.class})
-public class LongLastingTests {
-}
diff --git a/jill/tests/com/android/jill/PreSubmitTests.java b/jill/tests/com/android/jill/PreSubmitTests.java
deleted file mode 100644
index 0d4afcc..0000000
--- a/jill/tests/com/android/jill/PreSubmitTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed 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 com.android.jill;
-
-
-import com.android.jack.category.NonPreSubmitTests;
-
-import org.junit.experimental.categories.Categories;
-import org.junit.experimental.categories.Categories.ExcludeCategory;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * Test suite to run before submitting a CL.
- */
-@RunWith(Categories.class)
-@ExcludeCategory(NonPreSubmitTests.class)
-@SuiteClasses(value = {AllTests.class})
-public class PreSubmitTests {
-}
diff --git a/version.properties b/version.properties
deleted file mode 100644
index a679d75..0000000
--- a/version.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed 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.
-#
-version-file.version.code=1
-
-version=1.2-a6
-version.release.name=C
-version.release.code=3
-version.sub-release.kind=ALPHA
-version.sub-release.code=6
-
-# These properties are added by the release step
-# version.buildid=<BUILDID>
-# version.sha=<SHA>